应用com.android.library插件后R资源引用报错是什么原因?
问题原因
- 包名冲突导致R类引用指向错误:
你使用的Android Studio Arctic Fox对应AGP版本在处理未显式配置namespace的Android库模块时,启用com.android.library插件后会默认生成与主app模块同包名的R类。你的app模块applicationId为com.foo.networkdiagnostics,MainActivity所在包也是该路径,此时代码中引用的R会优先匹配library模块生成的R类。但你的library模块是空模块,没有任何布局、id等资源,生成的R类中不存在layout.activity_main、id.sample_text这类常量,因此会抛出未找到引用的报错。 - 当你注释掉library模块的
com.android.library插件配置后,该模块不再被识别为Android库模块,不会生成同名R类,此时MainActivity中引用的R会自动指向app模块自身生成的、包含所有资源的R类,报错自然消失。
解决方案
- 给library模块配置独立的namespace
在:library模块的build.gradle中补充完整配置,指定和app模块不同的namespace即可解决冲突:
apply plugin: 'com.android.library' apply plugin: 'kotlin-android' android { // 设置和app模块不同的命名空间 namespace "com.foo.networkdiagnostics.library" compileSdk 31 defaultConfig { minSdk 26 targetSdk 31 } }
- 若暂时不需要使用library模块的Android能力,保持插件配置注释即可。
- 若需要同时引用两个模块的资源,在代码中显式区分导入即可:app模块资源用
import com.foo.networkdiagnostics.R,library模块资源用import 你的library包名.R。
内容的提问来源于stack exchange,提问作者Darrell Brogdon
相关产品推荐
相关产品推荐

