Android 混淆 Proguard 问题



我对整个混淆Android的事情很陌生,但最近几天我已经开始尝试Proguard了。无论如何,我被困在所谓的Proguard地狱中。

我的应用程序的结构是我有 3 个不同的项目。一个库和两个应用程序项目。这两个应用程序项目都基于库项目,其中包含应用程序的所有逻辑和库。应用程序项目中几乎没有放置任何内容。

但是,当我尝试导出启用了Proguard的应用程序之一时,Jackson JSON 解析库出现一些错误。我尝试了很多不同的东西,我什至试图忽略错误,但这只会使解析部分失败。因此,忽略错误不是正确的做法。

这是我的项目.txt文件

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
-keep public class com.google.android.vending.licensing.ILicensingService
-keep class org.codehaus.** { *; }

这些是我得到的错误。

Warning: org.codehaus.jackson.map.ext.JodaSerializers$LocalDateTimeSerializer: 
  can't find referenced class org.joda.time.LocalDateTime
      You should check if you need to specify additional program jars.
Warning: there were 99 unresolved references to classes or interfaces.
         You may need to specify additional library jars (using '-libraryjars').

尝试为 joda 时间类添加-keep选项:

-keep public class org.joda.time.** {public private protected *;}
-dontwarn org.joda.time.**

除了 proguard 本身之外,要做的一件事是确保你使用 Jackson 2.x,而不是 1.x——它有更少的动态(可选)依赖项。这样可以将噪声降低PG。

"找不到引用的类"意味着包含这些类的JAR文件需要用-libraryjars指定,这很像javac的类路径。

最新更新