walle取自《機器人總動員》中的瓦力,一個孤獨的機器人。
由於我之前負責的項目都是屬於代碼方面,從來沒有負責過打渠道包,所以一直不曾使用過這個神器,直到最近項目要接入而我又恰巧負責。在上家公司的時候打渠道包要打14,5個渠道吧,我們一個apk打包的時間將近5分鐘,算下來一個多小時的時間都在打包,效率相當低下。
我們假設要打20個渠道包,每個apk正常打包的時間爲5分鐘
傳統的打包方式:
app.gradle文件中
flavorDimensions "xima"
productFlavors {
yingyongbao {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
}
xiaomi {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
}
share {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "share"]
}
huawei {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
}
baidu {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
}
oppo {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
}
vivo {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
}
meizu {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "meizu"]
}
lenovo {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "lenovo"]
}
qihu360 {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qihu360"]
}
aliyun {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "aliyun"]
}
chuizi {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "chuizi"]
}
rn {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "rn"]
}
earn {
dimension "xima"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "earn"]
}
}
在清單文件中
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}" />
這樣的話就可以在打包的時候提供一個佔位符,每一個渠道對應一個佔位符,這樣代碼就可以獲取到每一個渠道的名稱,使用友盟統計進入後臺。
這種方式的時間是:
20*5=100分鐘=1小時40分鐘
walle實現方式
1 我花5分鐘打出來一個不含任何渠道信息的包
2 我再花5秒複製一個apk然後寫入一個渠道的信息
3 重複2步驟,20次這樣我就得到了20個不同渠道的apk
這種方式的時間是:
5分鐘+20*5秒<7分鐘
孰優孰劣,一目瞭然
好東西當然在後面
目前walle有兩種實現方式,至於這兩種如何集成請看官網教程算是很詳細了:
1 Gradle插件方式,方便快速集成
2 命令行方式,最大化滿足各種自定義需求
懶人的話第一眼肯定想使用1方式集成,但是我們要想明白一件事:
我就是打個包,幹嘛非得項目裏面引用那麼多文件和依賴庫?我甭管哪些渠道最後就打出來一個release包然後單獨把release包拿出來去打衆多渠道包不就行了嗎?
沒錯,這就是2方式,但是一想到寫很多命令行,而且還要找目錄會很繁瑣,所以我這裏有一個腳本處理
你只需要把release包的apk拷到對應目錄下,然後執行腳本文件即可,不需要輸入walle一條命令即可完成打包
下載這個channelApk 文件夾,然後將release apk拷貝進src_apk文件下並命名,隨後執行buildChannels.sh腳本,等待一會就可以看到output中就是你的渠道包文件啦。