美團(tuán)多渠道打包原理以及使用

傳統(tǒng)打包方法原理

  • 傳統(tǒng)的打包方法都是在AndroidManifest添加渠道標(biāo)示痢掠,每打一次包修改一次標(biāo)示的名稱(chēng)。效率特別的低砖瞧,一個(gè)稍微大一點(diǎn)的項(xiàng)目打上幾十個(gè)渠道包可能需要幾個(gè)小時(shí)半天的時(shí)間息堂。

美團(tuán)打包方法原理

  • 由于傳統(tǒng)的打包方式每次修改渠道都需要重新的構(gòu)建項(xiàng)目,時(shí)間都浪費(fèi)構(gòu)建上面了块促,美團(tuán)提供了一種新的打包方案荣堰,將APK直接當(dāng)做zip解壓目錄里會(huì)有一個(gè)META-INF目錄而此目錄是不參與簽名校驗(yàn)的。因此在META-INF目錄內(nèi)添加不同的空文件竭翠,可以唯一標(biāo)識(shí)一個(gè)渠道振坚。采用這種方式,每打一個(gè)渠道包只需復(fù)制一個(gè)apk斋扰,在META-INF中添加一個(gè)使用渠道號(hào)命名的空文件即可渡八。

實(shí)現(xiàn)

  • 所以打包可以分成兩大步啃洋。 第一步在META-INF目錄內(nèi)添加不同的空文件,用于標(biāo)識(shí)渠道屎鳍。(不會(huì)寫(xiě)宏娄? 不用擔(dān)心, 已經(jīng)有大神給我們寫(xiě)好了逮壁。: https://github.com/GavinCT/AndroidMultiChannelBuildTool 下載即可孵坚。Python 寫(xiě)的)
BDD16B70-7D68-471A-8511-E175E6381819.jpg
  • 第二步: 如何在代碼中獲取到META-INF目錄中的渠道文件名稱(chēng)
/** 
 * 從apk中獲取版本信息 
 * @param context 
 * @param channelKey 
 * @return 
 */  
private static String getChannelFromApk(Context context, String channelKey) {  
    //從apk包中獲取  
    ApplicationInfo appinfo = context.getApplicationInfo();  
    String sourceDir = appinfo.sourceDir;  
    //注意這里:默認(rèn)放在meta-inf/里, 所以需要再拼接一下  
    String key = "META-INF/" + channelKey;  
    String ret = "";  
    ZipFile zipfile = null;  
    try {  
        zipfile = new ZipFile(sourceDir);  
        Enumeration<?> entries = zipfile.entries();  
        while (entries.hasMoreElements()) {  
            ZipEntry entry = ((ZipEntry) entries.nextElement());  
            String entryName = entry.getName();  
            if (entryName.startsWith(key)) {  
                ret = entryName;  
                break;  
            }  
        }  
    } catch (IOException e) {  
        e.printStackTrace();  
    } finally {  
        if (zipfile != null) {  
            try {  
                zipfile.close();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  
    String[] split = ret.split("_");  
    String channel = "";  
    if (split != null && split.length >= 2) {  
        channel = ret.substring(split[0].length() + 1);  
    }  
    return channel;  
}  

實(shí)踐使用

  • 第一步:配置python環(huán)境:
    我們既然需要使用腳本打包窥淆,那么相應(yīng)的電腦上必須有可以運(yùn)行python腳本的運(yùn)行環(huán)境卖宠。所以我們第一步是要配置python運(yùn)行環(huán)境。 自己去官網(wǎng)下載安裝即可祖乳,非常簡(jiǎn)單逗堵。官網(wǎng)地址:https://www.python.org/

  • 第二步:編寫(xiě)python腳本:
    好心人已經(jīng)把運(yùn)行的打包腳本寫(xiě)好了秉氧,并且也封裝了讀取渠道號(hào)的實(shí)體工具類(lèi)眷昆。大家只需要去github上下載即可。 AndroidMultiChannelBuildTool 當(dāng)然在github上也有相關(guān)的使用介紹汁咏,非常簡(jiǎn)單亚斋,一看就懂。這里簡(jiǎn)單說(shuō)下攘滩,下載下來(lái)有個(gè)ChannelUtil.java類(lèi)帅刊,里面封裝好了獲取渠道號(hào)的方法,只需要在啟動(dòng)應(yīng)用程序的地方調(diào)用友盟的設(shè)置代碼即可漂问,比如:

AnalyticsConfig.setChannel(ChannelUtil.getChannel(this))赖瞒。
  • 第三步:配置渠道列表
    我們?cè)趃ithub上把python腳本下載下來(lái)之后,解壓文件蚤假,在PythonTool/Info/channel.txt中編輯渠道列表栏饮,沒(méi)寫(xiě)一個(gè)渠道名,換行即可磷仰。

  • 第四步:運(yùn)行腳本
    把已經(jīng)簽名打包好的apk文件袍嬉,復(fù)制到PythonTool目錄下和MultiChannelBuildTool.py這個(gè)腳本同級(jí),直接雙擊點(diǎn)擊MultiChannelBuildTool.py 即可完成打包灶平。

最后伺通,喜歡的同學(xué)可以關(guān)注我的微信公眾號(hào),我會(huì)不定期的寫(xiě)一些相關(guān)的文章逢享,吹一些牛逼罐监、砍一些大山、來(lái)一些心靈雞湯瞒爬、搞一些不為人知的故事

qrcode_for_gh_5ab52f4f1c92_430.jpg

↑↑↑↑↑識(shí)別他弓柱、關(guān)注他↑↑↑↑↑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末调缨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吆你,更是在濱河造成了極大的恐慌弦叶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妇多,死亡現(xiàn)場(chǎng)離奇詭異伤哺,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)者祖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)立莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人七问,你說(shuō)我怎么就攤上這事蜓耻。” “怎么了械巡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵刹淌,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我讥耗,道長(zhǎng)有勾,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任古程,我火速辦了婚禮蔼卡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挣磨。我一直安慰自己雇逞,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布茁裙。 她就那樣靜靜地躺著塘砸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呜达。 梳的紋絲不亂的頭發(fā)上谣蠢,一...
    開(kāi)封第一講書(shū)人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音查近,去河邊找鬼眉踱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霜威,可吹牛的內(nèi)容都是我干的谈喳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼戈泼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼婿禽!你這毒婦竟也來(lái)了赏僧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤扭倾,失蹤者是張志新(化名)和其女友劉穎淀零,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膛壹,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驾中,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了模聋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肩民。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖链方,靈堂內(nèi)的尸體忽然破棺而出持痰,到底是詐尸還是另有隱情,我是刑警寧澤祟蚀,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布工窍,位于F島的核電站,受9級(jí)特大地震影響暂题,放射性物質(zhì)發(fā)生泄漏移剪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一薪者、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧剿涮,春花似錦言津、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至瞬浓,卻和暖如春初婆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背猿棉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工磅叛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萨赁。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓弊琴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親杖爽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敲董,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容