Loading core/java/android/app/LoadedApk.java +76 −78 Original line number Diff line number Diff line Loading @@ -281,7 +281,7 @@ public final class LoadedApk { addedPaths.addAll(newPaths); } synchronized (this) { mClassLoader = createOrUpdateClassLoaderLocked(addedPaths); createOrUpdateClassLoaderLocked(addedPaths); if (mResources != null) { mResources = mActivityThread.getTopLevelResources(mResDir, mSplitResDirs, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, Loading Loading @@ -402,13 +402,24 @@ public final class LoadedApk { } } } } private void createOrUpdateClassLoaderLocked(List<String> addedPaths) { if (mPackageName.equals("android")) { if (mClassLoader != null) { // nothing to update return; } if (mBaseClassLoader != null) { mClassLoader = mBaseClassLoader; } else { mClassLoader = ClassLoader.getSystemClassLoader(); } final String zip = TextUtils.join(File.pathSeparator, outZipPaths); return; } private ClassLoader createOrUpdateClassLoaderLocked(List<String> addedPaths) { final ClassLoader classLoader; if (mIncludeCode && !mPackageName.equals("android")) { // Avoid the binder call when the package is the current application package. // The activity manager will perform ensure that dexopt is performed before // spinning up the process. Loading @@ -433,7 +444,7 @@ public final class LoadedApk { } makePaths(mActivityThread, mApplicationInfo, zipPaths, libPaths); final String zip = TextUtils.join(File.pathSeparator, zipPaths); final String zip = mIncludeCode ? TextUtils.join(File.pathSeparator, zipPaths) : ""; final boolean isBundledApp = mApplicationInfo.isSystemApp() && !mApplicationInfo.isUpdatedSystemApp(); String libraryPermittedPath = mDataDir; Loading Loading @@ -467,36 +478,23 @@ public final class LoadedApk { // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); classLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); StrictMode.setThreadPolicy(oldPolicy); } else if (addedPaths != null && addedPaths.size() > 0) { } if (addedPaths != null && addedPaths.size() > 0) { final String add = TextUtils.join(File.pathSeparator, addedPaths); ApplicationLoaders.getDefault().addPath(mClassLoader, add); classLoader = mClassLoader; } else { classLoader = mClassLoader; } } else { if (mClassLoader == null) { if (mBaseClassLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } else { classLoader = mBaseClassLoader; } } else { classLoader = mClassLoader; } } return classLoader; } public ClassLoader getClassLoader() { synchronized (this) { if (mClassLoader == null) { mClassLoader = createOrUpdateClassLoaderLocked(null /*addedPaths*/); createOrUpdateClassLoaderLocked(null /*addedPaths*/); } return mClassLoader; } Loading Loading
core/java/android/app/LoadedApk.java +76 −78 Original line number Diff line number Diff line Loading @@ -281,7 +281,7 @@ public final class LoadedApk { addedPaths.addAll(newPaths); } synchronized (this) { mClassLoader = createOrUpdateClassLoaderLocked(addedPaths); createOrUpdateClassLoaderLocked(addedPaths); if (mResources != null) { mResources = mActivityThread.getTopLevelResources(mResDir, mSplitResDirs, mOverlayDirs, mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, Loading Loading @@ -402,13 +402,24 @@ public final class LoadedApk { } } } } private void createOrUpdateClassLoaderLocked(List<String> addedPaths) { if (mPackageName.equals("android")) { if (mClassLoader != null) { // nothing to update return; } if (mBaseClassLoader != null) { mClassLoader = mBaseClassLoader; } else { mClassLoader = ClassLoader.getSystemClassLoader(); } final String zip = TextUtils.join(File.pathSeparator, outZipPaths); return; } private ClassLoader createOrUpdateClassLoaderLocked(List<String> addedPaths) { final ClassLoader classLoader; if (mIncludeCode && !mPackageName.equals("android")) { // Avoid the binder call when the package is the current application package. // The activity manager will perform ensure that dexopt is performed before // spinning up the process. Loading @@ -433,7 +444,7 @@ public final class LoadedApk { } makePaths(mActivityThread, mApplicationInfo, zipPaths, libPaths); final String zip = TextUtils.join(File.pathSeparator, zipPaths); final String zip = mIncludeCode ? TextUtils.join(File.pathSeparator, zipPaths) : ""; final boolean isBundledApp = mApplicationInfo.isSystemApp() && !mApplicationInfo.isUpdatedSystemApp(); String libraryPermittedPath = mDataDir; Loading Loading @@ -467,36 +478,23 @@ public final class LoadedApk { // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); classLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); StrictMode.setThreadPolicy(oldPolicy); } else if (addedPaths != null && addedPaths.size() > 0) { } if (addedPaths != null && addedPaths.size() > 0) { final String add = TextUtils.join(File.pathSeparator, addedPaths); ApplicationLoaders.getDefault().addPath(mClassLoader, add); classLoader = mClassLoader; } else { classLoader = mClassLoader; } } else { if (mClassLoader == null) { if (mBaseClassLoader == null) { classLoader = ClassLoader.getSystemClassLoader(); } else { classLoader = mBaseClassLoader; } } else { classLoader = mClassLoader; } } return classLoader; } public ClassLoader getClassLoader() { synchronized (this) { if (mClassLoader == null) { mClassLoader = createOrUpdateClassLoaderLocked(null /*addedPaths*/); createOrUpdateClassLoaderLocked(null /*addedPaths*/); } return mClassLoader; } Loading