讓Gradle放飛你的apk構建

 頻繁的打包構建,時不時發佈更新,是否總防不勝防的擾亂你的工做(tou lan)狀態?(◐‿◑)java

 這是一篇簡「短」解決方法,讓Apk的構建參數徹底由外界決定。經過外部配置版本信息、服務器地址、渠道、編譯sdk版本等,直接構建apk,無需開發人員再次修改提交gradle等文件,解放你的雙手吧。shell

本文雖短,節操滿滿

 以上場景,其實來源於最近的平常需求。由於項目的構建、測試、發佈,都是在固定的打包服務器完成,也就是遠程打包,而後生成二維碼下載。json

 然而不少時候,服務端人員、測試或者產品人員,時不時須要構建一些定製化的apk,例如不一樣的服務器地址、不一樣的編譯sdk版本、不一樣的版本號信息和so過濾等等。剛開始因爲忙(lan)的緣故,都是有須要就修改提交打包,時間長後就十分影響工做(xin qing)了(╯‵□′)╯︵┻━┻。bash

 那麼說幹就要上正面,既然gradle原本就採用了 Groovy 做爲語言,並且默認導入了java的基礎類,Groovy又支持Java語言的特性···天做之合啊有木有,不擼不是猴啊。服務器

 Gradle中可簡單分兩步實現:

  • 一、定義方法,經過Java的HttpURLConnection,簡單獲取用戶配置好的參數信息,經過Groovy 的JsonSlurper 解析數據。

熟悉又簡單的寫法╮(╯▽╰)╭

  • 二、經過服務器返回的配置信息,填充到gradle打包須要的參數中,再打包出對應的apk。

根據參數導入,so easy

 打包開始,服務器提供一個簡單的頁面,用戶選擇輸入須要打包apk的版本號、版本名,渠道、服務器地址等信息,而後執行gradlew打包。gradle腳本會先請求當前的配置信息,填充直接打包所需的apk,而從中解放出來你(wo),終於能夠安心工做(tou lan),而後隨心所欲了(-_^)。app

 固然,這並非必定最好的實現場景,可是對我而言,在目前的條件下,確實最合適不過了,簡單便捷的解決思路之一。本文也不是什麼高深的東西,只算是一次簡單的解決記錄吧,畢竟剛開始還想着,用shell腳本去對打包好的apk坐二次處理( ̄^ ̄)測試

//導入groovy的Json解析
import groovy.json.JsonSlurper
def getTenantVersionName(def apkName) {
    //請求的打包信息的服務器地址
    def urlString = "http://xxxxxx?appName=${apkName}"
    def url = new URL(urlString)
    def packageInfoResult = null
    HttpURLConnection conn = (HttpURLConnection) url.openConnection()
    conn.setRequestMethod('GET')
    conn.setConnectTimeout(5000)
    int code = conn.getResponseCode()
    if(code == 200) {
        //請求成功
        InputStream is = conn.getInputStream()
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024]
        int len = 0
        while ((len = is.read(buffer)) != -1) {
            baos.write(buffer, 0, len)
        }
        baos.close()
        is.close()
        //轉換數據
        byte[] byteArray = baos.toByteArray()
        def result = new String(byteArray)
        def JsonSlurper = new JsonSlurper()
        packageInfoResult = JsonSlurper.parseText(result)
    }
    return packageInfoResult
}
複製代碼

最後

 也許平常開發中,你只是普通的配置gradle,可是當你愈加深刻的撩解以後,也許你連女友的電話都不想接了,前提是···gradle

相關文章
相關標籤/搜索