在浏览了与使用Proguard进行混淆相关问题的各种查询之后,我开始感到可能只有我遇到了这个特定的问题。因此,才发表了这篇帖子。
我有一个相当标准的Android应用程序,它使用基于JSON的REST调用来交换数据。 我使用Jackson
库解析JSON数据。 一切都工作得很好,直到我们决定在发布版本中使用Proguard进行混淆。 解决了许多回调相关的问题后,我现在卡在了与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
在阅读了很多与包含外部库有关的其他帖子,使proguard忽略Jackson库类, 开启和关闭优化和收缩标志后,我现在一无所知。
为了使用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
在这些选项中,我已经切换了dontoptimize
和dontshrink
标志。但是,结果始终如一。
在我花费的所有时间里,尝试解决这个问题,我对Proguard库投入的努力感到惊讶和敬畏。只是当事情不起作用时,它们有点混淆。
Proguard版本-4.6
-keepattributes Signature
,-keepnames class com.fasterxml.jackson.** { *; }
,-dontwarn com.fasterxml.jackson.databind.**
。 - ashughes