代码混淆
混淆的作用:
- 【优化】 他可以优化java的字节码,使程序运行更快
- 【压缩】 减少App大小,在混淆过程中会找出未被使用过的类和类成员并删除它们
- 【混淆】使我们的java代码中的类、函数、变量名随机变成无意义的代号形如:a, b ,c之类的
混淆配置文件:proguard-rules.pro
混淆规则:
-keepattributes {name} 保护给定的属性不被混淆,
如:-keepattributes *Annotation*
-dontwarn {name} 不要警告指定库中找不到的引用。混淆在默认情况下会检查每个库的引用是否正确,但是有些第三方库里面会有用不到的类,有些没有正确引用,所以需要对第三方库取消警告 否则会报错,而且有可能混淆时间会很长。
如:-dontwarn org.codehaus.jackson.**
-keep {Modifier} {class_specification} 保留指定的类名、类成员不被混淆
-keepclassmembers {modifier} {class_specification} 保留指定的类成员不被混淆
-keepclasseswithmembers {class_specification} 保留指定的类名、类成员不被混淆
-keepnames {class_specification} 保留指定的类名、类成员的名称不被混淆
-keepclasseswithmembernames {class_specification} 保留指定的类名、类成员名称不被混淆(如果存在的话)
-keepattributes SourceFile, LineNumberTable crash日志里面保留类名称 和 行号
混淆成功后:
dump.txt : 混淆后类的内部结构说明
mapping.txt : 混淆前与混淆后名称对应关系
seeds.txt : 经过一系列keep语句的保持,没有被混淆的类,成员的名称列表文件
usage.txt : 经过压缩后被删除的没有使用的代码, 方法。。。等名称的文件列表