Fix crash with AppComponentFactory

Allow for a null classloader, but make sure we recrete if the
classloader changes later.

Test: Added CTS
Change-Id: Ibea54d7e03acd5201d81b2261bab0739020de12d
Fixes: 74089652
This commit is contained in:
Jason Monk
2018-03-02 11:20:31 -05:00
parent 3eef2efe40
commit 6ee51bb6d6

View File

@@ -219,7 +219,7 @@ public final class LoadedApk {
}
private AppComponentFactory createAppFactory(ApplicationInfo appInfo, ClassLoader cl) {
if (appInfo.appComponentFactory != null) {
if (appInfo.appComponentFactory != null && cl != null) {
try {
return (AppComponentFactory) cl.loadClass(appInfo.appComponentFactory)
.newInstance();
@@ -613,6 +613,7 @@ public final class LoadedApk {
} else {
mClassLoader = ClassLoader.getSystemClassLoader();
}
mAppComponentFactory = createAppFactory(mApplicationInfo, mClassLoader);
return;
}
@@ -687,6 +688,7 @@ public final class LoadedApk {
librarySearchPath, libraryPermittedPath, mBaseClassLoader,
null /* classLoaderName */);
StrictMode.setThreadPolicy(oldPolicy);
mAppComponentFactory = createAppFactory(mApplicationInfo, mClassLoader);
}
return;
@@ -714,6 +716,7 @@ public final class LoadedApk {
mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath,
libraryPermittedPath, mBaseClassLoader,
mApplicationInfo.classLoaderName);
mAppComponentFactory = createAppFactory(mApplicationInfo, mClassLoader);
StrictMode.setThreadPolicy(oldPolicy);
// Setup the class loader paths for profiling.