android gradle文档说明了buildConfigField:
void buildConfigField(String type,String name,String value)
向生成的BuildConfig类添加一个新字段。该字段生成为:type name = value;
这意味着每个必须具有有效的Java内容。如果类型是String,则该值应包含引号。
我找不到有关Arrays,Arraylist或HashMap的buildConfigField值语法的任何信息?由于它们被编译成java代码,通常一切都应该是可能的。
有没有人有一些例子或文件?
答案 0 :(得分:23)
对于数组
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;
答案 1 :(得分: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")
答案 2 :(得分:0)
好的,我现在明白了。参数在java中以1:1的形式翻译,这意味着你需要在gradle中编写java代码并正确转义。
对于HashSet:
buildConfigField "java.util.Set<String>", "MY_SET", "new java.util.HashSet<String>() {{ add(\"a\"); }};"
答案 3 :(得分:0)
这里还有一个例子
具有环境的成绩文件:
ext {
// Environments list
apiUrl = [
prod : "https://website.com",
preprod : "https://preprod.website.com"
]
}
Gradle Android文件:
private static String getApiUrlHashMapAsString(apiUrlMap) {
def hashMap = "new java.util.HashMap<String, String>()" + "{" + "{ "
apiUrlMap.each { k, v -> hashMap += "put(\"${k}\"," + "\"${v}\"" + ");" }
return hashMap + "}" + "}"
}
android {
defaultConfig {
buildConfigField "java.util.Map<String, String>", "API_URLS", getApiUrlHashMapAsString(apiUrl)
}
}
在您的代码中:
BuildConfig.API_URLS
答案 4 :(得分:0)
数组的便捷方法(不转义):
def arrayAsString(String ... args) {
StringBuilder builder = new StringBuilder();
builder.append("{");
if(args.length > 0) {
for (String arg : args) {
builder.append('"')
builder.append(arg);
builder.append('"')
builder.append(", ")
}
builder.setLength(builder.length() - 2)
}
builder.append("}");
return builder.toString();
}