是否可以在 Gradle 中定义 Android 字符串数组资源?

2023-11-27

在 Android 版 Gradle 中,我试图生成与此字符串数组资源等效的内容......

<resources>
    <string-array name="url_array">
       <item>http://www.url1.com</item>
       <item>http://www.url2.com</item>
       <item>http://www.url3.com</item>
    </string-array>
</resources>

...在我的应用程序的 build.gradle 配置文件中。我不想在 res/values/arrays.xml 中对这些值进行硬编码,因为我希望能够为不同的构建变体(开发与产品)生成不同的数组内容。我知道有解决方法,但如果可能的话,这将是最干净的解决方案。

我已经尝试过使用“字符串数组”或“数组”的 resValue 类型的摘录,但我收到一条错误消息,指出 resValue() 不存在。当然,“string”的 resValue 类型参数适用于单个字符串,但我需要生成一个字符串数组资源。

resValue "string-array", "url_array",
   ["http://www.url1.com",
    "http://www.url2.com",
    "http://www.url3.com"]

Gradle for Android 文档没有帮助。它列出了这个方法...

void resValue(字符串类型、字符串名称、字符串值)

...但它并不指示类型参数的有效值。它只是有一个链接,上面写着“查看资源类型但这只是指向资源类型的常规 Android 文档,并没有描述如何在 Gradle Android DSL 中表达它们。

有人有任何指导吗?我在网上查遍了,但没有找到任何东西。


这是我在指导下得到的最接近的结果@schwiz。我仍然找不到使用 resValue 执行此操作的方法,但可以定义一个构建配置字段可以实现相同的目标:

buildConfigField "String[]", "URL_ARRAY",
        "{" +
                "\"http://www.url1.com\"," +
                "\"http://www.url2.com\"," +
                "\"http://www.url3.com\"" +
                "}"

这使您可以通过 BuildConfig 访问该数组:

public static final String[] URL_ARRAY = {
   "http://www.url1.com",
   "http://www.url2.com",
   "http://www.url3.com"}; // whitespace added for clarity

然后,您可以覆盖每个 buildType 的 buildConfigField 值。因此,除非您特别需要将其放在 R.array.* 中,否则这将满足您的需求。现在将其保持打开状态,以防其他人知道如何使用 resValue 执行此操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在 Gradle 中定义 Android 字符串数组资源? 的相关文章

随机推荐