代码混淆
ProGuard是ADT自带的apk混淆器,它的用途有:1、压缩apk包的大小,能删除无用的代码,并简化部分类名和方法名。
2、加大破解源码的难度,因为部分类名和方法名被重命名,使得程序逻辑变得难以理解。
代码混淆的规则在proguard-project.txt中编写,然后在project.properties补充规则文件的路径,如下所示:
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
下面是proguard-project.txt的一个例子:
#指定代码的压缩级别
-optimizationpasses 5
#是否使用大小写混合
-dontusemixedcaseclassnames
#优化/不优化输入的类文件
-dontoptimize
#是否混淆第三方jar包
-dontskipnonpubliclibraryclasses
#混淆时是否做预校验
-dontpreverify
#混淆时是否记录日志
-verbose
#混淆时所采用的算法
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
#保护注解
-keepattributes *Annotation*
#保持JNI用到的native方法不被混淆
-keepclasseswithmembers class * {
native <methods>;
}
#保持自定义控件的构造函数不被混淆,因为自定义控件很可能直接写在布局文件中
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
#保持自定义控件的构造函数不被混淆
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
#保持布局中onClick属性指定的方法不被混淆
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
#保