diff options
| -rw-r--r-- | core/api/test-current.txt | 2 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageInstaller.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerService.java | 6 |
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; |