很多年不写作文,逻辑和语句可能有欠缺,望看到的读者见谅,下面接着记录我的gradle之坑。
本篇是对第一遍的补充优化,老路子先来说说背景。
背景:
如果只有五六个的渠道平台直接在productFlavors里面添加就能完成,如果是几百个甚至几千个平台呢!!
难道也是一个个的直接添加到productFlavors里面吗?有人会说就是简简单单的一行Ctrl+c、Ctrl+v就能搞定,一千个渠道不就是一千行代码嘛,如果真的这么做了,恭喜您向初级工程师十万行代码的积累量前进的很大一步。有没有优化方案呢?答案是肯定的。
解决方案:
1. 创建一个渠道列表文件,由于是讲解使用知识简单的示范,每行代表一个平台渠道,如果是复杂的可以使用json文件格式,稍后会简单的说明,例如:channel.txt
_360 google nihao hello
路径示例:
2. 在productFlavors中读取到channel.txt渠道信息,配置渠道名称
productFlavors {
file("${projectDir.path}/channel.txt")//app目录下的channel.txt文件
.readLines()//按行读取所有的行
.each { line_name -> //遍历每行
"$line_name"{ //配置每个渠道信息
manifestPlaceholders = [CHANNEL_NAME: name]
}
}
}
如此就会在gradle的配置阶段更新您当前的渠道配置信息,效果如下:
为什么要写配置文件简要说明:
首先,看看每个渠道都有哪些具体的默认属性信息,就以上面的hello渠道为例:
productFlavors {
hello{
println(it)
}
}
这段代码会输出什么呢?来看输出结果:
这代表了什么?红色框内的是不是很熟悉?首先,当创建一个渠道的时候每个渠道都会默认拥有这些属性,如果当前渠道没有单独配置这些信息,就会读取默认的defaltConfig的信息,这里就不过多的说明了,网上有很多这样的说明,我就演示一下怎么给每个渠道设置自己想要的信息呢,其实很简单我就利用上面说到的json文件做示例。
json文件:
[
{
"channel_name" : "hello",
"versionCode" : 1,
"versionName" : "1.0"
},
{
"channel_name" : "nihao",
"versionCode" : 2,
"versionName" : "2.0"
}
]
对应的读取代码:
productFlavors {
def json = file("${projectDir.path}/channel.json").getText("UTF-8")//读取app目录下的channel.json文件内容
def flavors = new JsonSlurper().parseText(json) //转换成Jsons数组对象
flavors.each { flavor ->
"${flavor.channel_name}"{//渠道名称,对应文件中的channel_name
versionCode flavor.versionCode //渠道版本号,对应文件中的versionCode
versionName flavor.versionName //渠道版本名称,对应文件中的versionName
}
}
}
运行效果:
版权声明:本文为博主原创文章,转载请标明出处。