android應用程序的混淆打包

1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示:

target=android-8

proguard.config=proguard.cfg

Eclipse會通過此配置在工程目錄生成proguard.cfg 文件

2 . 生成keystore (如已有可直接利用)

按照下面的命令行 在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下,輸入keytool -genkey -alias android.keystore -keyalg RSA -validity 100000 -keystore android.keystore

參數意義:-validity主要是證書的有效期,寫100000天;空格,退格鍵 都算密碼。

命令執行後會在D:\Program Files\Java\jdk1.6.0_07\bin>目錄下生成 android.keystore文件。

3. 在Eclipce的操作

File -> Export -> Export Android Application -> Select project -> Using the existing keystore , and input password -> select the destination APK file

 

經過混淆後的源代碼,原先的類名和方法名會被類似a,b,c。。。的字符所替換,混淆的原理其實也就是類名和方法名的映射。

但4大組件並沒有混淆(所有在清單文件定義的組件不能被混淆),因爲系統需要通過清單文件來查找和運行應用程序。

proguard.cfg 文件代碼解讀

-optimizationpasses 5 ->設置混淆的壓縮比率 0 ~ 7

-dontusemixedcaseclassnames -> Aa aA

-dontskipnonpubliclibraryclasses ->如果應用程序引入的有jar包,並且想混淆jar包裏面的class

-dontpreverify

-verbose ->混淆後生產映射文件 map 類名->轉化後類名的映射

-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* ->混淆採用的算法.

-keep public class * extends android.app.Activity ->所有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.app.backup.BackupAgentHelper

-keep public class * extends android.preference.Preference

-keep public class com.android.vending.licensing.ILicensingService

-keepclasseswithmembernames class * {

native ; -> 所有native的方法不能去混淆.

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet);

-->某些構造方法不能去混淆

}

-keepclasseswithmembers class * {

public (android.content.Context, android.util.AttributeSet, int);

}

-keepclassmembers class * extends android.app.Activity {

public void *(android.view.View);

}

-keepclassmembers enum * { -> 枚舉類不能去混淆.

public static **[] values();

public static ** valueOf(java.lang.String);

}

-keep class * implements android.os.Parcelable { -> aidl文件不能去混淆.

public static final android.os.Parcelable$Creator *;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章