From 4e5753f5f6c5e0c7f53722e2bfa451ac7f0b27db Mon Sep 17 00:00:00 2001 From: rich cannings Date: Wed, 19 Sep 2012 16:03:56 -0700 Subject: [PATCH] Add setting to skip verifying ADB installs Create a setting "verifier_verify_adb_installs" to allow developers to control package verification on ADB installs only. If package verification is enabled, the setting will: 0, Do not perform package verification on apps installed through ADB/ADT/USB and perform package verification on all other installs. 1, Use package verification on all installs. (Default) Bug: 7183252 Change-Id: I9d3eb8abb5ba5e93f8634d3135794e92ff6273b6 --- core/java/android/provider/Settings.java | 19 ++++++++++++++----- .../server/pm/PackageManagerService.java | 13 +++++++++++-- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 66738a1f99401..7864302ec3f6d 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -5334,25 +5334,34 @@ public final class Settings { * review apps prior to installation. * 1 = request apps to be verified prior to installation, if a verifier exists. * 0 = do not verify apps before installation - * {@hide} + * @hide */ public static final String PACKAGE_VERIFIER_ENABLE = "package_verifier_enable"; /** Timeout for package verification. - * {@hide} */ + * @hide */ public static final String PACKAGE_VERIFIER_TIMEOUT = "verifier_timeout"; /** Default response code for package verification. - * {@hide} */ + * @hide */ public static final String PACKAGE_VERIFIER_DEFAULT_RESPONSE = "verifier_default_response"; - /** Show package verification setting in the Settings app. + /** + * Show package verification setting in the Settings app. * 1 = show (default) * 0 = hide - * {@hide} + * @hide */ public static final String PACKAGE_VERIFIER_SETTING_VISIBLE = "verifier_setting_visible"; + /** + * Run package verificaiton on apps installed through ADB/ADT/USB + * 1 = perform package verification on ADB installs (default) + * 0 = bypass package verification on ADB installs + * @hide + */ + public static final String PACKAGE_VERIFIER_INCLUDE_ADB = "verifier_verify_adb_installs"; + /** * The interval in milliseconds at which to check packet counts on the * mobile data interface when screen is on, to detect possible data diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 739caa0021882..3f2387b6bca5a 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -5904,11 +5904,20 @@ public class PackageManagerService extends IPackageManager.Stub { * * @return true if verification should be performed */ - private boolean isVerificationEnabled() { + private boolean isVerificationEnabled(int flags) { if (!DEFAULT_VERIFY_ENABLE) { return false; } + // Check if installing from ADB + if ((flags & PackageManager.INSTALL_FROM_ADB) != 0) { + // Check if the developer does not want package verification for ADB installs + if (android.provider.Settings.Global.getInt(mContext.getContentResolver(), + android.provider.Settings.Global.PACKAGE_VERIFIER_INCLUDE_ADB, 1) == 0) { + return false; + } + } + return android.provider.Settings.Global.getInt(mContext.getContentResolver(), android.provider.Settings.Global.PACKAGE_VERIFIER_ENABLE, 1) == 1; } @@ -6406,7 +6415,7 @@ public class PackageManagerService extends IPackageManager.Stub { */ final int requiredUid = mRequiredVerifierPackage == null ? -1 : getPackageUid(mRequiredVerifierPackage, 0); - if (requiredUid != -1 && isVerificationEnabled()) { + if (requiredUid != -1 && isVerificationEnabled(flags)) { final Intent verification = new Intent( Intent.ACTION_PACKAGE_NEEDS_VERIFICATION); verification.setDataAndType(getPackageUri(), PACKAGE_MIME_TYPE);