diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index d21252ba4ce7d..e2f0ce4f47139 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -171,6 +171,14 @@ public abstract class PackageManager { */ public static final int GET_SUPPORTS_DENSITIES = 0x00008000; + /** + * Resolution and querying flag: if set, only filters that support the + * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for + * matching. This is a synonym for including the CATEGORY_DEFAULT in your + * supplied Intent. + */ + public static final int MATCH_DEFAULT_ONLY = 0x00010000; + /** * Permission check result: this is returned by {@link #checkPermission} * if the permission has been granted to the given package. @@ -219,14 +227,6 @@ public abstract class PackageManager { */ public static final int SIGNATURE_UNKNOWN_PACKAGE = -4; - /** - * Resolution and querying flag: if set, only filters that support the - * {@link android.content.Intent#CATEGORY_DEFAULT} will be considered for - * matching. This is a synonym for including the CATEGORY_DEFAULT in your - * supplied Intent. - */ - public static final int MATCH_DEFAULT_ONLY = 0x00010000; - public static final int COMPONENT_ENABLED_STATE_DEFAULT = 0; public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; public static final int COMPONENT_ENABLED_STATE_DISABLED = 2; diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index 2be497528ed9c..9471eff95f3f5 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -169,6 +169,10 @@ public final class ActivityManagerService extends ActivityManagerNative implemen static final int LOG_BOOT_PROGRESS_AMS_READY = 3040; static final int LOG_BOOT_PROGRESS_ENABLE_SCREEN = 3050; + // The flags that are set for all calls we make to the package manager. + static final int STOCK_PM_FLAGS = PackageManager.GET_SHARED_LIBRARY_FILES + | PackageManager.GET_SUPPORTS_DENSITIES; + private static final String SYSTEM_SECURE = "ro.secure"; // This is the maximum number of application processes we would like @@ -1058,7 +1062,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen ApplicationInfo info = mSelf.mContext.getPackageManager().getApplicationInfo( - "android", PackageManager.GET_SHARED_LIBRARY_FILES); + "android", STOCK_PM_FLAGS); synchronized (mSelf) { ProcessRecord app = mSelf.newProcessRecordLocked( mSystemThread.getApplicationThread(), info, @@ -2224,7 +2228,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } ActivityInfo aInfo = intent.resolveActivityInfo(mContext.getPackageManager(), - PackageManager.GET_SHARED_LIBRARY_FILES); + STOCK_PM_FLAGS); if (aInfo != null) { intent.setComponent(new ComponentName( aInfo.applicationInfo.packageName, aInfo.name)); @@ -3181,7 +3185,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen ActivityThread.getPackageManager().resolveIntent( intent, resolvedType, PackageManager.MATCH_DEFAULT_ONLY - | PackageManager.GET_SHARED_LIBRARY_FILES); + | STOCK_PM_FLAGS); aInfo = rInfo != null ? rInfo.activityInfo : null; } catch (RemoteException e) { aInfo = null; @@ -3242,8 +3246,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen List resolves = ActivityThread.getPackageManager().queryIntentActivities( intent, r.resolvedType, - PackageManager.MATCH_DEFAULT_ONLY - | PackageManager.GET_SHARED_LIBRARY_FILES); + PackageManager.MATCH_DEFAULT_ONLY | STOCK_PM_FLAGS); // Look for the original activity in the list... final int N = resolves != null ? resolves.size() : 0; @@ -3325,8 +3328,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen ResolveInfo rInfo = ActivityThread.getPackageManager().resolveIntent( intent, resolvedType, - PackageManager.MATCH_DEFAULT_ONLY - | PackageManager.GET_SHARED_LIBRARY_FILES); + PackageManager.MATCH_DEFAULT_ONLY | STOCK_PM_FLAGS); aInfo = rInfo != null ? rInfo.activityInfo : null; } catch (RemoteException e) { aInfo = null; @@ -4608,7 +4610,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen mWaitForDebugger = mOrigWaitForDebugger; } } - thread.bindApplication(processName, app.info, providers, + thread.bindApplication(processName, app.instrumentationInfo != null + ? app.instrumentationInfo : app.info, providers, app.instrumentationClass, app.instrumentationProfileFile, app.instrumentationArguments, app.instrumentationWatcher, testMode, mConfiguration, getCommonServicesLocked()); @@ -6651,8 +6654,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen try { providers = ActivityThread.getPackageManager(). queryContentProviders(app.processName, app.info.uid, - PackageManager.GET_SHARED_LIBRARY_FILES - | PackageManager.GET_URI_PERMISSION_PATTERNS); + STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS); } catch (RemoteException ex) { } if (providers != null) { @@ -6756,7 +6758,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } else { try { cpi = ActivityThread.getPackageManager(). - resolveContentProvider(name, PackageManager.GET_URI_PERMISSION_PATTERNS); + resolveContentProvider(name, + STOCK_PM_FLAGS | PackageManager.GET_URI_PERMISSION_PATTERNS); } catch (RemoteException ex) { } if (cpi == null) { @@ -6777,7 +6780,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen ActivityThread.getPackageManager(). getApplicationInfo( cpi.applicationInfo.packageName, - PackageManager.GET_SHARED_LIBRARY_FILES); + STOCK_PM_FLAGS); if (ai == null) { Log.w(TAG, "No package info for content provider " + cpi.name); @@ -7513,7 +7516,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (mFactoryTest == SystemServer.FACTORY_TEST_LOW_LEVEL) { ResolveInfo ri = mContext.getPackageManager() .resolveActivity(new Intent(Intent.ACTION_FACTORY_TEST), - 0); + STOCK_PM_FLAGS); CharSequence errorMsg = null; if (ri != null) { ActivityInfo ai = ri.activityInfo; @@ -7549,7 +7552,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL) { try { List apps = ActivityThread.getPackageManager(). - getPersistentApplications(PackageManager.GET_SHARED_LIBRARY_FILES); + getPersistentApplications(STOCK_PM_FLAGS); if (apps != null) { int N = apps.size(); int i; @@ -8964,7 +8967,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen try { ResolveInfo rInfo = ActivityThread.getPackageManager().resolveService( - service, resolvedType, PackageManager.GET_SHARED_LIBRARY_FILES); + service, resolvedType, STOCK_PM_FLAGS); ServiceInfo sInfo = rInfo != null ? rInfo.serviceInfo : null; if (sInfo == null) { @@ -10182,7 +10185,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen if (intent.getComponent() != null) { // Broadcast is going to one specific receiver class... ActivityInfo ai = ActivityThread.getPackageManager(). - getReceiverInfo(intent.getComponent(), 0); + getReceiverInfo(intent.getComponent(), STOCK_PM_FLAGS); if (ai != null) { receivers = new ArrayList(); ResolveInfo ri = new ResolveInfo(); @@ -10195,7 +10198,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen == 0) { receivers = ActivityThread.getPackageManager().queryIntentReceivers( - intent, resolvedType, PackageManager.GET_SHARED_LIBRARY_FILES); + intent, resolvedType, STOCK_PM_FLAGS); } registeredReceivers = mReceiverResolver.queryIntent(resolver, intent, resolvedType, false); @@ -10932,9 +10935,9 @@ public final class ActivityManagerService extends ActivityManagerNative implemen ApplicationInfo ai = null; try { ii = mContext.getPackageManager().getInstrumentationInfo( - className, 0); + className, STOCK_PM_FLAGS); ai = mContext.getPackageManager().getApplicationInfo( - ii.targetPackage, PackageManager.GET_SHARED_LIBRARY_FILES); + ii.targetPackage, STOCK_PM_FLAGS); } catch (PackageManager.NameNotFoundException e) { } if (ii == null) { @@ -10966,6 +10969,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen uninstallPackageLocked(ii.targetPackage, -1, true); ProcessRecord app = addAppLocked(ai); app.instrumentationClass = className; + app.instrumentationInfo = ai; app.instrumentationProfileFile = profileFile; app.instrumentationArguments = arguments; app.instrumentationWatcher = watcher; @@ -11013,6 +11017,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen } app.instrumentationWatcher = null; app.instrumentationClass = null; + app.instrumentationInfo = null; app.instrumentationProfileFile = null; app.instrumentationArguments = null; diff --git a/services/java/com/android/server/am/ProcessRecord.java b/services/java/com/android/server/am/ProcessRecord.java index b76547a92cc56..68aebc3adc1a1 100644 --- a/services/java/com/android/server/am/ProcessRecord.java +++ b/services/java/com/android/server/am/ProcessRecord.java @@ -28,6 +28,7 @@ import android.content.pm.ApplicationInfo; import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; +import android.util.PrintWriterPrinter; import java.io.PrintWriter; import java.util.ArrayList; @@ -62,6 +63,7 @@ class ProcessRecord implements Watchdog.PssRequestor { IBinder forcingToForeground;// Token that is forcing this process to be foreground int adjSeq; // Sequence id for identifying repeated trav ComponentName instrumentationClass;// class installed to instrument app + ApplicationInfo instrumentationInfo; // the application being instrumented String instrumentationProfileFile; // where to save profiling IInstrumentationWatcher instrumentationWatcher; // who is waiting Bundle instrumentationArguments;// as given to us @@ -125,6 +127,11 @@ class ProcessRecord implements Watchdog.PssRequestor { pw.println(instrumentationProfileFile); pw.print(prefix); pw.print("instrumentationArguments="); pw.println(instrumentationArguments); + pw.print(prefix); pw.print("instrumentationInfo="); + pw.println(instrumentationInfo); + if (instrumentationInfo != null) { + instrumentationInfo.dump(new PrintWriterPrinter(pw), prefix + " "); + } } pw.print(prefix); pw.print("thread="); pw.print(thread); pw.print(" curReceiver="); pw.println(curReceiver);