Android 导出已签名的apk时出现NoSuchMethodError

Android 导出已签名的apk时出现NoSuchMethodError,android,deployment,compilation,dependencies,apk,Android,Deployment,Compilation,Dependencies,Apk,我试着编译一个Android的reddit阅读器。如果我从ADT启动应用程序(通过调试或简单运行),它将在我的手机上正确启动和运行(HTC Desire)。但是,如果我导出一个经过签名和zipaligned的包并安装它,它将无法工作。logcat显示了的NoSuchMethodError异常。它是两个JAR,存在于存储库中并添加到构建路径中。我确保这两个版本相同,甚至用更新的版本替换 我不太熟悉使用jar库。在编译C++时,它们是否像链接到一个静态库一样被链接到可执行文件中?如何确保设备上的应用

我试着编译一个Android的reddit阅读器。如果我从ADT启动应用程序(通过调试或简单运行),它将在我的手机上正确启动和运行(HTC Desire)。但是,如果我导出一个经过签名和zipaligned的包并安装它,它将无法工作。logcat显示了的NoSuchMethodError异常。它是两个JAR,存在于存储库中并添加到构建路径中。我确保这两个版本相同,甚至用更新的版本替换


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

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

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

是的,这肯定是混淆。如何将整个库列入白名单?问题是调用是模糊的,但库本身不是(我这样认为是因为找不到的方法的名称类似于a.c.f.d)。您需要添加一行内容,如
-keep class org.codehaus.jackson.
proguard.cfg
。是的,不完全是这样,但是沿着这些行。谢谢,我设法弄清楚哪些班级被打破了。后来,我发现一条注释说需要更新版本的proguard,这样它就不会破坏这些类。