多渠道打包

前言

渠道可理解成安卓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 了

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