Loading core/java/android/app/ActivityThread.java +5 −5 Original line number Diff line number Diff line Loading @@ -3587,7 +3587,7 @@ public final class ActivityThread extends ClientTransactionHandler } try { Application app = r.packageInfo.makeApplication(false, mInstrumentation); Application app = r.packageInfo.makeApplicationInner(false, mInstrumentation); if (localLOGV) Slog.v(TAG, "Performing launch of " + r); if (localLOGV) Slog.v( Loading Loading @@ -4286,7 +4286,7 @@ public final class ActivityThread extends ClientTransactionHandler BroadcastReceiver receiver; ContextImpl context; try { app = packageInfo.makeApplication(false, mInstrumentation); app = packageInfo.makeApplicationInner(false, mInstrumentation); context = (ContextImpl) app.getBaseContext(); if (data.info.splitName != null) { context = (ContextImpl) context.createContextForSplit(data.info.splitName); Loading Loading @@ -4475,7 +4475,7 @@ public final class ActivityThread extends ClientTransactionHandler try { if (localLOGV) Slog.v(TAG, "Creating service " + data.info.name); Application app = packageInfo.makeApplication(false, mInstrumentation); Application app = packageInfo.makeApplicationInner(false, mInstrumentation); final java.lang.ClassLoader cl; if (data.info.splitName != null) { Loading Loading @@ -6695,7 +6695,7 @@ public final class ActivityThread extends ClientTransactionHandler try { // If the app is being launched for full backup or restore, bring it up in // a restricted environment with the base application class. app = data.info.makeApplication(data.restrictedBackupMode, null); app = data.info.makeApplicationInner(data.restrictedBackupMode, null); // Propagate autofill compat state app.setAutofillOptions(data.autofillOptions); Loading Loading @@ -7565,7 +7565,7 @@ public final class ActivityThread extends ClientTransactionHandler mInstrumentation.basicInit(this); ContextImpl context = ContextImpl.createAppContext( this, getSystemContext().mPackageInfo); mInitialApplication = context.mPackageInfo.makeApplication(true, null); mInitialApplication = context.mPackageInfo.makeApplicationInner(true, null); mInitialApplication.onCreate(); } catch (Exception e) { throw new RuntimeException( Loading core/java/android/app/LoadedApk.java +30 −5 Original line number Diff line number Diff line Loading @@ -1352,9 +1352,28 @@ public final class LoadedApk { return mResources; } /** * This is for 3p apps accessing this hidden API directly... in which case, we don't return * the cached Application instance. */ @UnsupportedAppUsage public Application makeApplication(boolean forceDefaultAppClass, Instrumentation instrumentation) { return makeApplicationInner(forceDefaultAppClass, instrumentation, /* allowDuplicateInstances= */ true); } /** * This is for all the (internal) callers, for which we do return the cached instance. */ public Application makeApplicationInner(boolean forceDefaultAppClass, Instrumentation instrumentation) { return makeApplicationInner(forceDefaultAppClass, instrumentation, /* allowDuplicateInstances= */ false); } private Application makeApplicationInner(boolean forceDefaultAppClass, Instrumentation instrumentation, boolean allowDuplicateInstances) { if (mApplication != null) { return mApplication; } Loading @@ -1366,12 +1385,16 @@ public final class LoadedApk { // Looks like this is always happening for the system server, because // the LoadedApk created in systemMain() -> attach() isn't cached properly? if (!"android".equals(mPackageName)) { Slog.wtf(TAG, "App instance already created for package=" + mPackageName Slog.wtfStack(TAG, "App instance already created for package=" + mPackageName + " instance=" + cached); } if (!allowDuplicateInstances) { mApplication = cached; return cached; } // Some apps intentionally call makeApplication() to create a new Application // instance... Sigh... } } Application app = null; Loading Loading @@ -1421,9 +1444,11 @@ public final class LoadedApk { } mActivityThread.mAllApplications.add(app); mApplication = app; if (!allowDuplicateInstances) { synchronized (sApplications) { sApplications.put(mPackageName, app); } } if (instrumentation != null) { try { Loading Loading
core/java/android/app/ActivityThread.java +5 −5 Original line number Diff line number Diff line Loading @@ -3587,7 +3587,7 @@ public final class ActivityThread extends ClientTransactionHandler } try { Application app = r.packageInfo.makeApplication(false, mInstrumentation); Application app = r.packageInfo.makeApplicationInner(false, mInstrumentation); if (localLOGV) Slog.v(TAG, "Performing launch of " + r); if (localLOGV) Slog.v( Loading Loading @@ -4286,7 +4286,7 @@ public final class ActivityThread extends ClientTransactionHandler BroadcastReceiver receiver; ContextImpl context; try { app = packageInfo.makeApplication(false, mInstrumentation); app = packageInfo.makeApplicationInner(false, mInstrumentation); context = (ContextImpl) app.getBaseContext(); if (data.info.splitName != null) { context = (ContextImpl) context.createContextForSplit(data.info.splitName); Loading Loading @@ -4475,7 +4475,7 @@ public final class ActivityThread extends ClientTransactionHandler try { if (localLOGV) Slog.v(TAG, "Creating service " + data.info.name); Application app = packageInfo.makeApplication(false, mInstrumentation); Application app = packageInfo.makeApplicationInner(false, mInstrumentation); final java.lang.ClassLoader cl; if (data.info.splitName != null) { Loading Loading @@ -6695,7 +6695,7 @@ public final class ActivityThread extends ClientTransactionHandler try { // If the app is being launched for full backup or restore, bring it up in // a restricted environment with the base application class. app = data.info.makeApplication(data.restrictedBackupMode, null); app = data.info.makeApplicationInner(data.restrictedBackupMode, null); // Propagate autofill compat state app.setAutofillOptions(data.autofillOptions); Loading Loading @@ -7565,7 +7565,7 @@ public final class ActivityThread extends ClientTransactionHandler mInstrumentation.basicInit(this); ContextImpl context = ContextImpl.createAppContext( this, getSystemContext().mPackageInfo); mInitialApplication = context.mPackageInfo.makeApplication(true, null); mInitialApplication = context.mPackageInfo.makeApplicationInner(true, null); mInitialApplication.onCreate(); } catch (Exception e) { throw new RuntimeException( Loading
core/java/android/app/LoadedApk.java +30 −5 Original line number Diff line number Diff line Loading @@ -1352,9 +1352,28 @@ public final class LoadedApk { return mResources; } /** * This is for 3p apps accessing this hidden API directly... in which case, we don't return * the cached Application instance. */ @UnsupportedAppUsage public Application makeApplication(boolean forceDefaultAppClass, Instrumentation instrumentation) { return makeApplicationInner(forceDefaultAppClass, instrumentation, /* allowDuplicateInstances= */ true); } /** * This is for all the (internal) callers, for which we do return the cached instance. */ public Application makeApplicationInner(boolean forceDefaultAppClass, Instrumentation instrumentation) { return makeApplicationInner(forceDefaultAppClass, instrumentation, /* allowDuplicateInstances= */ false); } private Application makeApplicationInner(boolean forceDefaultAppClass, Instrumentation instrumentation, boolean allowDuplicateInstances) { if (mApplication != null) { return mApplication; } Loading @@ -1366,12 +1385,16 @@ public final class LoadedApk { // Looks like this is always happening for the system server, because // the LoadedApk created in systemMain() -> attach() isn't cached properly? if (!"android".equals(mPackageName)) { Slog.wtf(TAG, "App instance already created for package=" + mPackageName Slog.wtfStack(TAG, "App instance already created for package=" + mPackageName + " instance=" + cached); } if (!allowDuplicateInstances) { mApplication = cached; return cached; } // Some apps intentionally call makeApplication() to create a new Application // instance... Sigh... } } Application app = null; Loading Loading @@ -1421,9 +1444,11 @@ public final class LoadedApk { } mActivityThread.mAllApplications.add(app); mApplication = app; if (!allowDuplicateInstances) { synchronized (sApplications) { sApplications.put(mPackageName, app); } } if (instrumentation != null) { try { Loading