???? 原文轉(zhuǎn)自極分享更多詳情及更新查看原文????
最新版本
v1.0.4 - 2016.01.19 - 完善獲取APK路徑的方法,增加MarketInfo
v1.0.3 - 2016.01.14 - 增加緩存界牡,新增ResUtils龙填,更有好的錯(cuò)誤提示
v1.0.2 - 2015.12.04 - 兼容productFlavors矛缨,完善異常處理
v1.0.1 - 2015.12.01 - 如果沒(méi)有讀取到渠道兼吓,默認(rèn)返回空字符串
v1.0.0 - 2015.11.30 - 增加Java和Python打包腳本,增加文檔
v0.9.9 - 2015.11.26 - 測(cè)試版發(fā)布卿捎,支持全新的極速打包方式
源碼:https://github.com/mcxiaoke/packer-ng-plugin
項(xiàng)目介紹
packer-ng-plugin 是下一代Android渠道打包工具Gradle插件配紫,支持極速打包,1000個(gè)渠道包只需要5秒鐘午阵,速度是 gradle-packer-plugin 的1000倍以上躺孝,可方便的用于CI系統(tǒng)集成,支持自定義輸出目錄和最終APK文件名底桂,依賴包:com.mcxiaoke.gradle:packer-ng:1.0.+ 簡(jiǎn)短名:packer植袍,可以在項(xiàng)目的 build.gradle 中指定使用,還提供了命令行獨(dú)立使用的Java和Python腳本籽懦。實(shí)現(xiàn)原理見(jiàn)本文末尾于个。
使用指南
Maven Central
.
.
代碼部分?
.
.
.
實(shí)現(xiàn)原理
優(yōu)點(diǎn)
使用APK注釋字段保存渠道信息和MAGIC字節(jié),從文件末尾讀取渠道信息暮顺,速度快
實(shí)現(xiàn)為一個(gè)Gradle Plugin厅篓,支持定制輸出APK的文件名等信息,方便CI集成
提供Java版和Python的獨(dú)立命令行腳本捶码,不依賴Gradle插件羽氮,支持獨(dú)立使用
由于打包速度極快,單個(gè)包只需要5毫秒左右惫恼,可用于網(wǎng)站后臺(tái)動(dòng)態(tài)生成渠道包
缺點(diǎn)
沒(méi)有使用Android的productFlavors档押,無(wú)法利用flavors條件編譯的功能
文件格式
Android應(yīng)用使用的APK文件就是一個(gè)帶簽名信息的ZIP文件,根據(jù) ZIP文件格式規(guī)范祈纯,每個(gè)ZIP文件的最后都必須有一個(gè)叫Central Directory Record 的部分令宿,這個(gè)CDR的最后部分叫"end of central directory record",這一部分包含一些元數(shù)據(jù)腕窥,它的末尾是ZIP文件的注釋粒没。注釋包含Comment Length和File Comment兩個(gè)字段,前者表示注釋內(nèi)容的長(zhǎng)度油昂,后者是注釋的內(nèi)容革娄,正確修改這一部分不會(huì)對(duì)ZIP文件造成破壞,利用這個(gè)字段冕碟,我們可以添加一些自定義的數(shù)據(jù)拦惋,PackerNg項(xiàng)目就是在這里添加和讀取渠道信息。
細(xì)節(jié)處理
原理很簡(jiǎn)單安寺,就是將渠道信息存放在APK文件的注釋字段中厕妖,但是實(shí)現(xiàn)起來(lái)遇到不少坑,測(cè)試了好多次挑庶。
同類工具
gradle-packer-plugin - 舊版渠道打包工具言秸,完全使用Gradle系統(tǒng)實(shí)現(xiàn)软能,能利用Android提供的productFlavors系統(tǒng)的條件編譯功能,無(wú)任何兼容性問(wèn)題举畸,方便集成查排,但是由于每次都要重新打包,速度比較慢抄沮,不適合需要大量打包的情況跋核。(性能:200個(gè)渠道包需要一到兩小時(shí))
Meituan-MultiChannelTool - 使用美團(tuán)方案的實(shí)現(xiàn),在APK文件的META-INF目里增加渠道文件叛买,打包速度也非成按快,但讀取時(shí)需要遍歷APK文件的數(shù)據(jù)項(xiàng)率挣,比較慢刻伊,而且以后可能遇到兼容性問(wèn)題
MultiChannelPackageTool - 將渠道寫(xiě)入APK文件的注釋,這個(gè)項(xiàng)目沒(méi)有提供Gradle插件椒功,只有命令行工具捶箱,不方便CI集成,使用ZIP文件注釋的思路就是來(lái)自此項(xiàng)目