2012-06-28 76 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的

    我希望它能幫助