2012-06-28 43 views
21

我在处理ProGuard和Android时遇到问题。在Android上使用ProGuard

我在网上搜索了几个小时,发现了多种混淆Android应用程序的方法。现在我想一个看起来是最简单的,所以我创建了一个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的网站所提供的配置,或默认我有错误。
    这里是我的自定义配置(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文件夹我的项目

  • 回答

    33

    1)ProGuard manual > Troubleshooting > Note: duplicate definition of program/library class

    Android的蚂蚁/ Eclipse中的杰克逊JSON librairies建立已经指定-injars/-libraryjars你。如果您在配置中再次指定它们,ProGuard会注意到它们是重复的。所以不要指定-injars/-libraryjars。

    2)ProGuard manual > Troubleshooting > Warning: can't find referenced class

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

    -dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry 
    
    +0

    Thx帮助。 编译/模糊处理工作没有错误,但然后当我点击按钮重定向到一个具有对象使用JSON库的应用程序崩溃的按钮... – Flawyte

    +0

    仍然无法让它工作,没有任何想法?? – Flawyte

    +0

    对我来说也是...它不是抛出错误,但我的flexJson已停止工作 – sheetal

    1

    我只是卡住同样的问题,我通过引用JRE的rt.jar文件解决了这个问题:

    -libraryjars/LIB/rt.jar的

    我希望它能帮助