使用Android Studio可以很方便地一次编译多个渠道包,具体步骤如下所述。
    (1)在AndroidManifest.xml文件中配置CHANNEL字符串。
    <meta-data
    android:name="UMENG CHANNEL"
    android:value="${CHANNEL VALUE}"
    tools:replace="android:value"/>
    (2)在项目中增加各渠道文件夹的相关文件。如不同渠道包连接的服务器地址不同,可以做如图25-1所示的配置。
    每个渠道包的strings.xm1文件中包含对应的服务器地址。
    <resources>
    <string name="base url">http://www.xxx.com</string
    |</resources>
    (3)在build.gradle文件中添加如下代码。
    |productFlavors{
    //编译3个渠道包
    demo3{
    demo4{
    demo5{
    //设置每个渠道包中的渠道名称
    productFlavors.all{ flavor->
    flavor.manifestPlaceholders=[CHANNEL VALUE:n
    |ame]
    //把代码的提交次数+渠道名称作为版本号
    applicationVariants.all { variant->
    if(variant.buildType.name.equals('release'))
    def gitVersion=gitVersionCode()
    variant.mergedFlavor.versionCode=gitVersio
    variant.mergedFlavor.versionName=gitVersio
    |n.tostring()+variant.mergedFlavor.manifestPlaceholder
    s.CHANNEL VALUE
    //按APK名+版本号+编译时间+渠道名称的方式修改编译的APK文件名称
    applicationVariants.all { variant->
    if(variant.buildType.name.equals('release'))
    variant.outputs.each { output->
    def outputFile=output.outputFile
    if(outputFile!=null &&
    outputFile.name.endsWith('release.apk)){
    def fileName=
    "Xxx V${variant.mergedFlavor.vers
    ionName}${releaseTime()}${va
    riant.productFlavors[0].name}.a
    |pk”
    output.outputFile=new File(outputFile.pa
    //删除xxx-unaligned.apk这类没有字节对齐的APK|文件
    if(output.zipAlign!=null){
    output.zipAlign.doLast{
    output.zipAlign.inputFile.delete(
    }
    }
    //获取git服务器上的代码提交次数
    def gitVersionCode(){
    def cmd='git rev-list HEAD--count'
    cmd.execute().text.trim().toInteger()
    //得到当前时间的字符串,不能用UTC时区,要用上海所在的时区(也就是北京时间)
    def releaseTime(){
    return new Date().format("yyyyMMddHImmss",
    TimeZone.getTimeZone("Asia/Shanghai"))