【发布时间】:2016-09-24 14:46:15
【问题描述】:
我有一个特殊情况,我需要在使用 Jenkins 构建时覆盖谷歌地图键字符串变量。我已经设置了一个这样的特殊结构:
- 调试
- 资源
- 值
- google_maps_api.xml
- 主要
- 资源
- 值
- google_maps_api.xml
因此,在 main res 文件中,我放置了发布 API 密钥,在 debug res 文件中,我放置了调试 API 密钥(对于我正在工作的机器on - 为 Android 的 debug.keystore 生成)。
在构建 gradle 文件中,我有这个基本逻辑,用于根据 Jenkins 环境中的设置创建字符串资源:
String googleMapApiKey = System.env.MAP_API_KEY;
...
android {
...
buildTypes {
...
debug {
if (null != googleMapApiKey && !googleMapApiKey.equals("null")) {
resValue "string", "google_maps_key", googleMapApiKey
}
}
...
}
...
}
xml 文件包含以下内容:
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">
MY_DEBUG_API_KEY
</string>
我知道问题出在字符串资源的保留标志上,但如果删除它,则有可能会搞砸并丢失该字符串资源。 有没有办法可以替换实际字符串资源的值,而不仅仅是在构建 gradle 文件中创建一个新的?
我只是在想,当我使用 Jenkins 环境中的值时,也可以排除该文件,但我不知道它是否适用于 android gradle 系统。有谁知道这是否可行且更重要,如何?
LE:
看来我不得不将 main 文件夹中的 res 文件移动到 release 文件夹中。因此我现在有以下结构:
- 调试
- 资源
- 值
- google_maps_api.xml
- 发布
- 资源
- 值
- google_maps_api.xml
目前,它似乎是这样工作的。
LLE: 上面的方法不起作用,我很快就得出了结论。似乎仍然使用 xml 文件中的值,即使我在 gradle 脚本中声明了相同(至少作为名称)。
【问题讨论】:
标签: android string gradle replace resources