NoSuchMethodError在同一个APK中调用类的构造函数

时间:2013-02-06 20:46:08

标签: android apk

我正在尝试在尝试new某个班级时抛出NoSuchMethodError的应用。代码看起来像这样......

Bar bar = new Bar(Bar.Type.WHATEVER, 1f);

......错误是......

Caused by: java.lang.NoSuchMethodError: com.foo.Bar.<init>

我在网上看到的所有东西都与编译一个版本的库并运行另一个没有相同方法/签名的版本有关。但是,在我的例子中,有问题的类是在JAR中,其类正在应用程序的APK中导出。所以在运行时不应该使用不同版本的类,对吧?

最近Bar的构造函数参数已更改,因此我执行了以下操作以验证更改是否已进入APK:

  1. 打开APK并解压缩classes.dex
  2. 使用dex2jar
  3. 将DEX转换为JAR
  4. 打开JAR并提取相关课程。
  5. 使用jclasslib检查了类,并验证了构造函数是否存在。我看到<init>(Lcom/foo/Bar$Type;F)
  6. 此时,我感到困惑。有谁知道可能导致此错误的原因是什么?

1 个答案:

答案 0 :(得分:0)

我让应用程序再次运行,我相信问题是项目使用的jar,它是使用Bar(现已过时)版本构建的。假设我的应用程序依赖于jar X(包括Bar)和Y(使用Bar。)我知道Bar的签名最近发生了变化,我可以看到更改正在进入APK。但我没有意识到罐子Y使用Bar并且最近没有被重建。由于抛出异常只提到方法名称 - <init>(构造函数) - 而不是参数,我没有意识到Bar试图使用(现在不存在的)默认构造函数构建。