From 49c3fa7488a3a567786511d765b7476907027e9c Mon Sep 17 00:00:00 2001 From: Dario Freni Date: Mon, 4 Feb 2019 12:07:25 +0000 Subject: [PATCH] Disable package verifier for staged installs. This is a temporary measure to allow staged installs for APKs to work on dev-signed devices. Test: adb install --staged file.apk on taimen-eng target; adb install-multi-package file1.apex file2.apex file3.apk file4.apk Bug: 123753157 Change-Id: I537afbb08cb0a5db37bb823f4b084691dcd2f5d1 --- core/java/android/content/pm/PackageManager.java | 8 ++++++++ .../java/com/android/server/pm/PackageManagerService.java | 4 ++++ .../core/java/com/android/server/pm/StagingManager.java | 2 ++ 3 files changed, 14 insertions(+) diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index e2907e219b1f2..6e52b33692c81 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -866,6 +866,14 @@ public abstract class PackageManager { */ public static final int INSTALL_ENABLE_ROLLBACK = 0x00040000; + /** + * Flag parameter for {@link #installPackage} to indicate that package verification should be + * disabled for this package. + * + * @hide + */ + public static final int INSTALL_DISABLE_VERIFICATION = 0x00080000; + /** @hide */ @IntDef(flag = true, prefix = { "DONT_KILL_APP" }, value = { DONT_KILL_APP diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e405f25761991..fed49355c7ff1 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -13492,6 +13492,10 @@ public class PackageManagerService extends IPackageManager.Stub return false; } + if ((installFlags & PackageManager.INSTALL_DISABLE_VERIFICATION) != 0) { + return false; + } + boolean ensureVerifyAppsEnabled = isUserRestricted(userId, UserManager.ENSURE_VERIFY_APPS); // Check if installing from ADB diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 03716638bbeba..cc6cfbb33fd0a 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -186,6 +186,7 @@ public class StagingManager { private void preRebootVerification(@NonNull PackageInstallerSession session) { boolean success = true; + // STOPSHIP: TODO(b/123753157): Verify APKs through Package Verifier. if (!sessionContainsApex(session)) { // TODO: Decide whether we want to fail fast by detecting signature mismatches for APKs, // right away. @@ -336,6 +337,7 @@ public class StagingManager { PackageInstaller.SessionParams params = originalSession.params.copy(); params.isStaged = false; + params.installFlags |= PackageManager.INSTALL_DISABLE_VERIFICATION; int apkSessionId = mPi.createSession( params, originalSession.getInstallerPackageName(), originalSession.userId); PackageInstallerSession apkSession = mPi.getSession(apkSessionId);