android dexclassloader获取所有类的列表
我在android应用程序中使用来自资产或SD卡的外部jar。为此,我使用DexClassLoaderandroid dexclassloader获取所有类的列表,android,classloader,Android,Classloader,我在android应用程序中使用来自资产或SD卡的外部jar。为此,我使用DexClassLoader DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(), optimizedDexOutputPath.getAbsolutePath(), null,
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开始就不推荐使用,并计划实际删除