美團多渠道打包神器——walle

美團新一代渠道包打包神器walle github地址

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中就是你的渠道包文件啦。

打包文件夾下載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章