Gradle 8升级后R文件合并失效?跨模块资源需精准引用
Gradle 8 下必须精准引用R文件的原因说明
这是Gradle 8(搭配Android Gradle Plugin 8.0+)的正常默认行为,不是遗漏了迁移步骤,核心原因是AGP 8.0默认开启了严格的资源隔离与命名空间管控:
资源合并规则变更:AGP 8.0之前,依赖模块的资源会自动合并到主模块的R文件中,所以你能通过
com.my.package.main.R访问core模块的资源;但AGP 8.0之后,每个模块的资源只会生成在自身命名空间的R文件里,主模块不再自动合并依赖模块的资源到自身R中,必须直接引用依赖模块的完整R路径(比如com.my.package.core.R)。第三方库资源引用逻辑一致:
com.google.android.material.R和androidx.appcompat的属性需要精准引用,也是同样的道理——AGP 8.0不再允许通过主模块R间接访问这些库的资源,必须直接指定对应库的命名空间R文件。
如果确实需要恢复旧的资源合并行为(不推荐,会增加资源冲突风险),可以在主模块的build.gradle(或build.gradle.kts)中添加以下配置:
android { namespace "com.my.package.main" // 关闭严格资源隔离,恢复依赖模块资源合并到主模块R的行为 resourcePrefix "" dependenciesInfo { includeInApk true includeInBundle true } }
不过官方强烈建议保持默认的严格资源隔离,这能避免不同模块、第三方库之间的资源命名冲突,对大型项目的架构长期维护更友好。
内容的提问来源于stack exchange,提问作者prom85
相关产品推荐
相关产品推荐

