android 混淆打包

jopen 8年前發布 | 10K 次閱讀 Android開發 移動開發

ProGuard是一個壓縮、優化和混淆Java字節碼文件的免費的工具,它可以刪除無用的類、字段、方法和屬性。可以刪除沒用的注釋,最大限度地優化字節碼文件。它還可以使用簡短的無意義的名稱來重命名已經存在的類、字段、方法和屬性。這樣做的結果是更小的jar、apk……,并且更難被反編譯。

Android的編譯環境中已默認集成了Proguard,但只有在release模式下編譯才會運行。此狀態下,它會在用到ant release或是Eclipse的導出向導時,自動檢查proguard.config屬性是否已設置,如果設置了,ProGuard就會在打成包之前,自動處理程序的字節碼。Debug模式下,之所以不觸發,是因為混淆后的代碼會使得調試變得更加累贅。

前面已經進行了簽名打包,接下來

proguard.config放在項目的根目錄下

在ant.properties再添加proguard.config=proguard.cfg 

在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 FAILED

proguard.config里添加-dontwarn即可成功

proguard.config的內容為:

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


來自: http://my.oschina.net/u/2483853/blog/603085

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!