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

启用R8配置后AAB的res目录资源混淆未生效问题求助

Android App Bundle(AAB)资源名称混淆问题解决方法

问题原因

APK构建时会直接对资源名称进行混淆打包,但AAB为适配Google Play动态交付的默认逻辑,默认保留原始资源名称——即使开启isShrinkResources = true,也不会自动触发资源名混淆。

解决步骤

  1. 添加AAPT资源混淆配置
    在模块级build.gradle的android块中新增aaptOptions配置,强制开启资源名称混淆:
android {
    // 其他原有配置...
    
    aaptOptions {
        cruncherEnabled = false // 可选,关闭资源压缩以避免干扰混淆逻辑
        // 指定资源混淆规则文件,与R8规则复用即可
        resourceProguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }

    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true
            isDebuggable = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"
            )
            signingConfig = signingConfigs.getByName("release")
            resValue("string", "app_name", "${project.extra["appName"]}")
        }
    }
}
  1. 清理ProGuard规则中的资源保留项
    检查proguard-rules.pro文件,确保没有添加强制保留资源名称的规则:
  • 避免-keep class com.yourpackage.** { *; }这类可能间接保留资源引用的规则
  • 如果需要保留特定资源(如app_name),可通过-keepresourcefiles strings/app_name.xml精准配置,不要全局保留资源
  1. 正确验证AAB的资源混淆结果
    构建AAB后,不要直接解压查看根目录的res文件夹(AAB原始结构会保留未混淆的资源文件用于编译),需通过Android Studio的Build > Analyze APK/AAB工具打开生成的AAB,查看base/resources.arsc中的资源名称是否已被混淆。

注意事项

开启AAB资源混淆后,不会影响Google Play的动态交付功能,混淆后的资源仍能正常被Play商店拆分和分发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 21:22:07