重新构建Android即时应用程序后,使用功能模块中基本模块中定义的颜色失败
在我的即时应用程序项目中,我有一个重新构建Android即时应用程序后,使用功能模块中基本模块中定义的颜色失败,android,kotlin,android-resources,android-instant-apps,Android,Kotlin,Android Resources,Android Instant Apps,在我的即时应用程序项目中,我有一个base模块和一个名为query模块的功能模块 MyQueryActivityinsidequery模块使用base模块中的颜色 : 如果我尝试运行该项目,它工作正常,没有任何问题。但是如果我重建项目,它会给我以下错误: ../net/epictimes/uvindex/query/QueryActivity.kt Error:(133, 63) Unresolved reference: color Error:(134, 27) Unresolved ref
base
模块和一个名为query
模块的功能模块
MyQueryActivity
insidequery
模块使用base
模块中的颜色
:
如果我尝试运行该项目
,它工作正常,没有任何问题。但是如果我重建项目
,它会给我以下错误:
../net/epictimes/uvindex/query/QueryActivity.kt
Error:(133, 63) Unresolved reference: color
Error:(134, 27) Unresolved reference: color
指向那些颜色值
我通过在query
模块中添加另一个colors.xml
文件并从中引用base
颜色解决了这个问题。它工作得很好。你可以从中看到差异
@android:color/white
@颜色/口音
现在它可以工作了,但我不知道为什么。这样做对吗?我的问题是base
模块中的资源不应该可以从功能模块访问吗
版本:
Android目标/编译SDK:26
科特林:1.1.50
即时应用:1.1.0
这是我的一个开源项目,你可以看到整个项目
谢谢是的,当您使用完全限定名(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\u失败->net.epictimes.uvindex.R.color.accent
即时应用程序的资源管理目前完全有缺陷。目前这是一个不可行的。。。Lint并没有抱怨错误使用的R.x语句。在许多情况下,资源只能从基本模块获得。如果应该从基本模块获取包含,那么在功能模块内部使用将破坏一切。我们还没有谈到使用proguard时的完全破坏,因为它无法检测模块之间的交叉依赖关系。你是对的。每个模块都生成自己的R.java,这里的问题是我引用了错误的R文件。谢谢你的帮助。但我认为奇怪的是,“run”工作正常,但“rebuild”由于未解决的引用错误而失败。
../net/epictimes/uvindex/query/QueryActivity.kt
Error:(133, 63) Unresolved reference: color
Error:(134, 27) Unresolved reference: color
<color name="query_location_success_text">@android:color/white</color>
<color name="query_location_fail_text">@color/accent</color>