Android-Gradle打包上传到蒲公英并提醒到钉钉
本文最后更新于 643 天前

1. 新建dingding.gradle

未开启签名认证,如需签名按照钉钉文档来即可

import groovy.json.JsonBuilder
import groovy.json.JsonOutput

def dingDingUrl = "https://oapi.dingtalk.com/robot/send?access_token=344de308d49322348c1356de11cac6bbbf6f75ca610b801b1b4bd3f2a079b61c"

ext.postDingMsg = { String qrcodeUrl, String downloadUrl ->
    String allTips =
            "版本号:V{rootProject.ext.android["versionName"]}\n" +
                    "{downloadUrl}\n"

    postAll(dingDingUrl, allTips, qrcodeUrl, downloadUrl)
}

//发送到群,@所有人
def postAll(url, tips, qrcodeUrl, downloadUrl) {

    JsonBuilder builder = new JsonBuilder()
    builder {
        msgtype 'link'
        link {
            title '安卓内测更新'
            text tips
            messageUrl downloadUrl
            picUrl qrcodeUrl
        }
        at {
            isAtAll false   //@所有人(只有text,markdown,actioncard这三种消息类型支持@功能)
        }
    }
    String data = JsonOutput.prettyPrint(builder.toString())
    postDingDing(url, data)
}

//调用接口,发送消息
def postDingDing(urlString, msg) {
    if (msg == null) {
        return
    }
    HttpURLConnection conn = null
    OutputStream outputStream = null
    try {
        if (conn == null) {
            Long timestamp = System.currentTimeMillis()
            URL url = new URL(urlString + "&timestamp={timestamp}")
            conn = (HttpURLConnection) url.openConnection()
        }
        if (conn != null) {
            conn.setReadTimeout(15000)
            conn.setConnectTimeout(15000)
            conn.setDoOutput(true)
            conn.setDoInput(true);
            conn.setRequestMethod("POST");
            conn.setUseCaches(false)
            conn.setRequestProperty("Content-Type", "application/json;charset=utf-8")
            conn.connect()
        }

        if (msg != null && msg.length()>0) {
            DataOutputStream dataOutputStream = new DataOutputStream(conn.getOutputStream())
            byte[] t = msg.getBytes("utf-8")
            dataOutputStream.write(t)
            dataOutputStream.flush()
            dataOutputStream.close()

            int res = conn.getResponseCode()
            if (res == 200) {  //成功
                InputStream input = conn.getInputStream()
                println "发送消息成功:{readString(input)}"
            } else {
                println("发送消息失败: " + conn.getResponseCode())
            }
        }
    } catch (EOFException e) {
        e.printStackTrace()
    } catch (IOException e) {
        e.printStackTrace()
    } finally {
        if (outputStream != null) {
            try {
                outputStream.close()
            } catch (IOException e) {
                e.printStackTrace()
            }
        }
        if (conn != null) {
            conn.disconnect()
        }
    }
}

/**
 * 读取网络流
 */
private static String readString(InputStream inputStream) throws IOException {
    int count = 0;
    while (count == 0) {
        count = inputStream.available();
        //我们可以在次处加上超时判断
    }
    byte[] b = new byte[count];
    if (inputStream.read(b) != -1) {
        return new String(b);
    }
    return "";
}

2. 项目build.gradle

def getApkFullPath() {
    return "{projectDir.absolutePath}/build/outputs/apk/release/apkFileName"
}

private def uploadPGY(String filePath) {
    def stdout = new ByteArrayOutputStream()
    exec {
        executable = 'curl'
        args = ['-F', "file=@{filePath}", '-F', "_api_key={rootProject.ext.pgy["apiKey"]}", rootProject.ext.pgy["uploadUrl"]]
        standardOutput = stdout
    }
    String output = stdout.toString()
    def parsedJson = new JsonSlurper().parseText(output)
    println parsedJson.data.buildQRCodeURL
    println "蒲公英上传完成 版本号:" + parsedJson.data.buildVersion

    println "开始发送钉钉群通知"
    def downloadUrl = "https://www.pgyer.com/" + parsedJson.data.buildShortcutUrl
    postDingMsg(parsedJson.data.buildQRCodeURL, downloadUrl)
}

task uploadApk(dependsOn: "assemble") {
    group = "publish"
    doLast {
        def apk = getApkFullPath()
        println "打包完成: $apk"
        println "开始上传蒲公英"
        uploadPGY(apk)
    }
}

3. 其他补充记录

  • 获取打包后路径
android.applicationVariants.all { variant ->
    if ( (variant.name).equals("release") ) {
        variant.outputs.each { output ->
            apk = output.outputFile
        }
    }
}
  • 修改打包后的路径和文件名称
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            String timeStr = new SimpleDateFormat("MM-dd-HH-mm").format(new Date());
            if (variant.buildType.name == "debug") {
                apkFileName = "anmo-debug-{defaultConfig.versionName}-{timeStr}.apk"
                output.outputFileName = apkFileName
            } else if (variant.buildType.name == "release") {
                apkFileName = "anmo-{defaultConfig.versionName}-{timeStr}.apk"
                output.outputFileName = apkFileName
            }
        }
    }
iichen:https://iichen.cn/?p=524
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