Android与Proguard问题混淆

时间:2012-12-13 18:55:51

标签: java android jackson proguard

我对Android的整体模糊不清,但我在最后几天开始试用Proguard。无论如何,我被困在所谓的Proguard地狱。

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

但是,当我尝试导出其中一个启用了Proguard的应用程序时,我在Jackson JSON Parsing库中遇到了一些错误。我尝试了很多不同的东西,我甚至试图忽略错误,但这只是让解析部分失败了。所以忽略错误不是正确的事情。

这是我的proguard-project.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').

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

除了proguard本身,要做的一件事是确保使用Jackson 2.x,而不是1.x - 它具有较少的动态(可选)依赖项。这降低了PG的噪音。

答案 2 :(得分:0)

“找不到引用的类”意味着需要使用-libraryjars指定包含这些类的JAR文件,这与javac的类路径非常相似。