安卓新一代多渠道打包工具Walle

為什么要打多個渠道的包略贮?

大家都知道甚疟,android應(yīng)用商店大大小小有幾百個,作為一個有志向的app刨肃,就需要做到統(tǒng)計各個應(yīng)用商店的下載量古拴,不同渠道下的app使用時長、安裝數(shù)量真友、使用用戶數(shù)等等信息黄痪,這個時候就需要打多個渠道包。渠道包的原理大致就是往apk中寫入不同的渠道信息盔然,對這個問題有疑問的同學(xué)可以看看gradle官網(wǎng)或者看看這篇文章
桅打。

傳統(tǒng)多渠道打包

用android studio開發(fā)的同學(xué)都知道,傳統(tǒng)的多渠道打包方法是通過gradle配置productFlavors愈案,在配合grade的manifestPlaceholders插件挺尾,就可以實現(xiàn)task打多渠道包了,具體如下站绪。

    //app目錄下在build.gradle文件中添加如下代碼
    productFlavors {
        yingyongbao {
            manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "yingyongbao"]
        }
        baidu {
            manifestPlaceholders = [CUSTOM_CHANNEL_VALUE: "baidu"]
        }
    }

    //在AndroidManifest.xml中添加如下代碼 如果有使用友盟把CUSTOM_CHANNEL換成UMENG_CHANNEL即可
        <meta-data
            android:name="CUSTOM_CHANNEL"
            android:value="${CUSTOM_CHANNEL_VALUE}" />

這個時候就可以用task要打包了遭铺,雙擊即可』肿迹或者直接在命令行輸入

./gradlew assembleRelease//打包所有渠道
./gradlew assembleWandoujiaRelease//打包單個渠道 Wandoujia
1490758426(1).jpg

沒出現(xiàn)渠道打包task的同學(xué)請點擊左上角的刷新按鈕魂挂。

Walle多渠道打包

這種方法是很簡單省事,但是并不省時澳倏稹涂召!通過這種方式打包,gradle每次都要從資源文件開始到生成apk重新走一遍敏沉,所以很耗時果正,每次打包一次要等十幾分鐘,如果渠道多的app估計要等上半小時以上盟迟。這時候我們就要想想有沒有其他的打包方式了秋泳,剛好在推酷上看到了美團開源的Android Signature V2 Scheme 簽名下的新一代渠道包打包神器Walle,跟gradle打包不一樣攒菠,walle是在APK Signature Block區(qū)塊添加自定義的渠道信息迫皱,具體如下。

1490759814(1).jpg

當然了要尔,Walle并不是為了解決打包速度而產(chǎn)生的一個工具舍杜,美團研究walle的原因是因為在Android 7.0(Nougat)推出了新的應(yīng)用簽名方案APK Signature Scheme v2后新娜,之前快速生成渠道包的方式(美團Android自動化之旅—生成渠道包)已經(jīng)行不通了,具體可以看看Walle自己是怎么說的既绩。

Walle簡單使用

Gradle 插件使用方式

//配置 build.gradle
//在位于項目的根目錄 build.gradle 文件中添加Walle Gradle插件的依賴概龄, 如下:

buildscript {
    dependencies {
        classpath 'com.meituan.android.walle:plugin:1.0.3'
    }
}

//并在當前App的 build.gradle 文件中apply這個插件,并添加上用于讀取渠道號的AAR饲握,

apply plugin: 'walle'

