实用Gradle-监控包体积

502 阅读1分钟

概述

最新项目出现了包体积上涨很多的问题,但是确不知到底是哪次提交导致的,为了避免后续再出现这种情况,利用gradle写了个包体积监控的任务。

流程

钉钉通知格式

实现

import org.apache.http.HttpResponseimport org.apache.http.HttpStatusimport org.apache.http.client.HttpClientimport org.apache.http.client.methods.HttpPostimport org.apache.http.entity.StringEntityimport org.apache.http.impl.client.HttpClientsimport org.apache.http.util.EntityUtils import java.text.SimpleDateFormat def taskName = gradle.startParameter.taskNames[0]def apkOutContext android {     applicationVariants.all {        String variant = it.buildType.name        String buildName = ""        it.productFlavors.each { product ->            buildName = product.name        }        if (variant == "release" || variant == "Release") {            it.outputs.each {                if("assembleRelease" == taskName) {                    apkOutContext = it                }             }        }    }} buildscript {    dependencies {        classpath fileTree(include: ['*.jar'], dir: new File(project.rootDir, "libs"))    }} gradle.buildFinished {    if (apkOutContext == null) {        return    }    def apkFile = apkOutContext.outputFile    def branchName = getGitBranch()    def date = getToday()    def versionName = android.defaultConfig.versionName    StringBuilder message = new StringBuilder()    message.append("\r\n")            .append("打包人:").append(getUserName())            .append("\r\n")            .append("项目:").append("满帮专车")            .append("\r\n")            .append("版本号:").append(versionName)            .append("\r\n")            .append("分支:").append(branchName)            .append("\r\n")            .append("大小:").append(getApkFileSize(apkFile))            .append("\r\n")            .append("生成时间:").append(date)     DingDing.send(message.toString())}  static def getApkFileSize(apkFile) {    return (apkFile.length() / 1024) + "k"} static def getGitBranch() {    return 'git symbolic-ref --short -q HEAD'.execute().text.trim()} static def getUserName() {    return 'git config user.name'.execute().text.trim()} static def getToday() {    String str    SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd/HH:mm:ss")    Calendar lastDate = Calendar.getInstance()    str = sdf.format(lastDate.getTime())    return str} class DingDing {     public static final String WEBHOOK_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=XXX"     static void send(String message) {        try {            sendMessageImp("打包信息", message)        } catch (Exception e) {            e.printStackTrace()        }    }     private static void sendMessageImp(String title, String message) throws Exception {        HttpClient httpclient = HttpClients.createDefault()         HttpPost httppost = new HttpPost(WEBHOOK_TOKEN)        httppost.addHeader("Content-Type", "application/json; charset=utf-8")         String textMsg = "{ \"msgtype\": \"text\", \"text\": {\"content\": \"" + title + ":" + message + "\"}}"        StringEntity se = new StringEntity(textMsg, "utf-8")        httppost.setEntity(se)         HttpResponse response = httpclient.execute(httppost)        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {            String result = EntityUtils.toString(response.getEntity(), "utf-8")            System.out.println(result)        }    }}    

依赖两个附件:

httpclient-4.5.9.jar

httpcore-4.4.11.jar