gradle多渠道打包

之前公司没有涉及多渠道,所以现家用的时候现学的,整理下自己的使用心得;

1:清单中定义meta-data标签 属性name和value 

       

            android:name="CHANNEL"

            android:value="${CHANNEL_VALUE}">

       

如果使用umeng多渠道,可以将名称修改下

            android:name="UMENG_CHANNEL"

            android:value="${UMENG_CHANNEL_VALUE}" />

2:build.gradle中添加渠道

     owner是自己定义的,用于区分其他渠道,自己的下载链接.   

    productFlavors{

        xiaomi{}

        wandoujia{}

        huawei{}

        oppo{}

        yingyongbao{}

        vivo{}

        _360{}

        baidu{}

        owner{}

    }

    productFlavors.all{

        flavor->flavor.manifestPlaceholders=[CHANNEL_VALUE:name]

    }

 3:获取渠道号

public static String getsDeviceName(Context context,String key){

        String channelName="";


        PackageManager packageManager = context.getPackageManager();

        try {

            if (packageManager != null) {


                ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);

                if (applicationInfo != null) {

                    if (applicationInfo.metaData != null) {

                        channelName = applicationInfo.metaData.getString(key);

                    }

                }

            }

        }catch (Exception e){

        }

        return channelName;

}

4:渠道号可添加到请求的header中传给后端. 

第三步和第四步如果是友盟是不需要的.

另外多说一句,友盟初始化的方法中init()

UMConfigure.init(this,Config.UMENG_APP_KEY,"",UMConfigure.DEVICE_TYPE_PHONE,"");

第三个参数指的就是渠道,如果清单中设置过,这里传空,否则会覆盖清单的渠道!!!!!

另外打包时修改输出文件名

gradle3.0以上 

android.applicationVariants.all { variant ->

            variant.outputs.all {

                outputFileName = "coinplus_${variant.getFlavorName()}_v${variant.versionName}.apk"

            }

        }

variant.getFlavorName()获取的是渠道名如果希望带着release或者debug可以调用

variant.name

3.0以下

  applicationVariants.all { variant ->

                variant.outputs.each { output ->

                    def outputFile = output.outputFile

                    if (outputFile != null && outputFile.name.endsWith('.apk')) {

                        //输出apk名称为:渠道名_版本名_时间.apk

                        def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${releaseTime()}.apk"

                        output.outputFile = new File(outputFile.parent, fileName)

                    }

                }

            }

你可能感兴趣的:(gradle多渠道打包)