oynix

于无声处听惊雷,于无色处见繁花

Android混淆配置

记录一下混淆配置。

混淆,其实就是给项目里的类、变量、方法等,换个名字,以此来降低可读性,同时还可以使包体变小。

单模块项目

这个相对简单,只需要配置build.gradle文件

1
2
3
4
5
6
7
8
9
10
11
android {
buildTypes {
release {
minifyEnabled true // 打开混淆开关,只有为true的时候才会混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// 还可以再加两个配置来进一步减小包体
zipAlignEnabled true // 对齐
shrinkResources true // 移除
}
}
}
  • 只有打开minifyEnabled开关才会混淆
  • proguardFiles用来指定混淆配置文件,参数里的文件都会生效
  • proguard-android-optimize.txt在: ~/Android/sdk/tools/proguard/目录下
  • 除了上面这个文件,还有其他几个官方写好的默认配置
  • proguard-rule.pro在build.gradle同目录下,自己额外的混淆配置写在这个文件里

多模块项目

所有混淆配置写在一起,便于修改和管理,但是当不再依赖其中某个模块而将其移除后,这时混淆文件中对应的配置就是冗余的。

所以,一般都是各自模块的混淆配置写在所在的模块里。主模块开启混淆,就会给所有模块混淆。

主模块的配置依然同上,子模块的配置如下:

1
2
3
4
5
6
7
android {
buildTypes {
release {
consumerProguardFiles 'proguard-rules.pro'
}
}
}

如果不关心编译类型的话,可以直接写在默认配置块,使用AndroidStudio创建项目时,它已经帮忙写上了,用consumer-rules.pro文件名来区分

1
2
3
4
5
android {
defaultConfig {
consumerProguardFiles "consumer-rules.pro"
}
}
  • 注意这里使用的是consumerProguardFiles
  • proguardFiles配置在子模块里是不生效的
  • getDefaultProguardFile只能在proguardFiles里使用

输出文件

  • dump.txt 说明apk中所有类文件的内部结构
  • mapping.txt 原始于混淆后的类、方法和字段名称的对应关系
  • seeds.txt 未进行的混淆的类和成员
  • usage.txt 从apk移除的代码

总结

打开官方写好的配置文件,可以看到里面已经包含了用到的基本配置。所以不管是主模块还是子模块的proguard-rule.pro里,只需要写上自己额外需要的配置,如gson数据类,以及引入的第三方依赖所要求的反混淆配置,即可。

------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2021/09/98812d2d5e25/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道