target=android-8
proguard.config=proguard.cfg
Eclipse会通过此配置在工程目录生成proguard.cfg文件
2.生成keystore(如已有可直接利用)
按照下面的命令行在D:\ProgramFiles\Java\jdk1.6.0_07\bin>目录下,输入keytool-genkey-aliasandroid.keystore-keyalgRSA-validity100000-keystoreandroid.keystore
参数意义:-validity主要是证书的有效期,写100000天;空格,退格键都算密码。
命令执行后会在D:\ProgramFiles\Java\jdk1.6.0_07\bin>目录下生成android.keystore文件。
3.在Eclipce的操作
File->Export->ExportAndroidApplication->Selectproject->Usingtheexistingkeystore,andinputpassword->selectthedestinationAPKfile
经过混淆后的源代码,原先的类名和方法名会被类似a,b,c。。。的字符所替换,混淆的原理其实也就是类名和方法名的映射。
但4大组件并没有混淆(所有在清单文件定义的组件不能被混淆),因为系统需要通过清单文件来查找和运行应用程序。
proguard.cfg 文件代码解读
-optimizationpasses5 ->设置混淆的压缩比率0~7
-dontusemixedcaseclassnames->AaaA
-dontskipnonpubliclibraryclasses->如果应用程序引入的有jar包,并且想混淆jar包里面的class
-dontpreverify
-verbose->混淆后生产映射文件map类名->转化后类名的映射
-optimizations!code/simplification/arithmetic,!field/*,!class/merging/* ->混淆采用的算法.
-keeppublicclass*extendsandroid.app.Activity ->所有activity的子类不要去混淆
-keeppublicclass*extendsandroid.app.Application
-keeppublicclass*extendsandroid.app.Service
-keeppublicclass*extendsandroid.content.BroadcastReceiver
-keeppublicclass*extendsandroid.content.ContentProvider
-keeppublicclass*extendsandroid.app.backup.BackupAgentHelper
-keeppublicclass*extendsandroid.preference.Preference
-keeppublicclasscom.android.vending.licensing.ILicensingService
-keepclasseswithmembernamesclass*{
native<methods>; ->所有native的方法不能去混淆.
}
-keepclasseswithmembersclass*{
public<init>(android.content.Context,android.util.AttributeSet);
-->某些构造方法不能去混淆
}
-keepclasseswithmembersclass*{
public<init>(android.content.Context,android.util.AttributeSet,int);
}
-keepclassmembersclass*extendsandroid.app.Activity{
publicvoid*(android.view.View);
}
-keepclassmembersenum*{ ->枚举类不能去混淆.
publicstatic**[]values();
publicstatic**valueOf(java.lang.String);
}
-keepclass*implementsandroid.os.Parcelable{ ->aidl文件不能去混淆.
publicstaticfinalandroid.os.Parcelable$Creator*;
}