summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/api/test-current.txt2
-rw-r--r--core/java/android/content/pm/PackageInstaller.java8
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java6
3 files changed, 15 insertions, 1 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt
index fee2f7736c4d..cd39d5eb65ae 100644
--- a/core/api/test-current.txt
+++ b/core/api/test-current.txt
@@ -17,6 +17,7 @@ package android {
field public static final String CONTROL_DEVICE_STATE = "android.permission.CONTROL_DEVICE_STATE";
field public static final String FORCE_DEVICE_POLICY_MANAGER_LOGS = "android.permission.FORCE_DEVICE_POLICY_MANAGER_LOGS";
field public static final String FORCE_STOP_PACKAGES = "android.permission.FORCE_STOP_PACKAGES";
+ field public static final String INSTALL_TEST_ONLY_PACKAGE = "android.permission.INSTALL_TEST_ONLY_PACKAGE";
field public static final String KEEP_UNINSTALLED_PACKAGES = "android.permission.KEEP_UNINSTALLED_PACKAGES";
field @Deprecated public static final String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS";
field public static final String MANAGE_ACTIVITY_TASKS = "android.permission.MANAGE_ACTIVITY_TASKS";
@@ -815,6 +816,7 @@ package android.content.pm {
}
public static class PackageInstaller.SessionParams implements android.os.Parcelable {
+ method public void setInstallFlagAllowTest();
method public void setInstallerPackageName(@Nullable String);
}
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index 5157e08deb34..85830ed125c0 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -1987,6 +1987,14 @@ public class PackageInstaller {
}
/**
+ * @hide
+ */
+ @TestApi
+ public void setInstallFlagAllowTest() {
+ installFlags |= PackageManager.INSTALL_ALLOW_TEST;
+ }
+
+ /**
* Set the installer package for the app.
*
* By default this is the app that created the {@link PackageInstaller} object.
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 27077b6b2a09..656f3474e797 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -584,12 +584,16 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
params.installFlags &= ~PackageManager.INSTALL_FROM_ADB;
params.installFlags &= ~PackageManager.INSTALL_ALL_USERS;
- params.installFlags &= ~PackageManager.INSTALL_ALLOW_TEST;
params.installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;
if ((params.installFlags & PackageManager.INSTALL_VIRTUAL_PRELOAD) != 0
&& !mPm.isCallerVerifier(callingUid)) {
params.installFlags &= ~PackageManager.INSTALL_VIRTUAL_PRELOAD;
}
+ if (mContext.checkCallingOrSelfPermission(
+ Manifest.permission.INSTALL_TEST_ONLY_PACKAGE)
+ != PackageManager.PERMISSION_GRANTED) {
+ params.installFlags &= ~PackageManager.INSTALL_ALLOW_TEST;
+ }
}
String originatingPackageName = null;