Loading core/java/android/app/ApplicationLoaders.java +24 −9 Original line number Diff line number Diff line Loading @@ -20,16 +20,14 @@ import android.os.Trace; import android.util.ArrayMap; import dalvik.system.PathClassLoader; class ApplicationLoaders { public static ApplicationLoaders getDefault() { class ApplicationLoaders { public static ApplicationLoaders getDefault() { return gApplicationLoaders; } public ClassLoader getClassLoader(String zip, boolean isBundled, String librarySearchPath, String libraryPermittedPath, ClassLoader parent) { public ClassLoader getClassLoader(String zip, int targetSdkVersion, boolean isBundled, String librarySearchPath, String libraryPermittedPath, ClassLoader parent) { /* * This is the parent we use if they pass "null" in. In theory * this should be the "system" class loader; in practice we Loading @@ -55,11 +53,22 @@ class ApplicationLoaders } Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, zip); PathClassLoader pathClassloader = new PathClassLoader(zip, isBundled, librarySearchPath, libraryPermittedPath, parent); new PathClassLoader(zip, librarySearchPath, parent); String errorMessage = createClassloaderNamespace(pathClassloader, targetSdkVersion, librarySearchPath, libraryPermittedPath, isBundled); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); if (errorMessage != null) { throw new UnsatisfiedLinkError("Unable to create namespace for the classloader " + pathClassloader + ": " + errorMessage); } mLoaders.put(zip, pathClassloader); return pathClassloader; } Loading @@ -71,6 +80,12 @@ class ApplicationLoaders } } private static native String createClassloaderNamespace(ClassLoader classLoader, int targetSdkVersion, String librarySearchPath, String libraryPermittedPath, boolean isShared); private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<String, ClassLoader>(); private static final ApplicationLoaders gApplicationLoaders Loading core/java/android/app/LoadedApk.java +3 −2 Original line number Diff line number Diff line Loading @@ -399,8 +399,9 @@ public final class LoadedApk { // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); StrictMode.setThreadPolicy(oldPolicy); return mClassLoader; Loading core/java/android/app/NativeActivity.java +2 −4 Original line number Diff line number Diff line Loading @@ -87,8 +87,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, private native long loadNativeCode(String path, String funcname, MessageQueue queue, String internalDataPath, String obbPath, String externalDataPath, int sdkVersion, AssetManager assetMgr, byte[] savedState, ClassLoader classLoader, String libraryPath, String isolationPath); AssetManager assetMgr, byte[] savedState, ClassLoader classLoader, String libraryPath); private native String getDlError(); private native void unloadNativeCode(long handle); private native void onStartNative(long handle); Loading Loading @@ -169,8 +168,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, getAbsolutePath(getFilesDir()), getAbsolutePath(getObbDir()), getAbsolutePath(getExternalFilesDir(null)), Build.VERSION.SDK_INT, getAssets(), nativeSavedState, classLoader, classLoader.getLdLibraryPath(), classLoader.getLibraryPermittedPath()); classLoader, classLoader.getLdLibraryPath()); if (mNativeHandle == 0) { throw new UnsatisfiedLinkError( Loading core/jni/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ LOCAL_SRC_FILES:= \ com_android_internal_content_NativeLibraryHelper.cpp \ com_google_android_gles_jni_EGLImpl.cpp \ com_google_android_gles_jni_GLImpl.cpp.arm \ android_app_ApplicationLoaders.cpp \ android_app_NativeActivity.cpp \ android_opengl_EGL14.cpp \ android_opengl_EGLExt.cpp \ Loading core/jni/AndroidRuntime.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,7 @@ extern int register_android_backup_BackupDataOutput(JNIEnv *env); extern int register_android_backup_FileBackupHelperBase(JNIEnv *env); extern int register_android_backup_BackupHelperDispatcher(JNIEnv *env); extern int register_android_app_backup_FullBackup(JNIEnv *env); extern int register_android_app_ApplicationLoaders(JNIEnv* env); extern int register_android_app_ActivityThread(JNIEnv *env); extern int register_android_app_NativeActivity(JNIEnv *env); extern int register_android_media_RemoteDisplay(JNIEnv *env); Loading Loading @@ -1358,6 +1359,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_backup_FileBackupHelperBase), REG_JNI(register_android_backup_BackupHelperDispatcher), REG_JNI(register_android_app_backup_FullBackup), REG_JNI(register_android_app_ApplicationLoaders), REG_JNI(register_android_app_ActivityThread), REG_JNI(register_android_app_NativeActivity), REG_JNI(register_android_util_jar_StrictJarFile), Loading Loading
core/java/android/app/ApplicationLoaders.java +24 −9 Original line number Diff line number Diff line Loading @@ -20,16 +20,14 @@ import android.os.Trace; import android.util.ArrayMap; import dalvik.system.PathClassLoader; class ApplicationLoaders { public static ApplicationLoaders getDefault() { class ApplicationLoaders { public static ApplicationLoaders getDefault() { return gApplicationLoaders; } public ClassLoader getClassLoader(String zip, boolean isBundled, String librarySearchPath, String libraryPermittedPath, ClassLoader parent) { public ClassLoader getClassLoader(String zip, int targetSdkVersion, boolean isBundled, String librarySearchPath, String libraryPermittedPath, ClassLoader parent) { /* * This is the parent we use if they pass "null" in. In theory * this should be the "system" class loader; in practice we Loading @@ -55,11 +53,22 @@ class ApplicationLoaders } Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, zip); PathClassLoader pathClassloader = new PathClassLoader(zip, isBundled, librarySearchPath, libraryPermittedPath, parent); new PathClassLoader(zip, librarySearchPath, parent); String errorMessage = createClassloaderNamespace(pathClassloader, targetSdkVersion, librarySearchPath, libraryPermittedPath, isBundled); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER); if (errorMessage != null) { throw new UnsatisfiedLinkError("Unable to create namespace for the classloader " + pathClassloader + ": " + errorMessage); } mLoaders.put(zip, pathClassloader); return pathClassloader; } Loading @@ -71,6 +80,12 @@ class ApplicationLoaders } } private static native String createClassloaderNamespace(ClassLoader classLoader, int targetSdkVersion, String librarySearchPath, String libraryPermittedPath, boolean isShared); private final ArrayMap<String, ClassLoader> mLoaders = new ArrayMap<String, ClassLoader>(); private static final ApplicationLoaders gApplicationLoaders Loading
core/java/android/app/LoadedApk.java +3 −2 Original line number Diff line number Diff line Loading @@ -399,8 +399,9 @@ public final class LoadedApk { // as this is early and necessary. StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, mApplicationInfo.targetSdkVersion, isBundledApp, librarySearchPath, libraryPermittedPath, mBaseClassLoader); StrictMode.setThreadPolicy(oldPolicy); return mClassLoader; Loading
core/java/android/app/NativeActivity.java +2 −4 Original line number Diff line number Diff line Loading @@ -87,8 +87,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, private native long loadNativeCode(String path, String funcname, MessageQueue queue, String internalDataPath, String obbPath, String externalDataPath, int sdkVersion, AssetManager assetMgr, byte[] savedState, ClassLoader classLoader, String libraryPath, String isolationPath); AssetManager assetMgr, byte[] savedState, ClassLoader classLoader, String libraryPath); private native String getDlError(); private native void unloadNativeCode(long handle); private native void onStartNative(long handle); Loading Loading @@ -169,8 +168,7 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, getAbsolutePath(getFilesDir()), getAbsolutePath(getObbDir()), getAbsolutePath(getExternalFilesDir(null)), Build.VERSION.SDK_INT, getAssets(), nativeSavedState, classLoader, classLoader.getLdLibraryPath(), classLoader.getLibraryPermittedPath()); classLoader, classLoader.getLdLibraryPath()); if (mNativeHandle == 0) { throw new UnsatisfiedLinkError( Loading
core/jni/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ LOCAL_SRC_FILES:= \ com_android_internal_content_NativeLibraryHelper.cpp \ com_google_android_gles_jni_EGLImpl.cpp \ com_google_android_gles_jni_GLImpl.cpp.arm \ android_app_ApplicationLoaders.cpp \ android_app_NativeActivity.cpp \ android_opengl_EGL14.cpp \ android_opengl_EGLExt.cpp \ Loading
core/jni/AndroidRuntime.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -173,6 +173,7 @@ extern int register_android_backup_BackupDataOutput(JNIEnv *env); extern int register_android_backup_FileBackupHelperBase(JNIEnv *env); extern int register_android_backup_BackupHelperDispatcher(JNIEnv *env); extern int register_android_app_backup_FullBackup(JNIEnv *env); extern int register_android_app_ApplicationLoaders(JNIEnv* env); extern int register_android_app_ActivityThread(JNIEnv *env); extern int register_android_app_NativeActivity(JNIEnv *env); extern int register_android_media_RemoteDisplay(JNIEnv *env); Loading Loading @@ -1358,6 +1359,7 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_backup_FileBackupHelperBase), REG_JNI(register_android_backup_BackupHelperDispatcher), REG_JNI(register_android_app_backup_FullBackup), REG_JNI(register_android_app_ApplicationLoaders), REG_JNI(register_android_app_ActivityThread), REG_JNI(register_android_app_NativeActivity), REG_JNI(register_android_util_jar_StrictJarFile), Loading