与使用Proguard的Jackson库混淆后发生错误

在使用Proguard浏览各种与混淆问题有关的疑问之后,我觉得我可能是唯一有这个问题的人。 因此,这个职位。

我有一个相当标准的Android应用程序,它使用基于JSON的REST调用来交换数据。 我利用Jackson库来parsingJSON数据。 一切都完美无缺地工作,直到我们决定使用Proguard为我们的发布版本join混淆。 在整理出一个callback相关问题的世界之后,我终于陷入了与jackson图书馆有关的问题。

基本上,行ObjectMapper om = new ObjectMapper() – 只是不工作! 我不断收到以下错误:

 Caused by: java.lang.ExceptionInInitializerError at org.codehaus.jackson.map.ObjectMapper.<clinit>(Unknown Source) ... 8 more Caused by: java.lang.NullPointerException at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.<init>(Unknown Source) at org.codehaus.jackson.map.introspect.VisibilityChecker$Std.<clinit>(Unknown Source) ... 9 more 

在阅读了大量有关包括外部图书馆的其他文章之后,让程序员忽略了jackson的图书馆类,打开和closures优化和缩小标志,我现在只是无能为力。

为了jackson的缘故,我在我的proguard.cfg文件中包含了各种各样的东西 –

 -dontskipnonpubliclibraryclassmembers -dontoptimize -dontshrink -libraryjars xtraLibs/joda-time-1.6.2.jar;xtraLibs/xml-apis.jar;xtraLibs/jsr311-api-0.8.jar;xtraLibs/stax2-api-3.0.0.jar;xtraLibs/httpmime-4.0.1.jar 

其中,我已经切换了dontoptimizedontshrink标志。 然而,结果总是一样的。

在我花费在试图解决这个问题的所有时间里,我都为进入Proguard图书馆的那种努力感到惊讶和惊讶。 只是当事情不奏效时,他们有点混乱

Proguard版本 – 4.6

Related of "与使用Proguard的Jackson库混淆后发生错误"

从堆栈跟踪中并不明显,但是Jackson需要一些注释,ProGuard默认将其删除。 (CFR)。 ProGuard手册>示例> 处理注释 :

 -keepattributes *Annotation*,EnclosingMethod 

而且,不祥的软件包名称“org.codehaus.jackson.map.introspect”暗示,jackson对被分析的类进行反省以find获取者和设置者。 不知道更好的,ProGuard可能会删除或重命名这些,因为您的代码可能不会明确使用它们。 你可能必须明确地保留它们,例如:

 -keep public class mydatapackage.** { public void set*(***); public *** get*(); }