频繁的打包构建,时不时发布更新,是否总防不胜防的扰乱你的工做(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