由于项目提测需要编译出apk然后发布到蒲公英平台供测试人员下载,在之前是需要手动编译出apk文件然后打开蒲公英网站再手动上传发布到平台,这样如果要上传几个不同的版本和渠道包就比较麻烦,于是,一个能一键自动化编译出想要的渠道和版本的apk并自动发布到蒲公英平台的功能就显得有必要了。
功能的完整流程可以分为两部分,分别为通过gradle的task任务编译出apk以及shell命令上传apk到蒲公英平台。

task debugTask() {//该任务是清理apk的文件,保证生成的apk是最新且唯一dependsOn 'clearBacApkDir'//这个任务是结合walle编译渠道包 若无该需求则直接使用assembleDebug就行dependsOn 'walleDebug'
//    dependsOn 'assembleDebug
}task clearBacApkDir(type: Delete) {String bakPath = "./channels"file(bakPath).list().each {f ->delete "${bakPath}/${f}"}println "删除channels文件"
}task walleDebug(type: Exec) {//此处指定commandLine的执行文件 我们执行的文件gradlew位于APP的上层目录 因此"../"workingDir "../"//walle的单渠道打包命令为./gradlew clean assembleReleaseChannels -PchannelList=meituancommandLine "./gradlew", "clean", "assembleDebugChannels", "-PchannelList=huawei"
}//一键自动打包上传蒲公英的任务  最终只需执行该任务就可自动打包发布到蒲公英平台了
task uploadDebugApkTask(type: Exec) {dependsOn 'debugTask'def mode = "debug"def remark = "debug环境包"//uploadApk.sh为shell文件 负责获取到编译出来的apk并上传到蒲公英平台commandLine 'sh', '-c', "./sh/uploadApk.sh $mode $remark"
}//walle的编译渠道 文件命名等配置
walle {// 指定默认的渠道包的输出路径apkOutputFolder = new File("${project.getProjectDir()}/channels")// 定制渠道包的APK的文件名称apkFileNameFormat = 'doctor_${channel}_v${versionName}_${buildType}.apk';// 渠道配置文件channelFile = new File("${project.getProjectDir()}/channel")
}afterEvaluate {project.android.applicationVariants.all { BaseVariant variant ->variant.assemble.doFirst {//实际上渠道包的输出路径project.walle.apkOutputFolder = new File("${project.getProjectDir()}/channels/${variant.getBuildType().name}")project.walle.channelFile = new File("${project.getProjectDir()}/channel")}}
}

下面为.sh文件的内容 主要是获取到编译出来的apk文件并上传到蒲公英平台

#!/bin/sh
#MAIN_MODULE指AndroidStudio工程目录下面主module
MAIN_MODULE="."#从build.gradle中传入的两个参数 MODE为编译的类型 REMARK为描述
MODE=$1
REMARK=$2#蒲公英API账号 通过蒲公英平台的api信息查看后填入
PGYER_API_KEY=""
PGYER_USER_KEY=""
#APK路径
//若使用assembleDebug打包 则使用下面被注释的APK_PATH
#APK_PATH="${MAIN_MODULE}/build/outputs/apk/${MODE}"
APK_PATH="${MAIN_MODULE}/channels/${MODE}"
echo "current path: $APK_PATH"
#遍历apk
for APK_FILE in ${APK_PATH}/*; doAPK_NAME=`basename $APK_FILE`if [[ "$APK_NAME" =~ "${MODE}.apk" ]];thenecho "Upload apk:$APK_NAME"breakfi
done
#curl上传至蒲公英,默认直接发布,不发布到广场
curl -F "file=@${APK_PATH}/${APK_NAME}" -F "userKey=${PGYER_USER_KEY}" -F "_api_key=${PGYER_API_KEY}" -F "buildUpdateDescription=${REMARK}"  http://www.pgyer.com/apiv2/app/upload

至此,一套Mac环境下得Android一键自动打包上传到蒲公英的功能就完成了,若需要编译预发与生产环境,则只需要将上面的任务copy一下,将Debug分别改为Preissue与Release就可以了。只需要在Terminal中执行./gradlew uploadDebugApkTask 或者双击as中右侧gradle里出现的uploadDebugApkTask,就可以轻松打包发布了。当然,有条件的同学可以通过Jenkins配置远程打包,让测试同学自己就可以编译出自己想要的包,从此测试同学能随时编译出自己想要的环境和版本的包,开发的同学们也就不用经常在快乐的敲代码途中被测试同学催着打包各种版本和环境的包了。

Mac环境下Android一键自动打包发布到蒲公英平台相关推荐

  1. Android——Gradle自动打包上传蒲公英并进行钉钉群提醒

    开发测试阶段频繁打包未免太过枯燥,自动打包发布解放双手.上一节我们分析了fastlane打包发布的过程,嗯~总体来说有点繁琐,而且Android使用fast lane自动打包网上资料比较少,出错之后解 ...

  2. android mac转数据格式转换,mac环境下Android 反编译

    一.需要的工具 apktool:反编译APK文件,得到classes.dex文件,同时也能获取到资源文件以及布局文件. dex2jar:将反编译后的classes.dex文件转化为.jar文件. jd ...

  3. Xcode自动打包和上传蒲公英平台脚本(用python实现)

    介绍 工作中,特别是所做项目进入测试阶段,肯定会经常打 Ad-hoc 包给测试人员进行测试,但是我们肯定不想每次进行打包的时候都要进行一些工程的设置修改,以及一系列的 next 按钮点击操作,现在就让 ...

  4. Jenkins实现android自动打包 上传蒲公英及fir.im

    下载jenkins https://jenkins.io/index.html 下载后得到jenkins.msi文件,直接安装 访问http://localhost:8080 选择安装推荐的插件之后进 ...

  5. 自动打包linux,Linux环境下Springboot自动打包发布功能

    实现核心功能:完成Linux环境下Springboot自动打包发布功能 详细功能: 自动更新Svn最新代码 删除原有打包文件 自动打包 将打包之后的项目文件复制到其他服务器 关闭本地项目进程 重新启动 ...

  6. Mac 环境下完美获取获取正式版SHA1和发布版SHA1

    本文转发自:https://blog.csdn.net/w13576267399/article/details/83007537#SHA1_6 Mac 环境下完美获取获取正式版SHA1和发布版SHA ...

  7. mac环境下node.js和phonegap/cordova创建ios和android应用

    mac环境下node.js和phonegap/cordova创建ios和android应用 一介布衣  2015-01-12   nodejs  6888 分享到:QQ空间新浪微博腾讯微博人人网微信 ...

  8. Android Studio开发环境下让App自动签名

    Android Studio开发环境下让App自动签名 前言: 分享这个的原因有两个: 第一,在开发的过程中我们会发现关于微信的分享支付或者是支付宝的支付等一些功能的时候必须是要签名包,否则会失败,每 ...

  9. 【安卓开发系列 -- 开发环境】Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具)

    [安卓开发系列 -- 开发环境]Unbuntu 下 Android 持续集成打包环境搭建 -- Jenkins 构建工具安装(gradle + git + android 工具) [1]Unbuntu ...

最新文章

  1. 数据库中自定义排序规则,Mysql中自定义字段排序规则,Oracle中自定义字段排序规则,decode函数的用法,field函数的用法
  2. 售前比售后机器人控制逻辑更复杂,仅凭大规模数据后发优势难赶超!
  3. 图灵2010.06书讯
  4. c语言的图像拼接,OpenCV实现多图像拼接成一张大图分享!
  5. 对数据库进行黑盒测试操作?
  6. 自由在博客里插入广告,有钱你不赚吗???
  7. node.js创建server
  8. 计算机组成原理—主存容量扩展
  9. ubuntu mysql远程连接
  10. 简述linux命令的,简述linux系统以及一些简单的命令
  11. Prescan入门教程之避坑笔记:初学者初用
  12. Python量化策略风险指标
  13. 字符串函数strtolower解析
  14. The harvester安装使用
  15. 恩信ERP7.10安装、定制和二次开发
  16. JavaStream 常用操作(二)
  17. 2019年新版新媒体运营学习路线,附完整视频+工具+运营经验
  18. MATLAB 与 音频处理 相关内容摘记
  19. Linux中进程的状态
  20. 俄大神 lopatkin Windows 精简优化系统 - 工具软件

热门文章

  1. 这又是一则招聘贴——招聘区块链系统开发的同学
  2. C++学习笔记:fstream,ifstream和oftream的区别
  3. Python特征分析- 相关性分析
  4. 股票配资系统平台源码搭建-股票配资交易软件开发
  5. python暴力破解zip加密文件
  6. 简明解释算法中的大O符号
  7. IDEA添加Java类注释模版
  8. MTL框架:模型、权重与融合公式
  9. AIT Worldwide Logistics与卡利塔航空建立民航预备队合作伙伴关系
  10. 国产六大CPU厂商,近两年进展如何?