Gradle多渠道打包

  App打包上传到各大应用市场

Posted by MrCodeSniper on July 24, 2017

前言

今天新项目上架,在gradle打包上传到各大APP市场后,因为上传的市场太多 需要构建多渠道自动化打包

解决

我们在项目中经常会引入一些统计sdk 需要为不同的渠道包修改渠道信息 便于统计

可以在配置清单中修改为自定义值,这里以友盟为例

<meta-data
    android:name="UMENG_CHANNEL"
    android:value="${UMENG_CHANNEL_VALUE}" />

在app下build.gradle设置多渠道

android3.0改版后需要为flavor设置dimension

flavorDimensions "default"
//渠道配置
productFlavors {
        web {}
        baidu {}
        c360 {}
        qq {}
        oppo {}
        vivo {}
        huawei {}
        mi {}
        meizu {}
        lenovo {}
        leshi {}
        sogou {}
        wandoujia {}
        samsung {}
    }
    //渠道遍历将name替换为配置清单的${UMENG_CHANNEL_VALUE}
productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [CHANNEL_VALUE: name, JPUSH_CHANNEL: name,UMENG_CHANNEL_VALUE: name]
}

//自定义APK名称,多渠道打包
    android.applicationVariants.all { variant ->
        variant.outputs.all { output ->
            variant.productFlavors.each { flavor ->
                def project = "cat"
                def separator = "_"
                def buildType = variant.variantData.variantConfiguration.buildType.name
                def versionName = variant.versionName
                def versionCode = variant.versionCode
                def date = new Date()
                def formattedDate = date.format('yyyyMMdd')
                //测试版本名
                def apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + ".apk"
                if (buildType == "release") {//发布版本名
                    apkName = project + separator + "v" + versionName + separator + versionCode + separator + buildType + separator + flavor.name + separator + formattedDate + ".apk"
                }
                output.outputFileName = apkName
            }
        }
    }

如此 打全部发布包 gradle assembleRelease 打个别发布包 gradle assembleWandoujiaRelease 只需要一行代码搞定,当然测试包和发布包也可以一起打 分别打,开发效率加快好多

End