我有一个依赖于两个Android库的Android应用程序项目。两个Android库指定具有相同资源ID的两个资源。在旧的Ant构建系统中,库的优先级是在project.properties文件中指定的,但Gradle构建系统中不使用此类文件。
尽管Resource Merging doc解释了构建类型,产品风格,应用程序项目和库项目之间冲突的资源的优先级和合并过程,但它没有解释当两个库(没有共同依赖项)时会发生什么)合并在一个项目中。在构建过程的合并过程中,Android Gradle插件如何确定哪个库的资源具有更高的优先级?
答案 0 :(得分:4)
无法为库的资源指定优先级。
您只能使用
在您的资料库中设置前缀Searchfor(charText, wp.getitem())
答案 1 :(得分:1)
嗯,看来Android开发人员文档终于为我们找到了答案。我是从https://developer.android.com/studio/projects/android-library#Considerations撤下的:
构建工具将库模块中的资源与从属应用程序模块中的资源合并。如果在两个模块中都定义了给定的资源ID,则会使用应用程序中的资源。
如果多个AAR库之间发生冲突,则将使用依赖列表中最先列出的库中的资源(朝着依赖关系块的顶部)。
为避免常见资源ID的资源冲突,请考虑使用模块唯一的(或在所有项目模块中唯一的)前缀或其他一致的命名方案。
我将相关段落加粗了。看起来依赖关系在Gradle依赖关系块中出现的顺序可能会影响构建过程!这是要小心的小事。
答案 2 :(得分:0)
来自构建过程中的resource merging部分:
优先顺序如下:
BuildType - >味道 - >主要 - >的依赖关系。
...
这意味着如果
src/main/res
有
res/layout/foo.xml
res/layout-land/foo.xml
和
src/debug/res
已
res/layout/foo.xml
然后合并的资源文件夹将包含默认的
的横向版本foo.xml
src/debug/res
,但来自src/main/res