代码混淆记录:
首先在app.gradle中设置混淆:
buildTypes {
release {
debuggable true
//设置混淆
minifyEnabled true
//混淆文件
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
混淆规则文件:
在混淆规则文件中加入以下代码:
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #指定要启用和禁用的优化
-optimizationpasses 5 #压缩比率 0---7
-allowaccessmodification #指定在预先处理中 类和类成员的访问性可能会扩大
-dontpreverify #指定不预先验证处理类文件
#-dontoptimize
-dontusemixedcaseclassnames #指定不产生混合的情况下的类名称而混淆
-dontskipnonpubliclibraryclasses
#-dontskipnonpubliclibraryclassmembers #指定不去忽略包可见的库类的成员。
-verbose
-keepattributes SourceFile,LineNumberTable#保留行号
-keepattributes *Annotation* #保持注解
-keepattributes Signature
-keepattributes EnclosingMethod
-keep class * extends java.lang.annotation.Annotation { *; }
-keepclasseswithmembernames class * {#指定不混淆所有的jni方法
native <methods>;
}
-keepclassmembers public class * extends android.view.View {#所有View的 子类 及其getset方法都不混淆
void set*(***);
*** get*();
}
-keepclassmembers class * extends android.app.Activity {#所有的activity子类中 参数类型为view的方法
public void *(android.view.View);
}
-keepclassmembers enum * { #不混淆枚举类型中的指定方法
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable { #不混淆Parcelable 子类及其Creator成员变量
public static final android.os.Parcelable$Creator *;
}
-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 **.R$* {#不混淆R类里及其所有内部static类中的所有static变量字段
public static <fields>;
}
-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.FragmentActivity
-dontwarn android.support.** #不提示兼容库的错误警告
# support design
-dontwarn android.support.design.**
-keep class android.support.design.** { *; }
-keep interface android.support.design.** { *; }
-keep public class android.support.design.R$* { *; }
-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
-ignorewarnings
最后一句一定要加上 忽略警告 要不然打包过程会报错。
测试下反编译的效果:
已经看不出代码的逻辑。