我真的很努力,但是从阅读这个答案总是得到一个Class Not Found异常 https://stackoverflow.com/a/3024261
我带着我的罐子跑了
dx --dex --output = C:\ classes.dex C:\ MyAndroidLib.jar
并获得了一个dex文件
然后我运行
apt添加C:\ MyLib.jar C:\ classes.dex
使用dex文件创建一个jar。
然后我写了下面的代码。
DexClassLoader classLoader = new DexClassLoader(
destPath, dirPath +"/" , null, getClass().getClassLoader());
Class<?> classToLoad = classLoader.loadClass("ClassImpl");
on debug我可以看到dex在classLoader中(在mDexs成员下) 而ClassImpl是我进入的唯一一个类。
但我一直没有找到班级的例外。
有人从外部jar获得了动态类加载的工作示例吗? 有人知道我的问题是什么?
答案 0 :(得分:1)
我没有使用aapt ...只有dex。然后我加载了我的类,并调用了我的方法。
使用此代码查看dex文件:
DexFile dexfile = DexFile.loadDex(url_jar_path,
File.createTempFile("opt", "dex", context.getCacheDir()).getPath(), 0);
// Print all classes in the DexFile
Enumeration<String> classNames = dexfile.entries();
String classname = "";
while (true) {
if (! classNames.hasMoreElements()) {
break;
}
classname = classNames.nextElement();
}
使用此代码查看课程内容:
Class class = dexclassloader.loadClass(ruta_clase_en_jar);
String name;
Method[] method_array = clase.getMethods();
for (Method i: method_array) {
name = i.getName ();
}