Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c6b66d3f authored by Dimitry Ivanov's avatar Dimitry Ivanov Committed by Gerrit Code Review
Browse files

Merge "Create linker-namespace for the classloader"

parents a1fd1432 ea902810
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -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
@@ -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;
            }
@@ -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
+3 −2
Original line number Diff line number Diff line
@@ -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;
+2 −4
Original line number Diff line number Diff line
@@ -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);
@@ -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(
+1 −0
Original line number Diff line number Diff line
@@ -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 \
+2 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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