1

APK 文件中有一个interface IA类。我创建了一个包含 IA 的 jar implementation MA。罐子有一个Global classB class。jar 是使用数据目录中的 Dexclassloader 动态加载的。

interface IA {
  test();
}

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

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

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

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

4

1 回答 1

0

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

于 2018-01-27T16:28:10.520 回答