ProGuard是一個壓縮、優化和混淆Java字節碼文件的免費的工具,它能夠刪除無用的類、字段、方法和屬性。能夠刪除沒用的註釋,最大限度地優化字節碼文件。它還能夠使用簡短的無心義的名稱來重命名已經存在的類、字段、方法和屬性。這樣作的結果是更小的jar、apk……,而且更難被反編譯。java
Android的編譯環境中已默認集成了Proguard,但只有在release模式下編譯纔會運行。此狀態下,它會在用到ant release或是Eclipse的導出嚮導時,自動檢查proguard.config屬性是否已設置,若是設置了,ProGuard就會在打成包以前,自動處理程序的字節碼。Debug模式下,之因此不觸發,是由於混淆後的代碼會使得調試變得更加累贅。android
前面已經進行了簽名打包,接下來windows
將proguard.config放在項目的根目錄下app
在ant.properties再添加proguard.config=proguard.cfg ide
在project.properties裏添加proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt工具
注意:在運行過程當中可能會出現
D:\Program Files\android-sdk-windows\tools\ant\build.xml:871: Please correct the above warnings first.優化
而致使BUILD FAILEDui
在proguard.config裏添加-dontwarn便可成功調試
proguard.config的內容爲:code
-keep public class <MyClass>
-dontwarn
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-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 com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembernames class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
報錯:
解決:添加ant.properties(不可缺乏)