From af41485757c5da4bff8dafdc2f77d1d9a1ae446d Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Thu, 2 Jun 2016 07:32:17 -0700 Subject: [PATCH] Ephemeral changes for debug builds The installer/resolver must typically be specified in a baked in XML file. But, to aid development, allow the installer/resolver to be added dynamically on debug builds. Change-Id: I8617bb2a33a51fc596579bdaadb27a11c3740c14 --- .../server/pm/PackageManagerService.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 87141b4cfced0..bd6ddcb3409f4 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -362,13 +362,13 @@ public class PackageManagerService extends IPackageManager.Stub { static final boolean DEBUG_DEXOPT = false; private static final boolean DEBUG_ABI_SELECTION = false; - private static final boolean DEBUG_EPHEMERAL = false; + private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; private static final boolean DEBUG_TRIAGED_MISSING = false; private static final boolean DEBUG_APP_DATA = false; static final boolean CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE = false; - private static final boolean DISABLE_EPHEMERAL_APPS = true; + private static final boolean DISABLE_EPHEMERAL_APPS = !Build.IS_DEBUGGABLE; private static final int RADIO_UID = Process.PHONE_UID; private static final int LOG_UID = Process.LOG_UID; @@ -2936,17 +2936,20 @@ public class PackageManagerService extends IPackageManager.Stub { private @Nullable ComponentName getEphemeralResolverLPr() { final String[] packageArray = mContext.getResources().getStringArray(R.array.config_ephemeralResolverPackage); - if (packageArray.length == 0) { + if (packageArray.length == 0 && !Build.IS_DEBUGGABLE) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Ephemeral resolver NOT found; empty package list"); } return null; } + final int resolveFlags = + MATCH_DIRECT_BOOT_AWARE + | MATCH_DIRECT_BOOT_UNAWARE + | (!Build.IS_DEBUGGABLE ? MATCH_SYSTEM_ONLY : 0); final Intent resolverIntent = new Intent(Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE); final List resolvers = queryIntentServicesInternal(resolverIntent, null, - MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, - UserHandle.USER_SYSTEM); + resolveFlags, UserHandle.USER_SYSTEM); final int N = resolvers.size(); if (N == 0) { @@ -2965,7 +2968,7 @@ public class PackageManagerService extends IPackageManager.Stub { } final String packageName = info.serviceInfo.packageName; - if (!possiblePackages.contains(packageName)) { + if (!possiblePackages.contains(packageName) && !Build.IS_DEBUGGABLE) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Ephemeral resolver not in allowed package list;" + " pkg: " + packageName + ", info:" + info); @@ -2990,9 +2993,12 @@ public class PackageManagerService extends IPackageManager.Stub { intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setDataAndType(Uri.fromFile(new File("foo.apk")), PACKAGE_MIME_TYPE); + final int resolveFlags = + MATCH_DIRECT_BOOT_AWARE + | MATCH_DIRECT_BOOT_UNAWARE + | (!Build.IS_DEBUGGABLE ? MATCH_SYSTEM_ONLY : 0); final List matches = queryIntentActivitiesInternal(intent, PACKAGE_MIME_TYPE, - MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE, - UserHandle.USER_SYSTEM); + resolveFlags, UserHandle.USER_SYSTEM); if (matches.size() == 0) { return null; } else if (matches.size() == 1) {