PathClassLoader在app中的实例是在哪里创建的?

有一个三个参数的构造器始终没找到在哪里调用的?求教大神?

阅读 3.8k
1 个回答

创建PathClassLoader的是用的工厂:

/**
 * Creates path class loaders.
 *
 * @hide
 */
public class PathClassLoaderFactory {
    // Unconstructable
    private PathClassLoaderFactory() {}

    /**
     * Create a PathClassLoader and initialize a linker-namespace for it.
     *
     * @hide
     */
    public static PathClassLoader createClassLoader(String dexPath,
                                                    String librarySearchPath,
                                                    String libraryPermittedPath,
                                                    ClassLoader parent,
                                                    int targetSdkVersion,
                                                    boolean isNamespaceShared) {
        // 这里被调用的
        PathClassLoader pathClassloader = new PathClassLoader(dexPath, librarySearchPath, parent);

        Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "createClassloaderNamespace");
        String errorMessage = createClassloaderNamespace(pathClassloader,
                                                         targetSdkVersion,
                                                         librarySearchPath,
                                                         libraryPermittedPath,
                                                         isNamespaceShared);
        Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);

        if (errorMessage != null) {
            throw new UnsatisfiedLinkError("Unable to create namespace for the classloader " +
                                           pathClassloader + ": " + errorMessage);
        }

        return pathClassloader;
    }

    private static native String createClassloaderNamespace(ClassLoader classLoader,
                                                            int targetSdkVersion,
                                                            String librarySearchPath,
                                                            String libraryPermittedPath,
                                                            boolean isNamespaceShared);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题