渠道包是每一個(gè)Android產(chǎn)品面臨的問題噪生,國(guó)內(nèi)幾乎每個(gè)手機(jī)廠商都有自己的安卓市場(chǎng)忧侧,導(dǎo)致需要的渠道包非常多博其,很多app的渠道都達(dá)到了喪心病狂的幾百個(gè)尝盼,每次打渠道包都是一個(gè)痛苦的過程。
多渠道打包方案
目前調(diào)研的結(jié)果基本有四種打包的方案:
1. 配置gradle腳本實(shí)現(xiàn)多渠道打包
核心原理就是通過腳本修改androidManifest.xml中的mate-date內(nèi)容漠趁,執(zhí)行N次打包簽名操作實(shí)現(xiàn)多渠道打包的需求扁凛。
這種方式缺點(diǎn)非常明顯,大部分情況下打渠道包只是為了修改一個(gè)渠道號(hào)闯传,這種方式完全是殺雞用牛刀谨朝,非常耗費(fèi)時(shí)間。而且很多時(shí)候是要混淆代碼的甥绿,如果多次打包就會(huì)生成多個(gè)mapping文件字币,在進(jìn)行錯(cuò)誤信息的查看時(shí),不同渠道使用不同的mapping文件共缕,想想就酸爽洗出。
2. 使用apktool工具反編譯二次打包
核心原理是使用apktoo了工具反編譯apk,然后修改渠道號(hào)图谷,重新打包簽名翩活。
這種方式相比第一種提高了速度,基本上一分鐘可以20m的apk可以完成3個(gè)左右便贵。應(yīng)付100個(gè)以內(nèi)的渠道還是可以的菠镇。
缺點(diǎn)是浪費(fèi)了很多時(shí)間在反編譯、二次打包承璃、簽名上辟犀。
3. 美團(tuán)多渠道打包方式
apk文件實(shí)質(zhì)是一個(gè)zip文件,解壓后可以發(fā)現(xiàn)里邊有一個(gè)META-INF目錄绸硕,如果在META-INF目錄內(nèi)添加空文件,可以不用重新簽名應(yīng)用魂毁。美團(tuán)利用這個(gè)方式創(chuàng)建空文件夾來表示渠道玻佩。具體原理見:美團(tuán)Android自動(dòng)化之旅—生成渠道包
美團(tuán)的打包方式非常快速席楚,打渠道包幾乎就只是進(jìn)行一次copy apk文件咬崔。
4. 修改Zip文件comment
核心原理是利用的Zip文件“可以添加comment(摘要)”的數(shù)據(jù)結(jié)構(gòu)特點(diǎn),在文件的末尾寫入任意數(shù)據(jù),而不用重新解壓zip文件垮斯。github:MultiChannelPackageTool
這種打包方式對(duì)特點(diǎn)也是比較快速郎仆,可以對(duì)渠道號(hào)進(jìn)行加密,另外github上已經(jīng)有了很完整的工具兜蠕,使用很方便扰肌。
最佳實(shí)踐
調(diào)研過后,決定采用第四種方式熊杨,可以對(duì)渠道號(hào)就行加密曙旭,使用也比較方便。
使用友盟進(jìn)行渠道管理基本涉及到三步:渠道號(hào)寫入apk文件晶府,代碼中讀取渠道號(hào)桂躏,根據(jù)渠道號(hào)對(duì)友盟進(jìn)行設(shè)置。
具體步驟如下:
1. 在apk中寫入渠道號(hào)
這一步利用工具很容易實(shí)現(xiàn)
實(shí)際使用中把渠道號(hào)寫入一個(gè)數(shù)組川陆,然后循環(huán)執(zhí)行渠道號(hào)寫入命令
2. 代碼中讀取渠道號(hào)
使用MCPTool.java中的方法:
MCPTool.getChannelId(context, mcptoolPassword, defValue)
3. 設(shè)置友盟渠道號(hào)
代碼中配置渠道號(hào):
UMAnalyticsConfig(Context context,Stringappkey,StringchannelId)
MobclickAgent. startWithConfigure(UMAnalyticsConfig config)
最好在app的application中調(diào)用此方法剂习,盡早進(jìn)行渠道號(hào)的設(shè)置。
驗(yàn)證
利用友盟后臺(tái)進(jìn)行渠道號(hào)的驗(yàn)證较沪,這里有一個(gè)坑就是:
也就是說一個(gè)手機(jī)只有一次驗(yàn)證渠道的機(jī)會(huì)鳞绕。
技巧:可以在友盟上多申請(qǐng)幾個(gè)key,驗(yàn)證一次換一個(gè)key购对,如果只有一個(gè)測(cè)試手機(jī)時(shí)可以試試猾昆,比較耗費(fèi)時(shí)間。