Android 开启minifyEnabled后发布的App无法找到库模块raw资源问题咨询
问题排查结论与修复方案
不是Android构建系统Bug
开启minifyEnabled true就丢失raw资源的现象,是Android构建流程资源压缩(Resource Shrinking) 特性的正常行为,并非系统缺陷。
问题根因
- release构建变体开启
minifyEnabled true代码混淆时,Android Gradle插件会默认同步开启shrinkResources true资源压缩能力,该能力会自动扫描全项目资源,判定无代码显式引用的资源会被直接从最终APK剔除,用于减小安装包体积。 - 你的raw资源存放在独立Library模块中,或代码中使用动态方式获取资源ID,都会导致资源压缩工具无法识别该raw资源的引用关系,误判为无用资源将其移除。
- 本地Android Studio使用签名配置构建安装正常,是因为本地构建默认使用debug变体,debug变体默认不会开启资源压缩逻辑,资源会完整保留。
推荐修复方案
优先选择配置资源保留规则,不会影响整体减包效果:
- 在主App模块的
res/raw目录下(目录不存在则手动创建)新建keep.xml文件 - 添加如下规则明确指定需要保留的raw资源:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@raw/替换为你的raw资源文件名" />
多个需保留资源用逗号分隔即可,示例:tools:keep="@raw/file1,@raw/file2"。
替代方案(不推荐)
无需资源压缩能力时,可在release构建配置中显式关闭该功能:
android { buildTypes { release { minifyEnabled true shrinkResources false // 显式关闭资源压缩 signingConfig signingConfigs.config // 其余原有配置保持不变 } } }
该方案会导致所有无用资源保留在APK中,会显著增加安装包体积。
内容的提问来源于stack exchange,提问作者M. Usman Khan
相关产品推荐
相关产品推荐

