java - 为什么动态加载 dex jar 时会出现 java.lang.NoSuchMethodError 错误?

标签 java android classloader dynamic-loading dexclassloader

APK文件中有一个接口(interface)IA类。我创建了一个包含 IA 的实现 MA 的 jar。该 jar 有一个 Global 类B 类。该 jar 是使用 Dexclassloader 从数据目录动态加载的。

interface IA {
  test();
}

class Global {
   IA instance;  //refer to  MA instance.
}

class B {
  ....
  instance.test() ; // throw NoSuchMethodError
....
} 

但是通过反射调用实例的测试方法是可以的。

为什么?当然我不熟悉Classloader或DexClassloader的一些原理。有人能给我解释一下吗?谢谢

最佳答案

我也遇到了 NoSuchMethod 错误,经过一些测试后,我发现问题是 JAR 内的 DEX 文件没有按预期命名为classes.dex。 应用程序能够创建类的新实例这一事实并不一定意味着 DEX 已正确加载,我使用空 JAR 对其进行了测试(即通过 7-ZIP 删除了所有内部文件),并且仍然能够实例化我的类(尽管我猜它只能与获取零参数的默认构造函数一起使用)。

关于java - 为什么动态加载 dex jar 时会出现 java.lang.NoSuchMethodError 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37050601/

相关文章:

java - 在 Eclipse Luna 中创建 Android 应用程序时出现项目错误

java - 在应用程序类与静态类中存储全局对象

java - 解析 xml 名称-值字段

java - 使用返回数组列表的对象更新 JList

java - joptionpane 默认值 showinputdialog

android - react native android 错误 : cannot find symbol

java - 增加出现次数而不是添加重复项的集合

android - 图像切换器有什么好处?

java - Tomcat 自定义类加载器加载某些 jar 失败

java - 为什么这个类可以被Java类加载器加载两次?