0

我真的很努力,但总是得到一个 Class Not Found 异常,从阅读这个答案 https://stackoverflow.com/a/3024261

我带着我的罐子跑了

dx --dex --output=C:\classes.dex C:\MyAndroidLib.jar

并得到了一个dex文件

然后我运行

apt add C:\MyLib.jar C:\classes.dex

用 dex 文件创建一个 jar。

然后我写了下面的代码。

DexClassLoader classLoader = new DexClassLoader(
            destPath, dirPath +"/" , null, getClass().getClassLoader());
    Class<?> classToLoad = classLoader.loadClass("ClassImpl");

在调试时,我可以看到 dex 在 classLoader 内(在 mDexs 成员下),而 ClassImpl 是我进入的唯一类。

但我不断收到类未找到异常。

有人从外部 jar 中获得了动态类加载的工作示例吗?有人知道我的问题是什么吗?

4

1 回答 1

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 ();
}
于 2016-03-03T19:50:30.333 回答