【问题标题】:Why java.lang.NoSuchMethodError when dynamically load a dex jar?为什么动态加载 dex jar 时出现 java.lang.NoSuchMethodError?
【发布时间】:2016-05-05 12:27:07
【问题描述】:

APK 文件中有一个interface IA 类。我创建了一个包含 IA 的 implementation MA 的 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 的一些原理。有人可以为我解释吗?谢谢

【问题讨论】:

  • 你还没有实现这个方法。接口只有方法的声明。顺便说一句,你没有使用反射。
  • @Batty Instance是在apk类中实现接口IA的MA实例

标签: java android classloader dynamic-loading dexclassloader


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 2012-11-10
    • 1970-01-01
    • 2019-09-08
    • 2012-05-01
    • 2019-07-02
    • 2013-12-28
    相关资源
    最近更新 更多