与Android一起使用ProGuard

我在处理ProGuard和Android时遇到了问题。

我在网上search了几个小时,发现了多种混淆Android应用程序的方法。 现在我正在尝试一个看起来最简单的方法,所以:

  • 我在我的项目的根目录中创build了一个config.cfg文件
  • 我在我的project.properties添加了proguard.config=config.cfg
  • 我使用Eclipse导出向导来导出&签署.apk文件

我收到一条消息,说Proguard returned with error code 1. See console和控制台:

 Proguard returned with error code 1. See console Note: there were 3847 duplicate class definitions. Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry You should check if you need to specify additional program jars. Warning: there were 4 unresolved references to classes or interfaces. You may need to specify additional library jars (using '-libraryjars'). Error: Please correct the above warnings first. 

即使我使用官方Proguard网站提供的configuration,或者默认的configuration,我也有错误。
这是我的自定义configuration(myProject / config.cfg):

 -injars bin/classes -injars libs -libraryjars "C:\Program Files\Android\android-sdk\platforms\android-13\android.jar" -dontskipnonpubliclibraryclasses -optimizationpasses 5 -printmapping map.txt -flattenpackagehierarchy -dontpreverify -repackageclasses '' -allowaccessmodification -optimizations !code/simplification/arithmetic -keepattributes *Annotation* -keep public class * extends android.app.Application -keep public class * extends android.app.Activity -keep public class * extends android.app.PreferenceActivity -keep public class * extends android.view.View -keep public class * extends android.widget.BaseAdapter -keep public class * implements android.view.View.OnTouchListener -keep public class * extends android.view.View { public <init>(android.content.Context); public <init>(android.content.Context, android.util.AttributeSet); public <init>(android.content.Context, android.util.AttributeSet, int); public void set*(...); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers class * extends android.content.Context { public void *(android.view.View); public void *(android.view.MenuItem); } -keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } 

我不能得到它的工作…任何想法将不胜感激!

注:我使用存储在我的项目的libs文件夹中的Jackson JSON libs

Solutions Collecting From Web of "与Android一起使用ProGuard"

1) ProGuard手册>故障排除>注意:程序/库类的重复定义

Android Ant / Eclipse构build已经为你指定了-injars / -libraryjars。 如果您在configuration中再次指定它们,ProGuard会注意到它们是重复的。 所以不要指定-injars / -libraryjars。

2) ProGuard手册>故障排除>警告:找不到引用的类

org.w3c.dom.bootstrap.DOMImplementationRegistry在input代码中不存在,但com.fasterxml.jackson.databind.ext.DOMSerializer正在使用它。 如果您的应用程序无论如何工作,您可以让ProGuard接受:

 -dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry 

ProGuardconfiguration文件在这里提供:

https://groups.google.com/forum/#!msg/robospice/xGLRbGkLwQU/cAkaUQF34RsJ

解决我的问题!

我只是陷入了同样的问题,我通过引用JRE rt.jar文件来解决它:

-libraryjars /lib/rt.jar

我希望它有帮助