很多年不写作文,逻辑和语句可能有欠缺,望看到的读者见谅,下面接着记录我的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 } } }
运行效果:
其他的属性配置也可参照如此修改,也可增加自己定义的属性,执行gradlew assembleRelease就会个性化打包所有的渠道配置