记录一下混淆配置。
混淆,其实就是给项目里的类、变量、方法等,换个名字,以此来降低可读性,同时还可以使包体变小。
单模块项目
这个相对简单,只需要配置build.gradle文件
1 | android { |
- 只有打开minifyEnabled开关才会混淆
- proguardFiles用来指定混淆配置文件,参数里的文件都会生效
- proguard-android-optimize.txt在: ~/Android/sdk/tools/proguard/目录下
- 除了上面这个文件,还有其他几个官方写好的默认配置
- proguard-rule.pro在build.gradle同目录下,自己额外的混淆配置写在这个文件里
多模块项目
所有混淆配置写在一起,便于修改和管理,但是当不再依赖其中某个模块而将其移除后,这时混淆文件中对应的配置就是冗余的。
所以,一般都是各自模块的混淆配置写在所在的模块里。主模块开启混淆,就会给所有模块混淆。
主模块的配置依然同上,子模块的配置如下:
1 | android { |
如果不关心编译类型的话,可以直接写在默认配置块,使用AndroidStudio创建项目时,它已经帮忙写上了,用consumer-rules.pro文件名来区分
1 | android { |
- 注意这里使用的是consumerProguardFiles
- proguardFiles配置在子模块里是不生效的
- getDefaultProguardFile只能在proguardFiles里使用
输出文件
- dump.txt 说明apk中所有类文件的内部结构
- mapping.txt 原始于混淆后的类、方法和字段名称的对应关系
- seeds.txt 未进行的混淆的类和成员
- usage.txt 从apk移除的代码
总结
打开官方写好的配置文件,可以看到里面已经包含了用到的基本配置。所以不管是主模块还是子模块的proguard-rule.pro里,只需要写上自己额外需要的配置,如gson数据类,以及引入的第三方依赖所要求的反混淆配置,即可。