代码混淆

落爺英雄遲暮 提交于 2020-02-24 06:25:13

混淆的作用:

  1. 【优化】 他可以优化java的字节码,使程序运行更快
  2. 【压缩】 减少App大小,在混淆过程中会找出未被使用过的类和类成员并删除它们
  3. 【混淆】使我们的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    : 经过压缩后被删除的没有使用的代码, 方法。。。等名称的文件列表

 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!