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

Android Gradle Plugin 8.1.1升级后R类导入冲突问题求助

AGP 8.1.1中R类引用行为变更的原因及解决方案

在AGP 7.4.2及更早版本中,构建工具会自动将依赖库(比如Material Components)的R类资源合并到你的应用R类中,所以你可以通过自己应用的com.sampleapp.R直接访问依赖库的资源(比如R.attr.colorOnSurface实际指向Material库的资源)。

升级到AGP 8.x(包括8.1.1)后,这个默认行为被调整了:构建工具不再自动合并依赖库的R类到应用R类中,目的是减少资源命名冲突,提升编译效率和R类的清晰度。这就是为什么你必须显式导入Material库的R类并使用别名(或者全限定名)来访问它的资源。

可行的解决方案

  1. 别名导入依赖库R类(你已经在使用的方案):
    import com.google.android.material.R as MaterialR 
    import com.sampleapp.R
    
    MaterialR.attr.colorOnSurface // 明确指向Material库的资源
    R.dimen.spacing_xsmall // 指向自己应用的资源
    
  2. 使用全限定名直接访问:
    import com.sampleapp.R
    
    com.google.android.material.R.attr.colorOnSurface
    R.dimen.spacing_xsmall
    

关于恢复旧行为(不推荐)

如果你暂时需要兼容旧代码,可以尝试在模块的build.gradle.kts(或build.gradle)中添加以下配置,但这不符合AGP 8.x的演进方向,后续版本可能不再支持:

android {
    androidResources {
        // 允许依赖库的R类合并到应用R类中
        generateRClassForLibraries = false
    }
}

这个变更属于AGP 8.x对资源处理的底层优化,可能没有在发布说明的显眼位置单独列出,但属于构建工具对R类管理的严格化调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:52:38