我現在用的AndroidStudio , 只需要在 build.grade 的配置文件中配置如下即可:
- buildTypes {
- debug {
- versionNameSuffix ".dev"
- }
- release {
- debuggable false
- minifyEnabled true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.release
- }
- }
- -libraryjars class_path 應用的依賴包,如android-support-v4
- -keep [,modifier,...] class_specification 不混淆某些類
- -keepclassmembers [,modifier,...] class_specification 不混淆類的成員
- -keepclasseswithmembers [,modifier,...] class_specification 不混淆類及其成員
- -keepnames class_specification 不混淆類及其成員名
- -keepclassmembernames class_specification 不混淆類的成員名
- -keepclasseswithmembernames class_specification 不混淆類及其成員名
- -assumenosideeffects class_specification 假設調用不產生任何影響,在proguard代碼優化時會將該調用remove掉。如system.out.println和Log.v等等
- -dontwarn [class_filter] 不提示warnning
Android 混淆原則:
- -keepattributes *Annotation*//使用註解需要添加
- -keep public class com.google.vending.licensing.ILicensingService
- -keep public class com.android.vending.licensing.ILicensingService
- # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
- -keepclasseswithmembernames class * {//指定不混淆所有的JNI方法
- native <methods>;
- }
- # keep setters in Views so that animations can still work.
- # see http://proguard.sourceforge.net/manual/examples.html#beans
- -keepclassmembers public class * extends android.view.View {//所有View的子類及其子類的get、set方法都不進行混淆
- void set*(***);
- *** get*();
- }
- # We want to keep methods in Activity that could be used in the XML attribute onClick
- -keepclassmembers class * extends android.app.Activity {//不混淆Activity中參數類型爲View的所有方法
- public void *(android.view.View);
- }
- # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
- -keepclassmembers enum * {//不混淆Enum類型的指定方法
- public static **[] values();
- public static ** valueOf(java.lang.String);
- }
- //不混淆Parcelable和它的子類,還有Creator成員變量
- -keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
- }
- //不混淆R類裏及其所有內部static類中的所有static變量字段
- -keepclassmembers class **.R$* {
- public static <fields>;
- }
- # The support library contains references to newer platform versions.
- # Don't warn about those in case this app is linking against an older
- # platform version. We know about them, and they are safe.
- -dontwarn android.support.**//不提示兼容庫的錯誤警告
- -keepattributes Signature
- -keepattributes EnclosingMethod
- -keep class czy.**{*;}//不混淆所有的com.czy.bean包下的類和這些類的所有成員變量
- //不混淆Serializable接口的子類中指定的某些成員變量和方法
- -keepclassmembers class * implements java.io.Serializable {
- static final long serialVersionUID;
- private static final java.io.ObjectStreamField[] serialPersistentFields;
- private void writeObject(java.io.ObjectOutputStream);
- private void readObject(java.io.ObjectInputStream);
- java.lang.Object writeReplace();
- java.lang.Object readResolve();
- }
- -keepclassmembers class fqcn.of.javascript.interface.for.webview {
- public *;
- }
- -keep class com.xxx.xxx.** { *; }//保持WEB接口不被混淆 此處xxx.xxx是自己接口的包名
不混淆某個類:
- -keep class com.czy.**//不混淆所有com.czy包下的類,** 換成具體的類名則表示不混淆某個具體的類
- -keep class com.clock.**{*;}//不混淆所有com.clock包下的類和類中的所有成員變量,**可以換成具體類名,*可以換成具體的字段,可參照Serialzable的混淆
- -assumenosideeffects class android.util.Log {
- public static *** v(...);
- public static *** i(...);
- public static *** d(...);
- public static *** w(...);
- public static *** e(...);
- }