From 944e6965f73065bc40d38dc4b6309f6d5b10e33b Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Fri, 2 Jun 2017 12:49:34 -0700 Subject: [PATCH] Don't verify instant apps Change-Id: I07bc45bc82d1cbd2012c4605d5ca19f2ef36d615 Fixes: 62202471 Test: Manual; install instant app, see verification is disabled Test: Manual; install full app, see verification is enabled --- .../server/pm/PackageManagerService.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 47431d45c9637..aad7df3af71fc 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -14890,7 +14890,7 @@ public class PackageManagerService extends IPackageManager.Stub * * @return true if verification should be performed */ - private boolean isVerificationEnabled(int userId, int installFlags) { + private boolean isVerificationEnabled(int userId, int installFlags, int installerUid) { if (!DEFAULT_VERIFY_ENABLE) { return false; } @@ -14911,6 +14911,23 @@ public class PackageManagerService extends IPackageManager.Stub android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) == 0) { return false; } + } else { + // only when not installed from ADB, skip verification for instant apps when + // the installer and verifier are the same. + if ((installFlags & PackageManager.INSTALL_INSTANT_APP) != 0) { + if (mInstantAppInstallerActivity != null + && mInstantAppInstallerActivity.packageName.equals( + mRequiredVerifierPackage)) { + try { + mContext.getSystemService(AppOpsManager.class) + .checkPackage(installerUid, mRequiredVerifierPackage); + if (DEBUG_VERIFY) { + Slog.i(TAG, "disable verification for instant app"); + } + return false; + } catch (SecurityException ignore) { } + } + } } if (ensureVerifyAppsEnabled) { @@ -15745,8 +15762,11 @@ public class PackageManagerService extends IPackageManager.Stub final int requiredUid = mRequiredVerifierPackage == null ? -1 : getPackageUid(mRequiredVerifierPackage, MATCH_DEBUG_TRIAGED_MISSING, verifierUser.getIdentifier()); + final int installerUid = + verificationInfo == null ? -1 : verificationInfo.installerUid; if (!origin.existing && requiredUid != -1 - && isVerificationEnabled(verifierUser.getIdentifier(), installFlags)) { + && isVerificationEnabled( + verifierUser.getIdentifier(), installFlags, installerUid)) { final Intent verification = new Intent( Intent.ACTION_PACKAGE_NEEDS_VERIFICATION); verification.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);