我的Instant App项目中有一个base
模块和一个名为query
模块的功能模块。
我的QueryActivity
内部query
模块使用base
模块中的颜色。
@ColorInt
val textColor: Int = when (resultCode) {
FetchAddressIntentService.RESULT_SUCCESS -> android.R.color.white
FetchAddressIntentService.RESULT_FAILURE -> R.color.accent // this color is inside the base module
else -> R.color.accent // this color is inside the base module
}
如果我尝试run
项目,它可以正常工作而没有任何问题。但如果我rebuild
项目,它会给我以下错误:
../net/epictimes/uvindex/query/QueryActivity.kt
Error:(133, 63) Unresolved reference: color
Error:(134, 27) Unresolved reference: color
指向那些颜色值。
我通过在colors.xml
模块中添加另一个query
文件并从中引用base
颜色来解决这个问题。它工作正常。您可以在this commit中看到差异。
<color name="query_location_success_text">@android:color/white</color>
<color name="query_location_fail_text">@color/accent</color>
现在它有效,但我不确定为什么。这是正确的方法吗?我的问题不应该是可从功能模块访问的base
模块中的资源吗?
版本:
Android目标/编译SDK:26
Kotlin:1.1.50
即时应用:1.1.0
这是我的一个开源项目,你可以看到整个项目here。
谢谢
答案 0 :(得分:9)
是的,当您使用完全限定名称(package_name.R.resource_name)引用基本模块中的资源时,可以从功能模块访问该资源。
Base和子模块具有不同的包名称(您的基本功能包名称为net.epictimes.uvindex
,并且您的功能模块包名称为net.epictimes.uvindex.query
)。
每个包都包含自己的资源集,并且在编译期间它们的资源ID收集在单独的R包中:
net.epictimes.uvindex.R
- 适用于您的基本功能模块net.epictimes.uvindex.query.R
- 适用于您的功能模块要从“查询”功能模块访问基本功能的“重音”颜色资源,请使用net.epictimes.uvindex.R.color.accent
标识符:
FetchAddressIntentService.RESULT_FAILURE - &gt; net.epictimes.uvindex.R.color.accent