Loading core/java/android/app/LoadedApk.java +30 −10 Original line number Diff line number Diff line Loading @@ -696,6 +696,23 @@ public final class LoadedApk { return loaders; } private StrictMode.ThreadPolicy allowThreadDiskReads() { if (mActivityThread == null) { // When LoadedApk is used without an ActivityThread (usually in a // zygote context), don't call into StrictMode, as it initializes // the binder subsystem, which we don't want. return null; } return StrictMode.allowThreadDiskReads(); } private void setThreadPolicy(StrictMode.ThreadPolicy policy) { if (mActivityThread != null && policy != null) { StrictMode.setThreadPolicy(policy); } } private void createOrUpdateClassLoaderLocked(List<String> addedPaths) { if (mPackageName.equals("android")) { // Note: This branch is taken for system server and we don't need to setup Loading @@ -718,8 +735,11 @@ public final class LoadedApk { // 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. if (!Objects.equals(mPackageName, ActivityThread.currentPackageName()) && mIncludeCode) { // spinning up the process. Similarly, don't call into binder when we don't // have an ActivityThread object. if (mActivityThread != null && !Objects.equals(mPackageName, ActivityThread.currentPackageName()) && mIncludeCode) { try { ActivityThread.getPackageManager().notifyPackageUse(mPackageName, PackageManager.NOTIFY_PACKAGE_USE_CROSS_PACKAGE); Loading Loading @@ -790,12 +810,12 @@ public final class LoadedApk { // mIncludeCode == false). if (!mIncludeCode) { if (mDefaultClassLoader == null) { StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); mDefaultClassLoader = ApplicationLoaders.getDefault().getClassLoader( "" /* codePath */, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader, null /* classLoaderName */); StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); mAppComponentFactory = AppComponentFactory.DEFAULT; } Loading @@ -822,7 +842,7 @@ public final class LoadedApk { if (mDefaultClassLoader == null) { // Temporarily disable logging of disk reads on the Looper thread // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); List<ClassLoader> sharedLibraries = createSharedLibrariesLoaders( mApplicationInfo.sharedLibraryInfos, isBundledApp, librarySearchPath, Loading @@ -834,18 +854,18 @@ public final class LoadedApk { mApplicationInfo.classLoaderName, sharedLibraries); mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader); StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); // Setup the class loader paths for profiling. needToSetupJitProfiles = true; } if (!libPaths.isEmpty() && SystemProperties.getBoolean(PROPERTY_NAME_APPEND_NATIVE, true)) { // Temporarily disable logging of disk reads on the Looper thread as this is necessary StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); try { ApplicationLoaders.getDefault().addNative(mDefaultClassLoader, libPaths); } finally { StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); } } Loading Loading @@ -879,11 +899,11 @@ public final class LoadedApk { extraLibPaths.add("/product/lib" + abiSuffix); } if (!extraLibPaths.isEmpty()) { StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); try { ApplicationLoaders.getDefault().addNative(mDefaultClassLoader, extraLibPaths); } finally { StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); } } Loading Loading
core/java/android/app/LoadedApk.java +30 −10 Original line number Diff line number Diff line Loading @@ -696,6 +696,23 @@ public final class LoadedApk { return loaders; } private StrictMode.ThreadPolicy allowThreadDiskReads() { if (mActivityThread == null) { // When LoadedApk is used without an ActivityThread (usually in a // zygote context), don't call into StrictMode, as it initializes // the binder subsystem, which we don't want. return null; } return StrictMode.allowThreadDiskReads(); } private void setThreadPolicy(StrictMode.ThreadPolicy policy) { if (mActivityThread != null && policy != null) { StrictMode.setThreadPolicy(policy); } } private void createOrUpdateClassLoaderLocked(List<String> addedPaths) { if (mPackageName.equals("android")) { // Note: This branch is taken for system server and we don't need to setup Loading @@ -718,8 +735,11 @@ public final class LoadedApk { // 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. if (!Objects.equals(mPackageName, ActivityThread.currentPackageName()) && mIncludeCode) { // spinning up the process. Similarly, don't call into binder when we don't // have an ActivityThread object. if (mActivityThread != null && !Objects.equals(mPackageName, ActivityThread.currentPackageName()) && mIncludeCode) { try { ActivityThread.getPackageManager().notifyPackageUse(mPackageName, PackageManager.NOTIFY_PACKAGE_USE_CROSS_PACKAGE); Loading Loading @@ -790,12 +810,12 @@ public final class LoadedApk { // mIncludeCode == false). if (!mIncludeCode) { if (mDefaultClassLoader == null) { StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); mDefaultClassLoader = ApplicationLoaders.getDefault().getClassLoader( "" /* codePath */, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader, null /* classLoaderName */); StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); mAppComponentFactory = AppComponentFactory.DEFAULT; } Loading @@ -822,7 +842,7 @@ public final class LoadedApk { if (mDefaultClassLoader == null) { // Temporarily disable logging of disk reads on the Looper thread // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); List<ClassLoader> sharedLibraries = createSharedLibrariesLoaders( mApplicationInfo.sharedLibraryInfos, isBundledApp, librarySearchPath, Loading @@ -834,18 +854,18 @@ public final class LoadedApk { mApplicationInfo.classLoaderName, sharedLibraries); mAppComponentFactory = createAppFactory(mApplicationInfo, mDefaultClassLoader); StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); // Setup the class loader paths for profiling. needToSetupJitProfiles = true; } if (!libPaths.isEmpty() && SystemProperties.getBoolean(PROPERTY_NAME_APPEND_NATIVE, true)) { // Temporarily disable logging of disk reads on the Looper thread as this is necessary StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); try { ApplicationLoaders.getDefault().addNative(mDefaultClassLoader, libPaths); } finally { StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); } } Loading Loading @@ -879,11 +899,11 @@ public final class LoadedApk { extraLibPaths.add("/product/lib" + abiSuffix); } if (!extraLibPaths.isEmpty()) { StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); StrictMode.ThreadPolicy oldPolicy = allowThreadDiskReads(); try { ApplicationLoaders.getDefault().addNative(mDefaultClassLoader, extraLibPaths); } finally { StrictMode.setThreadPolicy(oldPolicy); setThreadPolicy(oldPolicy); } } Loading