我在Android应用程序中使用 Assets 或SD卡中的外部jar。为此,我正在使用DexClassLoader。
DexClassLoader cl = new DexClassLoader(dexInternalStoragePath.getAbsolutePath(),
optimizedDexOutputPath.getAbsolutePath(),
null,
getClassLoader());
加载一个类:
Class myNewClass = cl.loadClass("com.example.dex.lib.LibraryProvider");
它确实很好用,但是现在我想在我的DexClassLoader中获取所有类名称的列表
我发现this在Java中工作,但在android中没有这样的东西。
问题是如何从DexClassLoader获取所有类名称的列表
最佳答案
要在包含classes.dex
文件的.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);
}