多渠道打包一般應用于向不同應用市場提交app后用來統計不同渠道下載量等一些信息。一般集成友盟sdk(同類型的sdk還有 諸葛io,量江湖等sdk),不同sdk集成方式大同小異,可去各自官網查看詳細文檔。本文以友盟sdk為例。
渠道:各種應用市場比如 華為應用市場,小米應用市場, 積分墻(花錢的推廣渠道)等。
一,android自帶gradle打包
首先集成友盟sdk,集成方式參照友盟sdk集成,在項目的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中加入友盟的集成代碼以及權限
<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}" /> //這里改成對應build.gradle中的 productFlavors.all 對應的字符串
然后選擇你要打包的渠道就 可以了
->
缺點:如果渠道過多這種打包方式很費時間20個渠道包差不多要40分鐘的時間。
二 美團walle(瓦力)打包
一些大廠的渠道會多到驚人,美團會有900+的渠道要是按上面的打包方式2*900肯定是不行的。美團技術大牛們也在一直研究快速多渠道打包方法。
在這介紹美團最新的walle打包,之前美團還有一個打包方式是通過python腳本修改apk(apk也是一個壓縮包)中的一個配置文件的名稱,配置文件名稱也就是渠道名稱從而打不不同的包,這種速度很快,但是從android7.0以后android加入了APK Signature Scheme v2打包方式,因為這種打包方式改變的包里面的內容所以apk在7.0以后的系統中安裝會提示安裝失敗。
在此推薦美團walle打包,此種方式是不通過外部修改配置文件的方式打包具體打包細節可參考美團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'//美團多渠道打包}
這里的 channelFile是一個channel(渠道的一個配置文件)放在該工程的對應的目錄下
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" />-->
通過調用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自帶的命令輸入框輸入打包命令,等兩分鐘左右所有的渠道包就打完了!
出現BUILD SUCCESSFUL 就說明打包成功了
常用的walle打包命令
//生成所有渠道包 gradlew clean assembleReleaseChannels // 生成單個渠道包: gradlew clean assembleReleaseChannels -PchannelList=meituan//生成多個渠道包: gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping
總結
如果沒有渠道的限制一般用as自帶的gradle打包就可以,如果渠道過多推薦使用walle打包。文中介紹的美團的python打包方式現在還有一些開發者在用,因為那種方法在構建基礎apk包的時候 不選用v2打包方式是沒有問題的,但是我認為v2的簽名打包方式更符合現在的趨勢吧,所以推薦是用美團的walle打包方式。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答