頻繁的打包構建,時不時發佈更新,是否總防不勝防的擾亂你的工做(tou lan)狀態?(◐‿◑)java
這是一篇簡「短」解決方法,讓Apk的構建參數徹底由外界決定。經過外部配置版本信息、服務器地址、渠道、編譯sdk版本等,直接構建apk,無需開發人員再次修改提交gradle等文件,解放你的雙手吧。shell
以上場景,其實來源於最近的平常需求。由於項目的構建、測試、發佈,都是在固定的打包服務器完成,也就是遠程打包,而後生成二維碼下載。json
然而不少時候,服務端人員、測試或者產品人員,時不時須要構建一些定製化的apk,例如不一樣的服務器地址、不一樣的編譯sdk版本、不一樣的版本號信息和so過濾等等。剛開始因爲忙(lan)的緣故,都是有須要就修改提交打包,時間長後就十分影響工做(xin qing)了(╯‵□′)╯︵┻━┻。bash
那麼說幹就要上正面,既然gradle原本就採用了 Groovy 做爲語言,並且默認導入了java的基礎類,Groovy又支持Java語言的特性···天做之合啊有木有,不擼不是猴啊。服務器
打包開始,服務器提供一個簡單的頁面,用戶選擇輸入須要打包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