2012-06-07 67 views
4

當我通過Export > Export Android Application或通過Android Tools > Export Signed Application Package導出我的應用程序時,我無法獲得Proguard的工作。使用Eclipse ADT插件導出時,Proguard不起作用R19

我所知道的有關如何啓用Proguard的是取消對該行

proguard.config=${sdk.dir}\tools\proguard\proguard-android.txt:proguard-project.txt 

project.properties

我試着把我的配置文件放在那裏。也不行。

導出包中的classes.dex文件包含類私有方法的名稱,如onConfirmButtonClicked。所以Proguard有超過99%的機會沒有完成它的工作。

之後,我在proguard-project.txt文件中放入了一些隨機字符,但沒有收到任何錯誤。構建的詳細輸出根本不涉及Proguard。

我在想那裏有什麼問題。

+0

您如何看到classes.dex文件 - 包含任何特定的方法?它似乎包含垃圾人物,即使沒有proguard。 – Jasper

回答

0

Proguard的做工作,當您導出項目到一個.apk文件,你應該把你的文件(.cfg)所需要的配置,並且指向該文件在您的project.properties

proguard.config=${dir}\YOURCONFIGFILE.cfg 

並且在該配置文件中,您應該告訴proguard以保留項目中的所有關鍵元素。例如:

-injars  bin/classes 
-injars  libs 
-outjars  bin/classes-processed.jar 
-libraryjars /usr/local/java/android-sdk/platforms/android-9/android.jar 

-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 

-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 ** CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

-keepclassmembers class * { 
    @android.webkit.JavascriptInterface <methods>; 
} 

希望這有助於!