gradle神器~Android多渠道配置管理(2)

      很多年不写作文,逻辑和语句可能有欠缺,望看到的读者见谅,下面接着记录我的gradle之坑。

本篇是对第一遍的补充优化,老路子先来说说背景。

背景:

          如果只有五六个的渠道平台直接在productFlavors里面添加就能完成,如果是几百个甚至几千个平台呢!!

难道也是一个个的直接添加到productFlavors里面吗?有人会说就是简简单单的一行Ctrl+c、Ctrl+v就能搞定,一千个渠道不就是一千行代码嘛,如果真的这么做了,恭喜您向初级工程师十万行代码的积累量前进的很大一步。有没有优化方案呢?答案是肯定的。

解决方案:

         1. 创建一个渠道列表文件,由于是讲解使用知识简单的示范,每行代表一个平台渠道,如果是复杂的可以使用json文件格式,稍后会简单的说明,例如:channel.txt

_360
google
nihao
hello

路径示例:

gradle神器~Android多渠道配置管理(2)_第1张图片

         2. 在productFlavors中读取到channel.txt渠道信息,配置渠道名称

productFlavors {

   file("${projectDir.path}/channel.txt")//app目录下的channel.txt文件
           .readLines()//按行读取所有的行
           .each { line_name -> //遍历每行
       "$line_name"{ //配置每个渠道信息
           manifestPlaceholders = [CHANNEL_NAME: name]
       }

   }
}

     如此就会在gradle的配置阶段更新您当前的渠道配置信息,效果如下:

gradle神器~Android多渠道配置管理(2)_第2张图片

为什么要写配置文件简要说明:

        首先,看看每个渠道都有哪些具体的默认属性信息,就以上面的hello渠道为例:

productFlavors {
    hello{
        println(it)
    }
}

这段代码会输出什么呢?来看输出结果:

gradle神器~Android多渠道配置管理(2)_第3张图片

这代表了什么?红色框内的是不是很熟悉?首先,当创建一个渠道的时候每个渠道都会默认拥有这些属性,如果当前渠道没有单独配置这些信息,就会读取默认的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
        }

    }
}

运行效果:

  gradle神器~Android多渠道配置管理(2)_第4张图片gradle神器~Android多渠道配置管理(2)_第5张图片

其他的属性配置也可参照如此修改,也可增加自己定义的属性,执行gradlew assembleRelease就会个性化打包所有的渠道配置

版权声明:本文为博主原创文章,转载请标明出处。

你可能感兴趣的:(gradle神器~Android多渠道配置管理(2))