安卓渠道打包迭代

提綱

渠道打包方案:v1下的渠道包方案迭代,v2渠道包,常見工具庫

原理深入:部分源碼

前言

要進行渠道打包,重點是設置渠道標識,而設置渠道標識,涉及apk打包和簽名,可以先閱讀《安卓簽名機制淺析》,了解相關知識再閱讀本文。

本文主要一個個說明渠道包打包的不同做法優劣和迭代,如果想要直接獲得比較好的渠道打包方式,可以直接看文章后半部分

V1簽名機制下打渠道包

由V1簽名和校驗機制可知,修改APK中的任何文件都會導致安裝失敗!那怎么添加渠道信息呢?

方案1:Android Gradle Plugin

原理:Gradle Plugin本身提供了多渠道的打包策略,Gradle編譯生成多渠道包時,會用不同的渠道信息替換AndroidManifest.xml中的占位符。

1.在AndroidManifest.xml中添加渠道信息占位符:

2.通過Gradle Plugin提供的productFlavors標簽,添加渠道信息

簽名包流程:靜態資源整理->編譯源碼,處理得到dex文件->合成APK->簽名,對齊

缺點:每生成一個渠道包,都要重新執行一遍構建流程,效率太低,只適用于渠道較少的場景

渠道包耗時 = 渠道數量 * (編譯源碼+添加渠道+簽名)

Q:能否避免解決多次編譯?

方案2:找個文件添加上信息(res/raw。assets/) ,要用再讀出來

原理:APK是自簽名:沒有第三方權威機構認證,用戶可以自行生成keystore,Android簽名方案無法保證APK不被二次簽名。我們可以重新打包app,再設置信息后簽名。

了解apk編譯的話,可以知道以下目錄不會被編譯二進制!res/raw? 和 assets/

所以我們可以從這方面下手,設置了信息之后,重簽名,app內再讀出來。有兩種做法(apktool和winrar類壓縮工具)

優點:避免了多次編譯,渠道包時長 = 編譯源碼+ 渠道數量 * (添加渠道 + 簽名)

缺點:1.項目逐漸膨脹 解壓-合成-重簽依然耗時

? ? ? ? ? ?2.簽名不便于管理,易泄露,大項目簽名保密

? ? ? ? ? ?3.不穩定,可能升級了 Gradle Plugin 的版本之后,會導致解包失敗

Q:能否避免解決多次簽名?

Ps:高效的多渠道打包的幾個關鍵:不能破壞簽名,不能重新打包,讀取信息必須高效

渠道包時長 = 編譯源碼+簽名+ 渠道數量 * 添加渠道

不破壞簽名就限制了不能解包以及重新簽名,勢必對效率有所提高。

高效方案一:到/META-INF 目錄下,寫入一個空文件,以文件名來標識渠道號(來自美團)

原理:了解V1簽名,發現V1簽名只會校驗元文件(/META-INF 目錄)以外的數據,所以可以從這個漏洞下手,在/META-INF 目錄下寫入空文件,文件名為渠道名,就可以高效達到渠道包目的

步驟:

1.Java Zip API解析APKZipFile api apk;

2.添加渠道信息META-INF添加空文件,如META-INF/xiaomi.channel

3.獲取渠道信息,遍歷META-INF/目錄,匹配xx.channel獲取渠道信息

使用這樣的方案,并不會破壞 v1 簽名,所以效率會很高。

高效方案二:在注釋區加渠道信息(騰訊的VasDolly)

原理:apk文件本質為zip包,檢驗只校驗數據區,通過修改 Apk 文件的 EOCD 部分,增加渠道的信息

V2簽名機制下打渠道包

Q:上述方式都改了apk文件,對V2不管用,需要尋求快速的V2下渠道包方案

A:在APK簽名塊中添加一個ID-Value,存儲渠道信息

原理:V2簽名區塊存在盲區:未知id-value不校驗(當前線上推廣的框架都是這個做法,騰訊的VasDolly,美團的Walle都是)

Android系統只會關注ID為0x7109871a的V2簽名塊,并且忽略其他的ID-Value,同時V2簽名只會保護APK本身,不包含簽名塊

方案步驟:

1.找到APK的EOCD塊

2.找到APK簽名塊

3.獲取已有的ID-Value Pair

4.添加包含渠道信息的ID-Value

5.基于所有的ID-Value生成新的簽名塊

6.修改EOCD的中央目錄的偏移量(修改EOCD的中央目錄偏移量,不會導致數據摘要校驗失敗)

7.用新的簽名塊替代舊的簽名塊,生成帶有渠道信息的APK

實際上,除了渠道信息,我們可以在APK簽名塊中添加任何輔助信息。

V3機制下的渠道打包,和V2一樣就可以

常見的渠道打包工具和對比


?VasDolly使用簡介

????? 命令行執行jar包(支持多線程)

????? java –jar VasDolly.jar

????? 編譯、添加渠道一條龍

????? gradlew channelAppDebug

????? 基于已編譯APK添加渠道

????? gradlew rebuildChannel

相關框架連接

【美團】Walle:https://github.com/Meituan-Dianping/walle

【騰訊電競】VasDolly:https://github.com/Tencent/VasDolly

【某大神】packer-ng-plugin:https://github.com/mcxiaoke/packer-ng-plugin

原理深入——源碼篇

展示關鍵代碼,相關講解在注釋中

?寫入渠道(V1SchemeUtil

?讀取渠道(V1SchemeUtil

?V2獲取渠道信息(V2SchemeUtil)

?V2添加渠道信息(VasDolly ——ChannelWriter

?V2添加渠道信息(VasDolly —— IdValueWriter )

?V2獲取渠道信息(VasDolly ——IdValueReader)

?參考鏈接:

?Android多渠道打包實踐(VasDolly&AndResGuard) http://www.lxweimin.com/p/38ad00f73e94

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,797評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,179評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,628評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,642評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,444評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,948評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,040評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,185評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,717評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,794評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,418評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,414評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,750評論 2 370

推薦閱讀更多精彩內容