Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android dexclassloader获取所有类的列表_Android_Classloader - Fatal编程技术网

android dexclassloader获取所有类的列表

android dexclassloader获取所有类的列表,android,classloader,Android,Classloader,我在android应用程序中使用来自资产或SD卡的外部jar。为此,我使用DexClassLoader DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null,

我在android应用程序中使用来自资产或SD卡的外部jar。为此,我使用DexClassLoader

DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
                        optimizedDexOutputPath.getAbsolutePath(),
                        null,
                        getClassLoader());
要加载类,请执行以下操作:

Class myNewClass = cl.loadClass("com.example.dex.lib.LibraryProvider");
它工作得非常好,但现在我想在我的DexClassLoader中得到所有类名的列表 我发现它可以在java中工作,但在android中没有这样的东西


问题是如何从DexClassLoader获取所有类名称的列表,以列出.jar文件中的所有类,该文件包含您使用的
DexFile
,而不是
DexClassLoader
,例如:

String path = "/path/to/your/library.jar"
try {
    DexFile dx = DexFile.loadDex(path, File.createTempFile("opt", "dex",
            getCacheDir()).getPath(), 0);
    // Print all classes in the DexFile
    for(Enumeration<String> classNames = dx.entries(); classNames.hasMoreElements();) {
        String className = classNames.nextElement();
        System.out.println("class: " + className);
    }
} catch (IOException e) {
    Log.w(TAG, "Error opening " + path, e);
}
String path=“/path/to/your/library.jar”
试一试{
DexFile dx=DexFile.loadDex(路径,File.createTempFile(“opt”,“dex”,
getCacheDir()).getPath(),0);
//打印文件中的所有类
对于(枚举classNames=dx.entries();classNames.hasMoreElements();){
字符串className=classNames.nextElement();
System.out.println(“类:“+className”);
}
}捕获(IOE异常){
Log.w(标记“错误打开”+路径e);
}

尽管在java.lang.String,int)中有评论说“此函数不应由应用程序直接调用”
DexFile.loadDex()
似乎是检查dex文件的唯一方法-一个简单的
new DexFile(file)
抛出一个
IoException
,我只从当前运行的应用程序中获取所有类,而不是从jar文件中获取类。我不明白一旦你得到了实际的类会发生什么?尽管条目中清楚地包括我的类路径、带我的类路径的loadClass()和类加载器。getSystemClassLoader()返回null,我能做些什么来修复它,也就是加载我要找的类?DexFile从API26开始就不推荐使用,并计划实际删除