在jar上从jar加载类

时间:2012-08-13 07:27:15

标签: android jar

我真的很努力,但是从阅读这个答案总是得到一个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获得了动态类加载的工作示例吗? 有人知道我的问题是什么?

1 个答案:

答案 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 ();
}