gpt4 book ai didi

android - 使用 Proguard 处理 Jackson 库后混淆时出错

转载 作者:IT老高 更新时间:2023-10-28 23:10:07 25 4
gpt4 key购买 nike

在使用 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

其中,我切换了 dontoptimizedontshrink 标志。但是,结果总是一样的。

在我试图解决这个问题的所有时间里,我对 Proguard 库所付出的努力感到惊讶和敬畏。只是当事情不起作用时,它们有点混淆

Proguard 版本 - 4.6

最佳答案

从堆栈跟踪中看不出来,但是 Jackson 需要一些注释,ProGuard 默认会删除这些注释。参照。 ProGuard 手册 > 示例 > Processing annotations :

-keepattributes *Annotation*,EnclosingMethod

此外,正如不祥的包名“org.codehaus.jackson.map.introspect”所暗示的,Jackson 对已解析的类执行自省(introspection)以查找 getter 和 setter。在不知道更好的情况下,ProGuard 可能会删除或重命名它们,因为您的代码可能不会明确使用它们。您可能必须明确保留它们,例如:

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

关于android - 使用 Proguard 处理 Jackson 库后混淆时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8405225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com