Android gradle插件:一键上传Apk到蒲公英,并发送消息到钉钉、飞书等平台

我们有这样的场景,在项目开发测试阶段,经常会将apk打包后,上传到蒲公英等三方平台,然后再发给公司其他人员进行测试、体验。每次发包的时候要去进行上传、上传完后通知相关人员,导致有点繁琐,浪费时间。此插件为了解决这个问题。

Gradle插件,依赖进项目工程,编译APK,使用Task命令一键上传apk到三方平台,如:蒲公英。(目前暂时只支持蒲公英,可以进行扩展)。 上传成功后,如果你需要提醒其他人员进行版本更新,如:钉钉群、飞书群等(目前示例做了这两个,还可扩展企业微信等),配置相关参数,自动发送更新消息提示到群里。

更新记录:

2022-08-22:
蒲公英官方上传接口做了调整,原有接口将废弃,插件已根据文档做升级。
修复版本v1.0.3

2022-09-3:
(1)修复发送消息到飞书出现msg_type参数错误问题;
(2)新增Git提交日志参数,用于发送消息时携带Git日志;
(3)完善飞书、钉钉、微信发送消息的类型并添加Git日志
修复版本v1.0.6

2022-10-30:
【新增】根据配置(uploadApkFilePath)要上传的APK文件路径,通过Task直接上传Apk。v1.0.7
这样减少编译流程和支持上传自己加固后的包。

使用步骤

1、在项目工程跟目录,工程的build.gradle dependencies中添加:

classpath 'com.github.centerzx:UploadApkPlugin:v***'
目前版本为:

classpath 'com.github.centerzx:UploadApkPlugin:v1.0.7'

repositories中添加:

maven { url "https://jitpack.io"}

2、在app目录(需要打包上传的APK的Module)的build.gradle中添加引用插件:

apply plugin: 'center.uploadpgy.plugin'

引入后,配置自己的相关平台参数:

(1)上传到蒲公英的相关配置参数

uploadPgyParams {
     apiKey = "替换为自己蒲公英账户的apiKey"
     // apiKey = readProperties("PgyApiKey")
     //暂时无用
     appName = "TestGradlePlugin" 
     buildTypeName = "Release"
     buildInstallType = 2 
     buildPassword = "zx"

      uploadApkFilePath = "E:\\Desktop\\release\\app_name-debug.apk"
}

(2)发送消息到钉钉的相关配置参数

buildDingParams {
    accessToken =  "替换为自己钉钉的token"
    // accessToken = readProperties("DingAccessToken")
    contentText = "最新开发测试包已经上传至蒲公英, 可以下载使用了"
    contentTitle = "开发测试包"
    //link类型(link)、markdown类型(markdown)、整体跳转ActionCard类型(actionCard),默认link
    msgtype = "actionCard"
    //如果使用markdown类型可添加参数是否@全体群人员,默认false:isAtAll = true。其他类型不支持
    isAtAll = true
    //存在点击时按钮的文案(link类型无)
    clickTxt = "点击进行下载"
    //是否单独支持发送Git记录数据,在配置了buildGitLogParams前提下有效,默认为true。link字数问题,无法支持
    isSupportGitLog = true
}

(3)发送消息到飞书的相关配置参数

buildFeiShuParams {
    webHookHostUrl = "https://open.feishu.cn/open-apis/bot/v2/hook/************"
    // webHookHostUrl = readProperties("FeiShuWebHookHostUrl")
    contentTitle = "开发测试包"
    contentText = "最新开发测试包已经上传至蒲公英, 可以下载使用了"
    //富文本消息(post)、消息卡片(interactive),默认post
    msgtype = "post"
    //是否@全体群人员,默认false:isAtAll = true
    isAtAll = true
    clickTxt = "点击进行下载"
    //是否单独支持发送Git记录数据,在配置了buildGitLogParams前提下有效,默认为true
    isSupportGitLog = true
}

(4)发送消息到企业微信群的相关配置参数

