summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/test-current.txt1
-rw-r--r--core/java/android/content/pm/PackageInstaller.java1
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java7
3 files changed, 9 insertions, 0 deletions
diff --git a/api/test-current.txt b/api/test-current.txt
index 849c5503266d..128e84f59048 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -997,6 +997,7 @@ package android.content.pm {
method public void setEnableRollback(boolean, int);
method @RequiresPermission("android.permission.INSTALL_GRANT_RUNTIME_PERMISSIONS") public void setGrantedRuntimePermissions(String[]);
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setInstallAsApex();
+ method public void setInstallAsInstantApp(boolean);
method public void setInstallerPackageName(@Nullable String);
method public void setRequestDowngrade(boolean);
method @RequiresPermission(android.Manifest.permission.INSTALL_PACKAGES) public void setStaged();
diff --git a/core/java/android/content/pm/PackageInstaller.java b/core/java/android/content/pm/PackageInstaller.java
index da56abf73516..a9f143987cd4 100644
--- a/core/java/android/content/pm/PackageInstaller.java
+++ b/core/java/android/content/pm/PackageInstaller.java
@@ -1878,6 +1878,7 @@ public class PackageInstaller {
/** {@hide} */
@SystemApi
+ @TestApi
public void setInstallAsInstantApp(boolean isInstantApp) {
if (isInstantApp) {
installFlags |= PackageManager.INSTALL_INSTANT_APP;
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index f52db5fb5f2f..31ee59717dba 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -618,6 +618,13 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
}
}
+ if ((params.installFlags & PackageManager.INSTALL_INSTANT_APP) != 0
+ && !isCalledBySystemOrShell(callingUid)
+ && (mPm.getFlagsForUid(callingUid) & ApplicationInfo.FLAG_SYSTEM) == 0) {
+ throw new SecurityException(
+ "Only system apps could use the PackageManager.INSTALL_INSTANT_APP flag.");
+ }
+
if (params.isStaged && !isCalledBySystemOrShell(callingUid)) {
if (mBypassNextStagedInstallerCheck) {
mBypassNextStagedInstallerCheck = false;