美文网首页
gradle多渠道打包

gradle多渠道打包

作者: 夏沫_琅琊 | 来源:发表于2019-01-03 15:16 被阅读0次

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

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

           <meta-data

                android:name="CHANNEL"

                android:value="${CHANNEL_VALUE}">

            </meta-data>

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

    <meta-data

                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多渠道打包

          本文链接:https://www.haomeiwen.com/subject/ihgfrqtx.html