Android直接用手机打包apk!
你没有看错,用手机浏览器访问Jenkins,就可以打包apk,并生成下载二维码,发送邮件通知测试人员下载,从此解放双手,告别打包测试。先上本人手机邮箱收到的打包成功通知效果图:
废话少说,开干!
本人用的是Mac,以下操作都是在Mac环境下配置的,Windows环境的配置移步到Android使用Jenkins自动化构建测试打包apk
一、安装Jenkins
打开mac终端(本人用iTerm2),输入 brew install jenkins,brew命令得安装Homebrew,安装方法移步Mac终端软件安装利器:Homebrew
一会儿jenkins就装好了,默认安装路径为/usr/local/Cellar/jenkins,在终端输入 jenkins启动jenkins
第一次启动jenkins会提示一个秘钥,登录控制台要用到,也可以在路径/Users/用户名/.jenkins/secrets/initialAdminPassword下查看秘钥
在浏览器输入localhost:8080就可以登录jenkins控制台,输入刚才的秘钥,点击继续
插件安装选推荐的就好了
等待自动安装完成
创建一个管理员用户,保存并继续
设置Jenkins URL,默认为localhost,改成自己电脑的IP,即http://IP:8080,点击保存并完成
点击开始使用Jenkins,就可以进入控制台
二、配置jenkins
点击 系统管理--系统设置
拉到全局属性,勾选环境变量,添加键值对配置Android SDK
找到系统管理员邮件地址,输入自己的邮箱
找到邮件通知,如下配置,qq邮箱的SMTP服务器为smtp.qq.com,其他邮箱的自行百度
记得勾选使用SMTP认证,密码不是你的qq密码,而是邮箱服务器密码,可以到邮箱查看邮箱服务器密码,打开qq邮箱,点击 设置--账户 拉到如下位置
点击开启POP3/SMTP服务,如果之前已经开启了,先点击关闭再点开启,提示要验证密保
由于jenkins自带的邮件通知样式过于单调,而且不好用,所以我们用邮件扩展功能来自定义,拉到Extended E-mail Notification(没有这个选项的就是没装插件,主界面打开 系统管理--插件管理--可选插件,右上角搜索Email Extension Plugin进行安装),如下配置,跟刚才配置差不多
勾选Require Administrator for Template Testing,点击右边的Default Triggers...
点击保存,完成系统设置
接下来配置一下Gradle
用Android Studio打开svn项目,在gradle.properties添加如下配置
APP_VERSION = 1.0.0
IS_JENKINS = true
BUILD_TYPE = release
PRODUCT_FLAVORS = dev
BUILD_PATH_JENKINS = /Users/zachary/Documents/jenkins/remote
BUILD_PATH_LOCAL = /Users/zachary/Documents/jenkins/local
BUILD_TIME= 2018-7-27
APPNAME = SevenStars
以上为默认配置,字段等下在jenkins配置要用到,BUILD_PATH_JENKINS和BUILD_PATH_LOCAL为打包本地缓存目录
在app/build.gradle的android{}节点内修改下打包的apk名称
android.applicationVariants.all {
variant ->
variant.outputs.all {
//新名字
def newName
//输出文件夹
def outDirectory
//是否为Jenkins打包,输出路径不同
if ("true".equals(IS_JENKINS)) {
timeNow = BUILD_TIME
outDirectory = BUILD_PATH_JENKINS
//BUILD_PATH为服务器输出路径
variant.getPackageApplication().outputDirectory = new File(outDirectory)
newName=APPNAME+"-v"+APP_VERSION+'-'+variant.productFlavors[0].name+'-'+variant.buildType.name+'.apk'
} else {
outDirectory = BUILD_PATH_LOCAL
//本机打包输出在本机路径
variant.getPackageApplication().outputDirectory = new File(outDirectory)
newName=APPNAME+"-v"+APP_VERSION+'-'+variant.productFlavors[0].name+'-'+variant.buildType.name+'.apk' }
//在这里修改apk文件名
outputFileName = newName
}
}
回到jenkins,点击 配置--General,勾选参数化构建过程,选择 添加参数--选项参数
输入名称,与gradle.properties配置的字段一致,设置选项,输入app版本,描述随便填
继续点击 添加参数--字符参数
继续点击添加参数,添加两个选项参数,如下配置
这样配置的目的是为了让打包有更多可选项,设置完立即构建就变成了Build with Parameters
点击Build with Parameters可以看到多了构建选项
现在还不能构建,因为还没配置构建,回到 配置--构建 ,勾选Invoke Gradle
clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}
类似于Android Studio里的命令
点击 增加构建步骤--执行shell(上传apk到蒲公英生成二维码)
输入命令
curl -F "file=@/Users/zachary/Documents/jenkins/remote/SevenStars-v${APP_VERSION}-${PRODUCT_FLAVORS}-${BUILD_TYPE}.apk" -F "uKey=bfeb1a2e4febecd1b83878dd52c4fbfa" -F "_api_key=4481e4790641520d52c088291b4d8e79
" https://www.pgyer.com/apiv1/app/upload > /tmp/upload_app.txt
url=$(cat /tmp/upload_app.txt|awk -F':' '{print $(NF)}'|sed 's#\\##g')
echo "download_URL:<img src=$url>"
file的地址与gradle.properties配置的字段一致,自己体会啊哈哈......我怕被打,还是说一下,SevenStars-v${APP_VERSION}-${PRODUCT_FLAVORS}-${BUILD_TYPE}.apk
就是匹配如下路径的apk,然后上传蒲公英
uKey和_api_key登陆蒲公英可拿到(注册一个蒲公英账号就有啦)
点击保存,回到项目任务,如下点击,开始构建
可以打开下拉列表选择 控制台输出 查看日志
看到构建成功
此时还没有二维码,登陆蒲公英,如下操作复制二维码地址
回到 配置--构建,点击 增加构建步骤
在Description中设置二维码地址,语法为HTML<img src="蒲公英二维码地址">
点击保存,然后再次构建项目,就可以看到二维码啦
接着我们来配置邮件模板,点开 配置--构建后步骤,选择 增加构建后步骤--Editable Email Notification
在Default Content中黏贴如下html模板
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
</head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
offset="0">
<table width="95%" cellpadding="0" cellspacing="0"
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
<tr>
<td>(本邮件是程序自动下发的,请勿回复!)</td>
</tr>
<tr>
<td><h2>
<font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
</h2></td>
</tr>
<tr>
<td><b><font color="#0B610B">下载二维码</font></b></td>
</tr>
<tr>
<td><img src="https://www.pgyer.com/app/qrcode/m9dz">
</td>
</tr>
<tr>
<td><br />
<b><font color="#0B610B">构建信息</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>项目名称 : ${PROJECT_NAME}</li>
<li>构建编号 : 第${BUILD_NUMBER}次构建</li>
<li>SVN 版本: ${SVN_REVISION}</li>
<li>触发原因: ${CAUSE}</li>
<li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
<li>构建 Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
<li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
<li>项目 Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
</ul>
</td>
</tr>
<tr>
<td><b><font color="#0B610B">Changes Since Last
Successful Build:</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td>
<ul>
<li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
</ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat=" %p"}
</td>
</tr>
<tr>
<td><b>Failed Test Results</b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<tr>
<td><pre
style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
<br /></td>
</tr>
<tr>
<td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
<hr size="2" width="100%" align="center" /></td>
</tr>
<!-- <tr>
<td>Test Logs (if test has ran): <a
href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
<br />
<br />
</td>
</tr> -->
<tr>
<td><textarea cols="80" rows="30" readonly="readonly"
style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
</td>
</tr>
</table>
</body>
</html>
以下地方改成你的蒲公英二维码地址
拉到下面,Attach Build Log设置编译日志要不要发送到邮件,看具体需求,点开右边 高级设置
输入要发送的邮箱地址,多个用“,”隔开,一定要配置,不配置打死收不到邮件
点击保存,再次点击构建项目,不出意外的话,就可以收到邮件通知啦!
http://IP:端口号
(电脑和手机连接的网络必须在同一个局域网)登陆jenkins控制台,点击构建,就可以打包apk啦!如果同一个局域网还不能访问,链接launchd配置文件,终端输入
$ ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents
进入 /usr/local/opt/jenkins(Finder前往)用编辑器打开homebrew.mxcl.jenkins.plist
修改完成,执行命令行:
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist
这样局域网的其他电脑就能访问你的ip啦如果要外网也能访问,可以把jenkins部署到Tomcat或者服务器(自己研究啊哈哈~)
Githubhttps://github.com/Zachary46
博客园https://www.cnblogs.com/Zachary46
CSDN博客https://blog.csdn.net/Zachary_46
简书https://www.jianshu.com/u/c6a23c2b7697
掘金https://juejin.im/user/5b57e9a16fb9a04f8e1432ef
Android直接用手机打包apk!的更多相关文章
- Android studio 自己定义打包APK名称
Android Studio打包应用默认生成的apk名称是:app-release.apk .假设我们要让生成的apk名跟我们版本号包名有联系的话.那我们就要自己定义生成的apk名了,要怎么做呢. 我 ...
- Unity自动打包Apk
unity打包apk相对来说比较容易,相信出过的人都明白,出包过程,没有大的难度,一步一操作,一步一等待,繁琐耗时,不懂的人又代替不了.这时候需求就来了,如何简单的一键打包搞定,这个就稍微有点难度,当 ...
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- Unity编译Android的原理解析和apk打包分析
作者介绍:张坤 最近由于想在Scene的脚本组件中,调用Android的Activity的相关接口,就需要弄明白Scene和Activity的实际对应关系,并对Unity调用Android的部分原理进 ...
- Android Studio 学习笔记1.1 创建自己的第一个安卓项目并且打包APK
自从上一次安装完安卓开发工具Android Studio后抽时间看视屏尝试编写自己的第一个安卓项目约两周的时间 每天下班后会花上1~2小时的时间去学习 目前的成果如下:次元宅的我.apk 嘛 总而 ...
- Android studio打包APK混淆配置
要在打包APK时加入混淆需要在Module中的buid.gradle中加入如下信息 buildTypes { release { minifyEnabled true shrinkResources ...
- 【转】android Apk打包过程概述_android是如何打包apk的
最近看了老罗分析android资源管理和apk打包流程的博客,参考其他一些资料,做了一下整理,脱离繁琐的打包细节和数据结构,从整体上概述了apk打包的整个流程. 流程概述: 1.打包资源文件,生成 ...
- 第07讲- Android项目的打包apk
第07讲Android项目的打包apk 方法一:在工作目录bin文件夹下有一个与项目同名的apk文件 (最懒惰的方式,不推荐,不安全,不利于版本更新,只有在开发模式时使用) 方法二:使用key方式 签 ...
- Android 自动编译、打包生成apk文件 3 - 使用SDK Ant方式
相关文章列表: < Android 自动编译.打包生成apk文件 1 - 命令行方式> < Android 自动编译.打包生成apk文件 2 - 使用原生Ant方式> &l ...
随机推荐
- 使用 Nginx 内置 $http_user_agent 来区分( 电脑 pc、手机 mobile、平板 pad )端的内容访问
location / { #pc端内容访问 set $flag "pc"; set $num 1; set $hua "${http_user_agent}"; ...
- pandas替换一列中的汉字为数字
表格的一列“总金额”应该全部为数字,但其中少数项出现汉字,应该将汉字替换为数字,才能进行后面的计算. 先定义一个函数: def is_number(s): try: float(s) return T ...
- sql 中 and 和 or的坑
请参考以下链接 https://blog.csdn.net/u011064736/article/details/70257366
- QString使用正则表达式快速去空格
//QString去掉空格 QString str; str.remove(QRegExp("\\s"));
- Hello2 source analysis
在example目录下的web\servlet\hello2\src\main\java\javaeetutorial\hello2路径里可以找到hello2的GreetingServlet.java ...
- JS(JavaScript)的进一步了解7(更新中···)
1.Js操作css样式 div.style.width=”100px”.在div标签内我们添加了一个style属性,并设定 了width值.这种写法会给标签带来大量的style属性,跟实际项目是不符. ...
- Cent OS6下SS+BBR+改SSH端口
SS+BBR+改SSH端口 (一)搭建SS wget --no-check-certificate -O shadowsocks-libev.sh https://raw.githubusercont ...
- xampp集成环境下重置mysql的密码
第一步:打开两个命令行工具,都进入到你的xampp安装目录下的mysql下的bin目录,如我安装的位置是D:xampp/mysql/bin: 第二步:在完成第一步的情况下,输入:mysqld --sk ...
- Docker报错 WARNING: IPv4 forwarding is disabled. Networking will not work.
问题:创建容器的时候报错WARNING: IPv4 forwarding is disabled. Networking will not work. # docker run -it -p 3000 ...
- js中的继承总结全( 含new 原理过程 )
1. 借用 new 构造函数继承 原理: 利用 new 的原理, 通过apply,call , bind 改变 this , 只能实现部分方法的继承: MDN对new的描述: new 运算符创建一个 ...