[Android]配置Gradle的productFlavors构建项目用于多渠道打包或多环境运行

productFlavors对象可以用来分别定义产品不同的特性,使用它可以用一套代码创建不同的项目。productFlavors的使用有以下几种。

  • 为产品设置不同的applicationId而编译出不同包名的APK,在app(module)目录下的build.gradle文件中加入productFlavors结构,代码如下:
productFlavors{
    productA{
        applicationId "com.gavinandre.product.a"
        versionName "version-a-1.0"
    }

    productB{
        applicationId "com.gavinandre.product.b"
        versionName "version-b-1.0"
    }
}
  • 通过创建productFlavors对象,动态调整Build Variant的选项,更改AndroidManifest.xml中的meta-data标签的值,打包出不同的APK,代码如下:
//Module的build.gradle中
productFlavors {
    SIT {}
    PRE {}
    PRD {}
}
productFlavors.all {
    flavor -> flavor.manifestPlaceholders = [ENV: name]
}
//AndroidManifest.xml中
<meta-data android:name="ENV" android:value="${ENV}" />

productFlavors.all这个方法就是遍历productFlavors对象,在其中给manifestPlaceholders的name属性赋值,动态改变ENV这个name标签的value的值。

然后通过选择Build Variant要打包的APK的选项动态调整选项:
这里写图片描述

另外,可以通过applicationVariants.all这个方法配制打包的名称:

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            def fileName = '';
            def timeNow = getDate();
            String env;
            if (outputFile.name.indexOf("SIT") != -1) {
                env = "sit";
            } else if (outputFile.name.indexOf("PRE") != -1) {
                env = "pre";
            } else if (outputFile.name.indexOf("PRD") != -1) {
                env = "prd";
            }
            fileName = "RedBabyParkApp_${env}_${buildType.name}_${defaultConfig.versionName}_"+timeNow+".apk";
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值