搜尋

首頁  >  問答  >  主體

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

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

迷茫迷茫2771 天前666

全部回覆(1)我來回復

  • 天蓬老师

    天蓬老师2017-04-18 09:18:33

    創建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);
    

    回覆
    0
  • 取消回覆