一般我们在制作多渠道的时候通常是针对productFlavors属性的处理。

如何分渠道?

  1. 针对build.gradle中的productFlavors属性进行处理。
 productFlavors {
        quality {
            dimension "version"
            buildConfigField('String', 'TYPE', '"Phone"')
            buildConfigField('boolean', 'NEED_PUSH', 'true')
            manifestPlaceholders = [
                    app_icon : "@mipmap/icon",
                    app_name : "@string/app_name"
            ]
        }
        tb {
            dimension "version"
            buildConfigField('String', 'TYPE', '"Phone"')
            buildConfigField('boolean', 'NEED_PUSH', 'true')
            manifestPlaceholders = [
                    app_icon : "@mipmap/icon_tb",
                    app_name : "@string/app_name_tb"
            ]
        }
        dabieshan {
            dimension "version"
            buildConfigField('String', 'TYPE', '"Phone"')
            buildConfigField('boolean', 'NEED_PUSH', 'true')
            manifestPlaceholders = [
                    app_icon : "@mipmap/icon",
                    app_name : "@string/app_name"
            ]
        }
        xulong {
            dimension "version"
            buildConfigField('String', 'TYPE', '"Phone"')
            buildConfigField('boolean', 'NEED_PUSH', 'true')
            manifestPlaceholders = [
                    app_icon : "@mipmap/icon",
                    app_name : "@string/app_name"
            ]
        }
    }

可以看到,分完渠道后,我们可以针对不同的渠道构建不同的icon或者APP名称等,当然这只是在各个渠道区别较少的时候,在各渠道变化较大时就需要分包方式处理了。

如何根据渠道输出不同的apk?(基于Android studio4.1.1)

  1. 目前来说,渠道定义好了后,在编译打包后,会自动构建相应渠道的文件夹,类似下面的

但是如果没有处理的话,打包出来的apk名称都是一样的

  1. 各个渠道特定的apk名称
applicationVariants.all { variant ->

        if (variant.buildType.name == 'release') {
            variant.outputs.all {
//                outputFileName = "${productFlavors.name}_app_${defaultConfig.versionName}.apk"    //[quality]_app_v1.0.28_20210104.apk  带中括号
                outputFileName = "${variant.productFlavors[0].name}_app_${defaultConfig.versionName}.apk"
            }
        }else{
            variant.outputs.all {
                outputFileName = "${variant.productFlavors[0].name}_app_debug_${defaultConfig.versionName}.apk"
            }
        }
    }

build.gradleandroid节点下创建applicationVariants来输出apk
defaultConfig.versionName对应我们自己定义的versionName
variant.productFlavors[0].name 对应我们定义的渠道名

尝试过使用{productFlavors.name,但是输出的是带中括号的字符比如[quality],显然不太符合我们的要求。

最后我们输出的apk名称就是类似quality_app_v1.0.28_20210104.apk了。

最后修改:2021 年 07 月 22 日 09 : 32 AM
如果觉得我的文章对你有用,请随意赞赏