buildWeixinGroupParams {
    // webHookHostUrl = readProperties("WeixinWebHookUrl")
    webHookUrl = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=************"
    //文本(text)、markdown(markdown)、图文(news),默认 markdown。由于字数限制,只有markdown支持携带Git记录
    msgtype = "markdown"
    //如果使用文本类型(text)可添加参数是否@全体群人员,默认true:isAtAll = true。其他类型不支持
    //isAtAll = true
    contentTitle = "开发测试包"
    contentText = "最新开发测试包已经上传至蒲公英, 可以下载使用了"
    //是否单独支持发送Git记录数据,在配置了buildGitLogParams前提下有效,默认为true。只有markdown类型支持
    isSupportGitLog = true
}

(5)发送消息时携带Git提交记录相关配置参数

buildGitLogParams {
    //是否发送消息是携带Git记录日志,如果配置了这块参数才会携带Git记录,消息里面可以单独设置是否携带Git日志数据

    //获取以当前时间为基准至N天之前的Git记录(限定时间范围),不填或小于等于0为全部记录,会结合数量进行获取
    gitLogHistoryDayTime = 3
    //显示Git记录的最大数量,值范围1~50,不填默认是10条,最大数量50条
    gitLogMaxCount = 20
}

发送提示信息配置配置了才会发送,如果只有钉钉,只配置钉钉信息即可。其中各个参数体的名称不能变,否则编译会报错,参数key不能修改,对应的值可以根据自己情况修改。
参数中的“***************”是根据蒲公英、钉钉、飞书等情况进行配置。
由于key、token等信息都需要保密,万一泄漏,可能被别有用心的人乱使用,故可以将相关关键信息保存在工程的:local.properties文件里面,此文件一般是根据自己本地进行配置的,不会上传到git。然后进行数据读取,如:readProperties("PgyApiKey")
将密钥存在本地 防止泄露 local.properties 在Git的时候不会被上传

def readProperties(key) {
 File file = rootProject.file('local.properties')
 if (file.exists()) { 
     InputStream inputStream = file .newDataInputStream()
     Properties properties = new Properties()
     properties.load(inputStream)
     if (properties.containsKey(key)){
           return properties.getProperty(key)
       }
    }
  }

注意:由于这样会导致app的gradle看着很臃肿,因此可以单独新建一个gradle文件进行配置,然后再在app的gradle文件中apply from: "../******.gradle"这个新建gradle就行。

3、配置完备,进行编译:

此时在studio的右边,tasks里面会新增一个publishToThirdPlatform 命令组,里面会有3个task:ApkBuildUploadPlatformDebug、ApkBuildUploadPlatformRelease、OnlyUploadApkToPlatform,其中OnlyUploadApkToPlatform为直接上传APK操作,配置uploadApkFilePath路径后有效。gradlew或者点击运行组里面的task命令,则可直接进行编译、打包、传送、发消息等一些列操作。


Task命令生成.png

在执行task命令时,studio的run窗口会展示执行情况,包括蒲公英上传情况、钉钉飞书等消息发送情况,一目了然。


Task运行结果输出.png
钉钉actionCard效果.png
钉钉link型消息.png
钉钉markdown效果.png
飞书interactive效果.png
飞书post效果.png

附Github:
源代码地址:https://github.com/centerzx/UploadApkPlugin

后期展望:

1、扩展新增firim上传APK包形式(来自:https://github.com/D-zy 建议)
2、扩展新增发送的消息中自动携带Git的提交记录描述(已完成。来自 https://github.com/alizhijun 建议)
3、扩展新增多渠道打包(来自:https://github.com/alizhijun 建议)
4、扩展新增Apk加固(来自:https://github.com/j-gin 建议)
方案:由于每个公司或者项目组可能用的加固方案不同,故使用配置上传APK路径(加固后的APK路径)形式达到目的。

大概情况是这样,如有不足和错误的地方,欢迎大家讨论指正和建议!感谢大家star,转载请标明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容