Google 包现在都要求上传 AAB 包(App bunlde),那么就会有混淆 res 资源的需求
我们以前出 apk 包用的是微信资源混淆工具
AabResGuard 资源混淆插件配置
apply plugin: "com.bytedance.android.aabResGuard"
aabResGuard {
// 用于增量混淆的 mapping 文件
// mappingFile = file("aab-res-mapping.txt").toPath()
enableObfuscate = true
// 过滤字符串
enableFilterStrings = false
// 过滤文案列表路径 默认在mapping同目录查找
unusedStringPath = file("unused.txt").toPath()
// 混淆后的文件名称,必须以 `.aab` 结尾
obfuscatedBundleFileName = "aab-res-obs-output.aab"
// 是否允许去除重复资源
mergeDuplicatedRes = true
// 是否允许过滤文件
enableFilterFiles = true
// 文件过滤规则
filterList = [
"*/arm64-v8a/*",
"META-INF/*"
]
// 保留en,en-xx,zh,zh-xx等语言,其余均删除
// languageWhiteList = ["en", "zh"]
// 白名单规则
whiteList = [
"*.R.raw.*",
"*.R.drawable.icon"
]
}
坑
这是官网给的例子,只举例的配置 资源 Id
白名单
whiteList = [
"*.R.raw.*",
"*.R.drawable.icon"
]
但是没有说如何配置 资源文件
白名单
正确配置
我们这里重点关注 whiteList
白名单配置
1、资源 Id 白名单配置
- 正确配置:
"*.R.layout.activity_union*"
- 不同点:资源 Id 所在文件是 aab 包的
resource.pb
文件中
2、资源文件白名单配置
- 正确配置:
"*/layout/activity_union*"
- 不同点:布局资源文件所在位置是 aab 包的
res
目录下 - 资源文件种类:包括 res 目录下的所有子目录资源
- anim
- animator
- color
- drawable
- interpolator
- layout
- xml
- … …
3、资源 Id 白名单配置的特殊情况
先前我们出 apk 包,使用微信的资源混淆工具 AndResGuard 已经积累了大量的白名单配置
现在要全部迁移到 AAB 白名单配置
有这一种白名单:当时使用的是 id
,现在我们已经不记得该资源类型是什么了
"*.R.id.thinkup_*",
我们知道,这有很多种资源类型:
"*.R.array.*"
"*.R.attr.*"
"*.R.bool.*"
"*.R.color.*"
"*.R.dimen.*"
"*.R.style.*"
"*.R.string.*"
"*.R.id.*"
"*.R.integer.*"
"*.R.plural.*"
"*.R.plurals.*"
"*.R.item.*"
为了适配这种情况,我们需要使用 *
正则匹配
把 "*.R.id.thinkup_*"
改成 "*.R.*.thinkup_*"