res/xml 下的文件会被 gradle 合并吗?

Do files under res/xml get merged by gradle?

我有一个文件,res/xml/analytics_tracker.xml,用于存储我的 google 分析变量。我想在发布版本和调试版本中使用不同的变量。

所以我有 main/xml/analytics_tracker.xml(可能有 6 个 xml-元素)和 release/xml/analytics_tracker.xml(1 个 xml-元素)。

我通过 apktool 反编译了我的发布 apk 并查看了 analytics_tracker.xml 文件。它只有 release xml 文件中的 1 个元素。

它不应该将两个 xml 文件合并为一个吗?

通常如果你想要不同的调试和发布版本的文件,你会在单独的 debug/.... 文件夹中有一个调试版本,在 main/.... 文件夹中有一个发布版本,至少这个在我的项目中总是如此。如果它不能为构建类型找到一个单独的文件夹,它需要 main/... 版本。

在你的情况下,我猜它找到了你的 analytics_tracker 文件的发布/.... 版本并且只使用了它。

在这里您可以找到 official doc 关于与 gradle 进行资源合并的 official doc

您可以找到问题的原因。

The priority order is the following:

BuildType -> Flavor -> main -> Dependencies.

This means that if a resource is declared in both the Build Type and in >main, the one from Build Type will be selected.