//如果不需要通過walle獲取渠道號 則不需要加
dependencies {compile 'com.meituan.android.walle:library:1.0.3'}
Walle信息配置
//在當前App的 build.gradle 中添加如下信息
walle {
    // 指定渠道包的輸出路徑
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定制渠道包的APK的文件名稱 ${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk
    apkFileNameFormat = '${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")

}

配置項具體解釋:
apkOutputFolder:指定渠道包的輸出路徑私杜, 默認值為new File("${project.buildDir}/outputs/apk")

apkFileNameFormat:定制渠道包的APK的文件名稱, 默認值為'{appName}-{buildType}-${channel}.apk'
可使用以下變量:

projectName - 項目名字 
appName - App模塊名字
packageName - applicationId (App包名packageName) 
buildType - buildType (release/debug等) 
channel - channel名稱 (對應(yīng)渠道打包中的渠道名字) 
versionName - versionName (顯示用的版本號) 
versionCode - versionCode (內(nèi)部版本號) 
buildTime - buildTime (編譯構(gòu)建日期時間) 
fileSHA1 - fileSHA1 (最終APK文件的SHA1哈希值) 
flavorName - 編譯構(gòu)建 productFlavors 名

channelFile:包含渠道配置信息的文件路徑,channel文件放在module的同級目錄下救欧。 具體內(nèi)容格式詳見:渠道配置文件示例衰粹,支持使用#號添加注釋。

獲取渠道

在需要獲取渠道信息的地方使用如下代碼獲取渠道信息

String channel = WalleChannelReader.getChannel(this.getApplicationContext());

通過讀取<meta-data>來獲取渠道號

    private void readMetaDataFromApplication() {  
        try {  
            ApplicationInfo appInfo = this.getPackageManager()  
                    .getApplicationInfo(getPackageName(),  
                            PackageManager.GET_META_DATA);  
            String mTag = appInfo.metaData.getString("mTag");  
  
            Log.e(TAG, "mTag=" + mTag);  
  
        } catch (NameNotFoundException e) {  
            e.printStackTrace();  
        }  
    }  
打包

生成渠道包的方式是和assemble${variantName}Channels指令結(jié)合笆怠,渠道包的生成目錄默認存放在 build/outputs/apk/铝耻,也可以通過walle閉包中的apkOutputFolder參數(shù)來指定輸出目錄

用法示例:

  • 生成渠道包
mac ./gradlew clean assembleReleaseChannels
win  gradlew clean assembleReleaseChannels
  • 支持 productFlavors
mac ./gradlew clean assembleMeituanReleaseChannels
win  gradlew clean assembleMeituanReleaseChannels
  • 生成單個渠道包
mac ./gradlew clean assembleReleaseChannels -PchannelList=google
win   gradlew clean assembleReleaseChannels -PchannelList=google
  • 生成多個渠道包
mac ./gradlew clean assembleReleaseChannels -PchannelList=google,dianping
win  gradlew clean assembleReleaseChannels -PchannelList=google,dianping

釋放你的雙手,讓商務(wù)運營自己打包

walle-cli 是walle 提供的命令行工具 蹬刷,簡單的用法:

獲取信息

顯示當前apk中的渠道和額外信息:

java -jar walle-cli-all.jar show /Users/Meituan/app/build/outputs/apk/app.apk

寫入信息

寫入渠道

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk

寫入額外信息瓢捉,不提供渠道時不寫入渠道

java -jar walle-cli-all.jar put -c meituan -e buildtime=20161212,hash=xxxxxxx /Users/xxx/Downloads/app.apk

指定輸出文件,自定義名稱办成。 不指定時默認與原apk包同目錄泡态。

java -jar walle-cli-all.jar put -c meituan /Users/Meituan/Downloads/app.apk /Users/xxx/Downloads/app-new-hahha.apk

批量寫入
命令行指定渠道列表
java -jar walle-cli-all.jar batch -c meituan,meituan2,meituan3 /Users/walle/app/build/outputs/apk/app.apk

指定渠道配置文件
java -jar walle-cli-all.jar batch -f /Users/Meituan/walle/app/channel  /Users/Meituan/walle/app/build/outputs/apk/app.apk

配置文件示例 支持使用#號添加注釋

輸出目錄可指定,不指定時默認在原apk包同目錄下迂卢。

指定渠道&額外信息配置文件
java -jar walle-cli-all.jar batch2 -f /Users/Meituan/walle/app/config.json  /Users/Meituan/walle/app/build/outputs/apk/app.apk

配置文件示例

輸出目錄可指定某弦,不指定時默認在原apk包同目錄下。

更多用法

獲取cli所有功能

java -jar walle-cli-all.jar -h
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末而克,一起剝皮案震驚了整個濱河市靶壮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拍摇,老刑警劉巖亮钦,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馆截,死亡現(xiàn)場離奇詭異充活,居然都是意外死亡,警方通過查閱死者的電腦和手機蜡娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門混卵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窖张,你說我怎么就攤上這事幕随。” “怎么了宿接?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵赘淮,是天一觀的道長辕录。 經(jīng)常有香客問我,道長梢卸,這世上最難降的妖魔是什么走诞? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蛤高,結(jié)果婚禮上蚣旱,老公的妹妹穿的比我還像新娘。我一直安慰自己戴陡,他們只是感情好塞绿,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著恤批,像睡著了一般异吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喜庞,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天涧黄,我揣著相機與錄音,去河邊找鬼赋荆。 笑死笋妥,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的窄潭。 我是一名探鬼主播春宣,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫉你!你這毒婦竟也來了月帝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幽污,失蹤者是張志新(化名)和其女友劉穎嚷辅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體距误,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡簸搞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了准潭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁俊。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刑然,靈堂內(nèi)的尸體忽然破棺而出寺擂,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布怔软,位于F島的核電站垦细,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挡逼。R本人自食惡果不足惜蝠检,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挚瘟。 院中可真熱鬧叹谁,春花似錦、人聲如沸乘盖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽订框。三九已至析苫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間穿扳,已是汗流浹背衩侥。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留矛物,地道東北人茫死。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像履羞,于是被迫代替她去往敵國和親峦萎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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