2012-12-13 183 views
2

我是新来的整个混淆与Android的东西,但我已经开始尝试Proguard最后的日子。无论如何,我被困在所谓的Proguard地狱中。Android模糊混淆与Proguard问题

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

但是,当我尝试导出其中一个应用程序启用Proguard时,我得到杰克逊JSON解析库的一些错误。我已经尝试了很多不同的东西,甚至试图忽略这些错误,但这只是使解析部分失败。所以忽略这些错误并不是正确的做法。

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

回答

2

尝试添加-keep选项乔达时间类:

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

伟大的家伙,这解决了95%的警告,但有4个更多,他们都是这样的。警告:org.codehaus.jackson.map.ext.DOMSerializer:找不到引用的类org.w3c.dom.bootstrap.DOMImplementationRegistry – parek

+2

尝试为org.w3c。**和其他外部库添加-keep和-dontwarn 。在我的项目中,我试图使用不同的选项,包括-libraryjars和-injars,但我没有运气,所以我必须保留所有来自外部库的包(即使我的应用程序没有直接使用它们)。此外,如果您设法导出您的应用程序,请注意,由于模糊的DTO类,反射方法调用的方法,它仍然可能会在运行时崩溃。 – Leszek

0

除了ProGuard的本身,有一件事做的是确保你使用的杰克逊2.x的,不是1.X - - 它具有较少的动态(可选)依赖关系。这减少了PG的噪音。

0

“无法找到引用类”意味着包含这些类的JAR文件需要使用-libraryjars来指定,其工作方式与javac的类路径非常相似。