1 .混淆的基本原理
安卓平台的混淆原理简单来说就是,即使将代码中原本具有具体意义的包名、类名、变量名、方法名等名称全部按照毫无意义的字母a、b、c……的顺序替换,也可以实现此外,即使代码被反编译,他人也很难理解代码的结构和具体含义。
2 .混淆步骤
模糊处理:
压缩(Shrink ) :会检测并从代码中移除不需要的类、字段、方法和特性(Attribute )。
优化(OPtimize )优化:字节码,消除无用的指令。
模糊处理(Obfuscate ) :使用短而无意义的名称a、b、c和d来重命名类、字段和方法。
预检(Preveirfy ) :预检在java平台上处理的代码,并验证加载的class文件是否可执行。
a .打开
禁用为true
buildTypes {
释放{
最小化真
proguardfilesgetdefaultproguardfile (proguard-Android.txt (),(proguard-rules.pro ) '。
}
}
b .安卓studio自定义文件
在sdk中,tool中有proguard-android.txt
在文件项目\app\proguard-rules.pro中进行自定义。
不混淆在ScrollView类中定制的public print函数
- keepclassmembersclasscom.example.zcx.democoderjoy.scrollviewacti {
公共*;
}
效果:添加前反编译:
家后效应:
添加了print函数,发现没有混淆。
一般参数:
-keep指定不要混淆类和类成员(变量和方法)。
-keepclassmembers指定的类成员不会混淆。 -这是-keep的缩小版。 类名没有关系。
-keepclasseswithmembers只要指定的类成员存在,指定的类和类成员就不会混淆
-keep
- keep public class * extends Android.support.v4.* *
-keepclassmembers
- keepclassmembersclass * extends Android.app.activity {
Ublicvoid*(Android.view.view );
}
每次构建时,ProGuard都会输出以下文件:
dump.txt描述了APK中所有类文件的内部结构。 mapping.txt会转换原始类、方法和字段名。 seeds.txt列出了未模糊化的类和成员。 usage.txt列出了从APK中删除的代码。
这些文件存储在/build/outputs/mapping/release /中
3 .混淆优缺点
混淆的优点主要有两个。 1 .优化删除无用代码,减少apk体积。 2 .混淆代码反编译后,无法理解具体内容。
缺点:调试不方便(可以使用mapping.txt ),测试不充分可能会导致某些功能无法使用。
4 .一般情况下,使用以下通配符进行匹配:
1 )匹配所有原始类型,如布尔、整型等,但void除外;
2 )?匹配不含句点的任何字符;
3 ) * :匹配任意字符,不含句点;
4 ) ** :匹配任何包含句点的字符;
*** :匹配任何类型,包括原类型和非原类型、数组类型和非数组类型
6 )…:使所有类型的参数任意数量一致。