You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android App Bundle(AAB)中实现资源文件混淆?

AAB格式下资源文件混淆实现方案

minifyEnabled = true触发的原生资源混淆仅对APK构建生效,AAB的构建流程与分发逻辑和APK不同,原生AGP默认不会在AAB本地构建阶段应用资源混淆规则,因此原配置不生效。

实现方案

方案一:使用AndResGuard实现本地AAB资源混淆

这是目前兼容性最好、可控性最高的方案,步骤如下:

  • 第一步:在项目根目录build.gradle中添加插件依赖
buildscript {
    dependencies {
        // 替换为最新稳定版本即可
        classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.21'
    }
}
  • 第二步:在App模块build.gradle开头引入插件
apply plugin: 'AndResGuard'
  • 第三步:在App模块build.gradle中添加混淆配置,核心是开启AAB支持
andResGuard {
    use7zip = true
    useSign = true
    // 开启AAB资源混淆的核心开关
    enableAab = true
    // 配置资源白名单:所有通过字符串动态拼接引用的资源都需要加入此处,避免运行时找不到资源
    whiteList = [
        "R.mipmap.ic_launcher*",
        "R.drawable.notification_icon",
        // 按需添加其他需要保留原名的资源
    ]
}
  • 第四步:构建时执行resguardRelease Gradle任务,输出的AAB默认路径为app/build/outputs/apk/release/AndResGuard_${appName}/,已经完成全量资源混淆。

方案二:AGP 7.0+ 原生AAB资源混淆

如果你的项目AGP版本在7.0及以上,可以用官方原生配置:

  • 在App模块build.gradle的release构建类型中添加如下配置:
android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true
            androidResources {
                // 开启资源名混淆
                enableResourceObfuscation = true
            }
        }
    }
}

注意:该方案的资源混淆不会在本地构建的AAB中直接生效,Google Play在收到AAB后,为不同设备生成拆分APK时才会应用混淆规则,因此本地解压AAB仍然会看到原始资源名,属于正常逻辑。

通用注意事项

  • 所有通过getIdentifier()等动态方法引用的资源,必须加入混淆白名单,否则会出现运行时资源找不到的崩溃。
  • 资源混淆生成的mapping文件需要单独存档,后续排查线上问题时可以通过映射文件还原原始资源名。

内容的提问来源于stack exchange,提问作者CohenKosherStore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 13:30:03