前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >让Gradle放飞你的apk构建

让Gradle放飞你的apk构建

作者头像
GSYTech
发布2018-08-22 11:35:49
3400
发布2018-08-22 11:35:49
举报
文章被收录于专栏:移动开发之家移动开发之家

 频繁的打包构建,时不时发布更新,是否总防不胜防的扰乱你的工作(tou lan)状态?(◐‿◑)

 这是一篇简“短”解决方法,让Apk的构建参数完全由外界决定。通过外部配置版本信息、服务器地址、渠道、编译sdk版本等,直接构建apk,无需开发人员再次修改提交gradle等文件,解放你的双手吧。

本文虽短,节操满满

 以上场景,其实来源于最近的日常需求。因为项目的构建、测试、发布,都是在固定的打包服务器完成,也就是远程打包,然后生成二维码下载。

 然而很多时候,服务端人员、测试或者产品人员,时不时需要构建一些定制化的apk,例如不同的服务器地址、不同的编译sdk版本、不同的版本号信息和so过滤等等。刚开始由于忙(lan)的缘故,都是有需要就修改提交打包,时间长后就十分影响工作(xin qing)了(╯‵□′)╯︵┻━┻。

 那么说干就要上正面,既然gradle本来就采用了 Groovy 作为语言,而且默认导入了java的基础类,Groovy又支持Java语言的特性···天作之合啊有木有,不撸不是猴啊。

 Gradle中可简单分两步实现:
  • 1、定义方法,通过Java的HttpURLConnection,简单获取用户配置好的参数信息,通过Groovy 的JsonSlurper 解析数据。

熟悉又简单的写法╮(╯▽╰)╭

  • 2、通过服务器返回的配置信息,填充到gradle打包需要的参数中,再打包出对应的apk。

根据参数导入,so easy

 打包开始,服务器提供一个简单的页面,用户选择输入需要打包apk的版本号、版本名,渠道、服务器地址等信息,然后执行gradlew打包。gradle脚本会先请求当前的配置信息,填充直接打包所需的apk,而从中解放出来你(wo),终于可以安心工作(tou lan),然后为所欲为了(-_^)。

 当然,这并不是一定最好的实现场景,但是对我而言,在目前的条件下,确实最合适不过了,简单便捷的解决思路之一。本文也不是什么高深的东西,只算是一次简单的解决记录吧,毕竟刚开始还想着,用shell脚本去对打包好的apk坐二次处理( ̄^ ̄)···

代码语言:javascript
复制
//导入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,但是当你越发深入的撩解之后,也许你连女朋友的电话都不想接了,前提是···

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.04.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  •  Gradle中可简单分两步实现:
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档