From dbaaacd5ad2feb5a5479b29291f1d8a7c0a07952 Mon Sep 17 00:00:00 2001 From: kholoud mohamed Date: Mon, 29 Mar 2021 17:40:28 +0100 Subject: [PATCH] Expose setInstallFlagAllowTest testAPI Exposed a testAPIs to set INSTALL_ALLOW_TEST install flag, and allowed it to holders of INSTALL_TEST_ONLY_PACKAGE permission. Bug: 183716601 Test: N/A Change-Id: Ie045f43c5224ed75e0ba8db91a3b77aa4d66a5d6 --- core/api/test-current.txt | 2 ++ core/java/android/content/pm/PackageInstaller.java | 8 ++++++++ .../com/android/server/pm/PackageInstallerService.java | 6 +++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 294b05c5d39db..fff4630ba466f 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"; @@ -811,6 +812,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 5157e08deb346..85830ed125c08 100644 --- a/core/java/android/content/pm/PackageInstaller.java +++ b/core/java/android/content/pm/PackageInstaller.java @@ -1986,6 +1986,14 @@ public class PackageInstaller { } } + /** + * @hide + */ + @TestApi + public void setInstallFlagAllowTest() { + installFlags |= PackageManager.INSTALL_ALLOW_TEST; + } + /** * Set the installer package for the app. * diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 27077b6b2a09a..656f3474e797a 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;