Android / Gradle:为什么可以多次声明values.XML文件?

时间:2019-02-10 14:40:13

标签: android android-gradle

先决条件

我创建了一个使用以下树结构的应用程序(根据the documentation修改了应用程序级别的build.gradle-您可以在此问题的结尾找到这些更改):

  • 应用
    • src
      • 主要
        • my_theme
          • 套装
            • a_bundle
              • 可绘制文件夹,值文件夹,布局文件夹等
          • 全球
            • 可绘制文件夹,值文件夹,布局文件夹等

有几捆。所有值目录(每个分发包一个,在全局文件夹中一个)包含文件strings.XML我的应用程序确实可以正确编译并执行

但是,Android文档指出:

  

注意:如果两个或多个资源目录包含相同的资源文件,则在资源合并期间会发生错误。

https://developer.android.com/studio/write/add-resources#change_your_resource_directory

问题

因此,由于我使用相同的文件strings.xml,为什么没有显示错误? (当然,这些strings.xml文件的内容会根据它们所在的目录-捆绑包目录或全局目录而变化)

应用程序级build.gradle

为使其正常运行(例如,使Android Resolver能够解析符号),我添加了以下几行:

android {
    sourceSets {
        main {
            res.srcDirs = [
                'src/main/bestheme/global',
                'src/main/bestheme/bundles/a_bundle'
            ]
        }
    }
}

1 个答案:

答案 0 :(得分:2)

strings.xml(和任何values资源)在某种意义上是不同的,即资源标识符不是基于文件名而是实际上是在文件内部指定的。

资源合并发生在资源标识符级别。如果在同一源集级别上的资源标识符没有冲突,则合并可以正常进行。

文档注释对于其中资源ID源自文件名的资源类型有效。例如,布局或可绘制资源。