重建 Android Instant App 后,使用功能模块中基本模块中定义的颜色失败
Using colors defined in base module from feature module fails after rebuilding the Android Instant App
我的 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
指向那些颜色值。
我通过在 query
模块中添加另一个 colors.xml
文件并从中引用 base
颜色来解决这个问题。它运作良好。您可以在 this commit.
中看到差异
<color name="query_location_success_text">@android:color/white</color>
<color name="query_location_fail_text">@color/accent</color>
现在它可以工作,但我不确定为什么。这是正确的方法吗?我的问题是 base
模块中的资源不应该可以从功能模块访问吗?
版本:
Android target/compile SDK: 26
Kotlin: 1.1.50
Instant Apps: 1.1.0
这是我的一个开源项目,你可以看到整个项目here。
谢谢
是的,当您使用完全限定名称 (package_name.R.resource_name) 引用基本模块中的资源时,可以从功能模块访问它。
基本模块和子模块具有不同的包名(您的基本功能包名称是 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 -> net.epictimes.uvindex.R.color.accent
我的 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
指向那些颜色值。
我通过在 query
模块中添加另一个 colors.xml
文件并从中引用 base
颜色来解决这个问题。它运作良好。您可以在 this commit.
<color name="query_location_success_text">@android:color/white</color>
<color name="query_location_fail_text">@color/accent</color>
现在它可以工作,但我不确定为什么。这是正确的方法吗?我的问题是 base
模块中的资源不应该可以从功能模块访问吗?
版本:
Android target/compile SDK: 26
Kotlin: 1.1.50
Instant Apps: 1.1.0
这是我的一个开源项目,你可以看到整个项目here。
谢谢
是的,当您使用完全限定名称 (package_name.R.resource_name) 引用基本模块中的资源时,可以从功能模块访问它。
基本模块和子模块具有不同的包名(您的基本功能包名称是 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 -> net.epictimes.uvindex.R.color.accent