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

Dev*_*ere 9 java android gradle build.gradle android-gradle-plugin

在Gradle for Android中,我正在尝试生成相应的字符串数组资源...

<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>
Run Code Online (Sandbox Code Playgroud)

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

我已经尝试过类似下面摘录的resValue类型的"string-array"或"array",但是我得到一个错误,说resValue()不存在.当然,resRalue类型的"string"参数适用于单个字符串,但我需要生成一个字符串数组资源.

resValue "string-array", "url_array",
   ["http://www.url1.com",
    "http://www.url2.com",
    "http://www.url3.com"]
Run Code Online (Sandbox Code Playgroud)

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

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

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

有没有人有任何指导?我在网上看了一遍,但没找到任何东西.

Dev*_*ere 13

@schwiz的指导下,这是我最接近的.我仍然无法使用resValue找到一种方法,但是可以定义一个可以实现相同目标的buildConfigField:

buildConfigField "String[]", "URL_ARRAY",
        "{" +
                "\"http://www.url1.com\"," +
                "\"http://www.url2.com\"," +
                "\"http://www.url3.com\"" +
                "}"
Run Code Online (Sandbox Code Playgroud)

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

public static final String[] URL_ARRAY = {
   "http://www.url1.com",
   "http://www.url2.com",
   "http://www.url3.com"}; // whitespace added for clarity
Run Code Online (Sandbox Code Playgroud)

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