IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android——Gradle自动打包上传蒲公英并进行钉钉群提醒 -> 正文阅读

[移动开发]Android——Gradle自动打包上传蒲公英并进行钉钉群提醒

开发测试阶段频繁打包未免太过枯燥,自动打包发布解放双手。上一节我们分析了fastlane打包发布的过程,嗯~总体来说有点繁琐,而且Android使用fast lane自动打包网上资料比较少,出错之后解决难度颇大。所以今天我们来用一种更简便的方式进行自动打包发布。

1、Gradle自动打包发布蒲公英

蒲公英上传Apk官方文档

apply from: './dingding.gradle'//引用钉钉通知方法

def apkFileName = "${buildTime()}_test_v${rootProject.ext.android["versionName"]}_release.apk"
def apkFilePath = "${projectDir.absolutePath}/build/outputs/apk/test/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 groovy.json.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: '打包Task名称') {//可以从Gradle的Task列表中选取,也可以点击查看Generate Signed Bundle/Apk执行的task是什么,复制出来就好了
    group = "publish"//GradleTask列表中会生成一个publish的分组,里面包含uploadApk,后续只要点击这个uploadTask任务就可以自动打包发布了
    doLast {
        println "打包完成: ${apkFilePath}"
        println "开始上传蒲公英"
        uploadPGY(apkFilePath)
    }
}

注:记得在app的build.gradle里面引入这个文件。

2、钉钉群通知

自定义钉钉机器人文档

1、创建自定义钉钉机器人

点击群组右上角设置按钮打开群设置->智能群助手->添加机器人->自定义机器人->填写机器人名称和关键词(这里的关键词后面发送钉钉群组消息的时候消息内容必须包含该关键词,否则发送不成功)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、接入钉钉群通知

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

def dingDingUrl = "https://oapi.dingtalk.com/robot/send?access_token=${rootProject.ext.dingding["accessToken"]}"

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   //@所有人
        }
    }
    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) {
            URL url = new URL(urlString)
            conn = (HttpURLConnection) url.openConnection()
        }
        if (conn != null) {
            conn.setReadTimeout(15000)
            conn.setConnectTimeout(15000)
            conn.setDoOutput(true)
            conn.setUseCaches(false)
            conn.setRequestProperty("Content-Type", "application/json; charset=utf-8")
        }

        if (conn == null) {
            return null
        }
        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()
                StringBuffer sb = new StringBuffer()
                int ss
                while ((ss = input.read()) != -1) {
                    sb.append((char) ss)
                }
                println "发送消息成功: ${sb.toString()}"
            } 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()
        }
    }
}

找到刚才新建的机器人并打开
在这里插入图片描述
复制Webhook地址可以看到accessToken字段。下面我们来把需要用的参数配置一下。
群组消息类型可以参考官方文档根据自己的需求调整下。代码中默认为link类型。

3、相关配置

打开根目录的build.gradle并填写一下代码:

ext {
    android = [
            versionCode: 1,
            versionName: "1.0.0.0"
    ]

    pgy = [
            apiKey     : "xxx",
            uploadUrl  : "https://www.pgyer.com/apiv2/app/upload"
    ]

    dingding = [
            accessToken: "xxx",
    ]
}

4、效果图:

在这里插入图片描述

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-05-16 11:23:47  更:2022-05-16 11:24:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 1:36:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码