多渠道打包

前言

渠道可理解成安卓apk应用市场平台,所以多渠道打包可以理解成在打包多个应用市场的apk,要在每个应用市场上打包一个安卓Apk,这样好处是可以在查看apk在每个安卓市场的下载量,活跃度,便于公司进行重点运营和推广,因为友盟多渠道统计比较成熟,所以公司采用的是友盟的多渠道打包统计;

 首先要在友盟的官网上注册一个账号 , 并且创建一个应用 , 从而获得 一个 唯一的 appkey ,安卓 和iOS 的不能共用,命名规则是  app名 + android   或 app 名 + ios 等等。

第一步. 在app.gradle 中添加依赖。

  //友盟
    compile 'com.umeng.sdk:common:1.5.0'
    compile 'com.umeng.sdk:analytics:7.5.0'

第二步:就是在 manifest 中添加渠道号

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

解释: 第一个value 是你在友盟上申请的appid 第二个value 仅仅是一个占位符。

第三部: 在app. gradle 中配置渠道号

 productFlavors{
        wandoujia{
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE: "xiaomi"]
        }
      
//        productFlavors.all {  flavor->
//            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
//        }
    }

  buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


            applicationVariants.all { variant ->    //批量修改Apk名字
                variant.outputs.all { output ->
                    if (!variant.buildType.isDebuggable()) {
                        //获取签名的名字 variant.signingConfig.name
                        //要被替换的源字符串
                        //                def sourceFile = "-${variant.flavorName}-${variant.buildType.name}"
                        def sourceFile = ".apk"
                        //替换的字符串 //输出apk名称为:渠道名_版本名_时间.apk
                        //                def replaceFile = "${variant.productFlavors[0].name}_V${variant.versionName}_${variant.flavorName}_${variant.buildType.name}"
                        def replaceFile = "-${variant.versionName}_${buildTime()}.apk"
                        outputFileName = output.outputFile.name.replace(sourceFile, replaceFile)

                    }
                }

            }

        }
    }

在 android studio 3.0以上的版本 可能会报错 ,

All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

只需要在 版本号下面添加此句就 ok 了 , 元婴是维度不统一。

 //版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了
        flavorDimensions "versionCode"

最后在application 中的oncreate 方法中 初始化方法就 行了

   try {
            ApplicationInfo appInfo = getPackageManager().getApplicationInfo(getPackageName(),
                    PackageManager.GET_META_DATA);
            value = appInfo.metaData.getString("UMENG_CHANNEL");
            Log.d("Tag", " app key : " + value);  // Tag﹕ app key : AIzaSyBhBFOgVQclaa8p1JJeqaZHiCo2nfiyBBo

        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }

        if (value != null)
        {
            UMConfigure.init(this, ConstantUtils.YM_APPKEY, value, UMConfigure.DEVICE_TYPE_PHONE, ConstantUtils.YM_SECRET);
            UMConfigure.setLogEnabled(true);
            MobclickAgent.setScenarioType(mContext, MobclickAgent.EScenarioType.E_UM_NORMAL);
            ToastUtils.showTextToast(value);
        }

其中 ConstantUtils.YM_APPKEY 和ConstantUtils.YM_SECRET 就是appkey 值是一样的

打包后会生成 在这里插入图片描述
因为我只配置了两个渠道 ,想要更多 自己配置就ok 了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章