为什么动态加载dex jar时java.lang.NoSuchMethodError?

时间:2016-05-05 12:27:08

标签: java android classloader dynamic-loading dexclassloader

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

interface IA {
  test();
}

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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