【问题标题】:Jackson library post-obfuscation using Proguard使用 Proguard 对 Jackson 库进行后混淆
【发布时间】:2016-09-30 17:04:15
【问题描述】:

在这里尝试一些解决方案一段时间后,我仍然面临获取 NullPointerException 的问题,显然是在使用 Jackson 库时,在尝试使用 Proguard 缩小我的 jar 文件之后。

这是我在 Proguard 配置文件中定义的内容:

-injars <my_raw_filejar>.jar
-outjars    <shrunk_filejar>.jar
-libraryjars    <JAVA_HOME>/lib/rt.jar

-keep public class packagename.MainClass{
    public static void main(java.lang.String[]);
}
-keepnames class org.codehaus.jackson.** { *; }
-keepattributes *Annotation*
-keepattributes EnclosingMethod
-keepattributes Signature
-dontobfuscate
-optimizations !code/allocation/variable
-dontoptimize
-dontwarn
-ignorewarnings

但是,一旦我运行生成的 shrunk jar,就会出现以下错误:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:535)
    at com.fasterxml.jackson.databind.ObjectMapper.<init>(ObjectMapper.java:452)
    at org.apache.beam.sdk.options.PipelineOptionsFactory.<clinit>(PipelineOptionsFactory.java:450)
    at skry.tech.terbium.pipelines.TerbiumFeedBigTablePipeline.main(TerbiumFeedBigTablePipeline.java:30)
Caused by: java.lang.NullPointerException
    at com.fasterxml.jackson.databind.cfg.MapperConfig.collectFeatureDefaults(MapperConfig.java:99)
    at com.fasterxml.jackson.databind.cfg.MapperConfigBase.<clinit>(MapperConfigBase.java:31)
    ... 4 more

是否有任何线索说明发生了什么以及如何解决此错误?

【问题讨论】:

    标签: java jackson proguard


    【解决方案1】:

    我在这里遇到了同样的问题。

    因为问题似乎是基于 Enum 为空。我将以下代码添加到我的 proguard.conf 中

    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 2016-11-11
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多