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/