ani*_*van 20 obfuscation android proguard jackson
在仔细研究了与使用Proguard进行混淆的问题相关的各种问题之后,我已经到了我觉得自己可能是唯一一个遇到这个问题的人.因此,帖子.
我有一个相当标准的Android应用程序,它使用基于JSON的REST调用来交换数据.我利用Jackson库来解析JSON数据.一切都运行得很完美,直到我们决定使用Proguard为我们的发布版本加入混淆.在整理出回调相关问题的世界之后,我终于遇到了与杰克逊图书馆相关的问题.
基本上,线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
Run Code Online (Sandbox Code Playgroud)
在阅读了许多与包括外部库相关的其他帖子之后,让proguard忽略杰克逊库类,打开和关闭优化以及缩小标志,我现在只是无能为力.
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
Run Code Online (Sandbox Code Playgroud)
其中,我已经切换了dontoptimize和dontshrink旗帜.但是,结果总是一样的.
在我试图解决这个问题的所有时间里,我对Proguard图书馆的努力感到惊讶和敬畏.只是当事情不起作用时,它们会有点混淆.
Proguard版本 - 4.6
Eri*_*une 39
从堆栈跟踪来看并不明显,但Jackson需要一些注释,默认情况下ProGuard会删除它们.(CFR).ProGuard手册>示例> 处理注释:
-keepattributes *Annotation*,EnclosingMethod
Run Code Online (Sandbox Code Playgroud)
此外,正如不祥的包名'org.codehaus.jackson.map.introspect'所暗示的那样,Jackson对已解析的类执行内省以查找getter和setter.在不知情的情况下,ProGuard可能正在删除或重命名这些,因为您的代码可能不会明确地使用它们.您可能必须明确地保留它们,例如:
-keep public class mydatapackage.** {
public void set*(***);
public *** get*();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9408 次 |
| 最近记录: |