Gradle buildConfigField: Syntax for arrays & maps?

Android gradle文档是关于buildConfigField的:

void buildConfigField(String type, String name, String value)

将新字段添加到生成的 BuildConfig 类。该字段生成如下:类型 name = value;

这意味着它们中的每一个都必须具有有效的Java内容。如果类型为 String,则该值应包含引号。

我找不到有关数组,数组列表或HashMap的buildConfigField值的语法的任何信息?由于它们被编译成java代码,通常一切都应该是可能的。

有没有人有一些例子或文档?


答案 1

对于数组

app.gradle

        buildConfigField "String[]", "URL_ARRAY",
        "{" +
        "\"http:someurl\"," +
        "\"http:someurl\"," +
        "\"http:someurl\"" +
        "}"

对于地图

        buildConfigField "java.util.Map<String, String>", "NAME_MAP", 
                 "new java.util.HashMap<String, " +
                 "String>() {{ put(\"name\", \"John\"); put(\"name1\",  \"John\"); put(\"name2\", " +
                "\"John\"); }}"

代码中的访问:

HashMap<String, String> name = (HashMap<String, String>) BuildConfig.NAME_MAP;

答案 2

恕我直言,使用字段的原因是将重要数据排除在代码之外 - 例如环境变量。buildConfig

另一个例子 - 静态数组 + gradle.properties(需要 Gradle 2.13 或更高版本):

gradle.properties:


nonNullStringArray=new String[]{ \n\
    \"foo\",\n\
    \"bar\"\n}

build.gradle:

buildConfigField "String[]", "nonNullStringArray", (project.findProperty("nonNullStringArray") ?: "new String[]{}")

buildConfigField "String[]", "nullableStringArray", (project.findProperty("nullableStringArray") ?: "null")



推荐