Android多渠道打包總結(jié)(推薦)
多渠道打包一般應(yīng)用于向不同應(yīng)用市場(chǎng)提交app后用來統(tǒng)計(jì)不同渠道下載量等一些信息。一般集成友盟sdk(同類型的sdk還有 諸葛io,量江湖等sdk),不同sdk集成方式大同小異,可去各自官網(wǎng)查看詳細(xì)文檔。本文以友盟sdk為例。
渠道:各種應(yīng)用市場(chǎng)比如 華為應(yīng)用市場(chǎng),小米應(yīng)用市場(chǎng), 積分墻(花錢的推廣渠道)等。
一,android自帶gradle打包
首先集成友盟sdk,集成方式參照友盟sdk集成,在項(xiàng)目的build.gradle文件中加入以下代碼
productFlavors { yingyongbao {} oppo {} } productFlavors.all { flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] }
修改生成的apk名字
applicationVariants.all{ variant-> variant.outputs.each { output-> def oldFile = output.outputFile if(variant.buildType.name.equals('release')){ def releaseApkName = ''+variant.productFlavors[0].name +"-"+defaultConfig.versionName+ '.apk' output.outputFile = new File(oldFile.parent, releaseApkName) } } }
在AndroidManifest.xml中加入友盟的集成代碼以及權(quán)限
<meta-data android:name="UMENG_APPKEY" android:value="Your key" /> <!-- <meta-data android:value="faqiao" android:name="UMENG_CHANNEL"/> --> <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL_VALUE}" /> //這里改成對(duì)應(yīng)build.gradle中的 productFlavors.all 對(duì)應(yīng)的字符串
然后選擇你要打包的渠道就 可以了
->
缺點(diǎn):如果渠道過多這種打包方式很費(fèi)時(shí)間20個(gè)渠道包差不多要40分鐘的時(shí)間。
二 美團(tuán)walle(瓦力)打包
一些大廠的渠道會(huì)多到驚人,美團(tuán)會(huì)有900+的渠道要是按上面的打包方式2*900肯定是不行的。美團(tuán)技術(shù)大牛們也在一直研究快速多渠道打包方法。
在這介紹美團(tuán)最新的walle打包,之前美團(tuán)還有一個(gè)打包方式是通過python腳本修改apk(apk也是一個(gè)壓縮包)中的一個(gè)配置文件的名稱,配置文件名稱也就是渠道名稱從而打不不同的包,這種速度很快,但是從android7.0以后android加入了APK Signature Scheme v2打包方式,因?yàn)檫@種打包方式改變的包里面的內(nèi)容所以apk在7.0以后的系統(tǒng)中安裝會(huì)提示安裝失敗。
在此推薦美團(tuán)walle打包,此種方式是不通過外部修改配置文件的方式打包具體打包細(xì)節(jié)可參考美團(tuán)walle打包
集成方式
首先build.gradle中
apply plugin: 'walle' walle { // 指定渠道包的輸出路徑 // apkOutputFolder = new File("${project.buildDir}/outputs/channels"); apkOutputFolder = new File("D:/Android/outputs/user/channels"); // 定制渠道包的APK的文件名稱 // apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk'; apkFileNameFormat = 'app-${channel}-v${versionName}.apk'; // 渠道配置文件 channelFile = new File("${project.getProjectDir()}/channel") } dependencies { compile 'com.meituan.android.walle:library:1.1.6'//美團(tuán)多渠道打包 }
這里的 channelFile是一個(gè)channel(渠道的一個(gè)配置文件)放在該工程的對(duì)應(yīng)的目錄下
apkOutputFolder 是apk包生成的位置,可更改
該文件用editplus文件編輯器打開格式如下:
然后在 工程的 build.gradle中加入
dependencies { classpath 'com.meituan.android.walle:plugin:1.1.6' }
這種打包方式不是更改AndroidManifest的方式,所以先把AndroidManifest中的配置友盟渠道的代碼注釋掉:
<!--<meta-data--> <!--android:name="UMENG_APPKEY"--> <!--android:value="your key" />--> <!--<!– <meta-data android:value="faqiao" android:name="UMENG_CHANNEL"/> –>--> <!--<meta-data--> <!--android:name="UMENG_CHANNEL"--> <!--android:value="channel" />-->
通過調(diào)用walle的方法獲取到的channel的名稱,所以需要在app初始化的 BaseApplication中初始化友盟的channel配置信息。
private void initUmeng(){ String appkey = "your appkey"; String channelId = WalleChannelReader.getChannel(this.getApplicationContext()); //初始化友盟配置信息 通過代碼方式配置友盟的渠道信息 MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, appkey, channelId); }
配置好了那么就開始打包了,在as自帶的命令輸入框輸入打包命令,等兩分鐘左右所有的渠道包就打完了!
出現(xiàn)BUILD SUCCESSFUL 就說明打包成功了
常用的walle打包命令
//生成所有渠道包 gradlew clean assembleReleaseChannels // 生成單個(gè)渠道包: gradlew clean assembleReleaseChannels -PchannelList=meituan //生成多個(gè)渠道包: gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping
總結(jié)
如果沒有渠道的限制一般用as自帶的gradle打包就可以,如果渠道過多推薦使用walle打包。文中介紹的美團(tuán)的python打包方式現(xiàn)在還有一些開發(fā)者在用,因?yàn)槟欠N方法在構(gòu)建基礎(chǔ)apk包的時(shí)候 不選用v2打包方式是沒有問題的,但是我認(rèn)為v2的簽名打包方式更符合現(xiàn)在的趨勢(shì)吧,所以推薦是用美團(tuán)的walle打包方式。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Convert WebP to PNG using java
本文主要介紹Convert WebP to PNG using java,這里對(duì) WebP 做了詳細(xì)說明,并講解Linux 環(huán)境下WebP 轉(zhuǎn)png格式的示例,有興趣的小伙伴可以參考下2016-08-08記錄Android studio JNI開發(fā)的三種方式(推薦)
JNI (Java Native Interface)是一套編程接口,用來實(shí)現(xiàn)Java代碼和其他語言(c、C++或匯編)進(jìn)行交互。下面通過本文給大家講解Android studio JNI開發(fā)的三種方式,需要的朋友參考下吧2017-12-12Android Studio實(shí)現(xiàn)簡(jiǎn)易登錄界面制作
這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)簡(jiǎn)易登錄界面制作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04Android無需權(quán)限調(diào)起系統(tǒng)相機(jī)
在進(jìn)行一些小型APP的開發(fā),或者是對(duì)拍照界面沒有自定義要求時(shí),我們可以用調(diào)起系統(tǒng)相機(jī)的方式快速完成拍照需求2023-03-03Android 側(cè)邊滑動(dòng)關(guān)閉Activity的示例代碼
這篇文章主要介紹了Android 側(cè)邊滑動(dòng)關(guān)閉Activity的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05Android?ViewStub使用方法學(xué)習(xí)
這篇文章主要為大家介紹了Android?ViewStub使用方法學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Android 自動(dòng)化測(cè)試經(jīng)驗(yàn)分享 UiObejct.getFromParent()的使用方法
本篇文章對(duì)Android中UiObejct.getFromParent()的使用進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05