Android Guide:http://developer.android.com/tools/help/proguard.html
APP混淆是通过在语义上去除无用的类、变量和方法,修改它们的名字来提高APP的反编译难度。
APP混淆器已集成在Android SDK中,使用时只需要使用下列代码打开它:
android { |
proguard-rules.pro是我们自己定义的混淆规则文件,有一些类、变量、方法是不能被混淆的,比如使用反射机制的类,名字被修改后将不能正确反射。
混淆规则文档:
混淆步骤:
-
shrink: 去掉无用代码
-
optimize:优化代码(静态化,内联,无用参数去除等。。)
-
obfuscate:混淆,给类、变量、方法改名字
-
preverify:预效验
混淆规则说明:
[@annotationtype] [[!]public|final|abstract|@ ...] [!]interface|class|enum classname 1.类的关键字:interface,class,enum,用来描述模块的类型 2.classname: 类名,全称,例如:com.heyy.test.MainActivity,可以使用通配符:
3.extends|implements: 指定继承和实现类或接口 4.@annotationtype:指定类或成员被注释的类型 5.类成员和真实的类一样,但是不带名字,也可以使用下面这些类型:
也可以使用?和*两种通配符 6.type:类型,可以使用如下通配符:
7.内部类: XXX$YY 表示XXX中的类部类YY | ||||||||||||||||||||||||||
-keep [,modifier,...] class_specification modifier: allowshrinking:允许shrink步骤 allowoptimization:允许optimize步骤 allowobfuscation:允许obfuscate步骤 | ||||||||||||||||||||||||||
-keepclassmembers [,modifier,...] class_specification 指定要保留的类成员 | ||||||||||||||||||||||||||
-keepclasseswithmembers [,modifier,...] class_specification 指定要保留的类和类成员 | ||||||||||||||||||||||||||
-keepnames class_specification 相当于-keep,allowshrinking class_specification | ||||||||||||||||||||||||||
-keepclassmembernames class_specification 相当于-keepclassmembers,allowshrinking class_specification | ||||||||||||||||||||||||||
-keepclasseswithmembernames class_specification 相当于-keepclasseswithmembers,allowshrinking class_specification | ||||||||||||||||||||||||||
-optimizationpasses n 优化级别 | ||||||||||||||||||||||||||
-dontoptimize 不使用优化 | ||||||||||||||||||||||||||
-optimizations optimization_filter 优化过滤器 |
更多规则请参考文档。
注意: 在android-studio中,包名一定要小写,不然会被跳过,即使在规则中设置了混淆也不会被混淆。
不能被混淆的代码:
|