【问题标题】:NoSuchMethodError when exporting a signed apk导出签名的 apk 时出现 NoSuchMethodError
【发布时间】:2011-10-05 11:43:11
【问题描述】:

我尝试编译reddit-is-fun,一个适用于 Android 的 reddit 阅读器。如果我从 ADT 启动应用程序(通过调试或简单运行),它将在我的手机 (HTC Desire) 上启动并正确运行。但是,如果我导出一个签名和压缩对齐的包并安装它,它将无法工作。 logcat 显示 Jackson 的 NoSuchMethodError 异常。它是两个 jar,存在于存储库中并添加到构建路径中。我确保两者具有相同的版本,甚至用较新的版本替换它们。

我不太熟悉使用 jar 库。它们是否“链接”到生成的 apk 中,就像编译 C++ 时将静态库链接到可执行文件一样?如何确保设备上的应用程序将加载用于编译的相同版本? (这很可能是问题所在)。

【问题讨论】:

    标签: android deployment compilation dependencies apk


    【解决方案1】:

    听起来 Proguard 混淆处理正在破坏它。尝试禁用 Proguard 以确认(或将 Jackson 添加到 proguard.cfg 的白名单中)

    【讨论】:

    • 是的,这绝对是混淆。如何将整个库列入白名单?问题是调用被混淆了,但库本身没有(我在想这是因为未找到的方法被命名为 a.c.f.d)。
    • 您需要在 -keep class org.codehaus.jackson.*proguard.cfg 之间添加一行内容。
    • 是的,它不会完全是这样,但沿着这些思路。
    • 谢谢,我设法弄清楚了哪些类被破坏了。后来我发现一个注释说需要更新版本的 proguard,这样它就不会破坏这些类。
    【解决方案2】:

    我认为这意味着您的 JAR 没有正确地从 JVM 格式转换为 Dalvik VM 格式。如您所知,Android 使用与普通桌面 JVM 不同的字节码。您应该将 JAR 从 JVM 字节码转换为 Dalvik 的字节码。尝试谷歌“将 JVM 转换为 Dalvik”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多