Android直接用手机打包apk!

你没有看错,用手机浏览器访问Jenkins,就可以打包apk,并生成下载二维码,发送邮件通知测试人员下载,从此解放双手,告别打包测试。先上本人手机邮箱收到的打包成功通知效果图:

image

废话少说,开干!

本人用的是Mac,以下操作都是在Mac环境下配置的,Windows环境的配置移步到Android使用Jenkins自动化构建测试打包apk

一、安装Jenkins

打开mac终端(本人用iTerm2),输入 brew install jenkins,brew命令得安装Homebrew,安装方法移步Mac终端软件安装利器:Homebrew

image

一会儿jenkins就装好了,默认安装路径为/usr/local/Cellar/jenkins,在终端输入 jenkins启动jenkins

image

第一次启动jenkins会提示一个秘钥,登录控制台要用到,也可以在路径/Users/用户名/.jenkins/secrets/initialAdminPassword下查看秘钥

image

在浏览器输入localhost:8080就可以登录jenkins控制台,输入刚才的秘钥,点击继续

image

插件安装选推荐的就好了

image

等待自动安装完成

image

创建一个管理员用户,保存并继续

image

设置Jenkins URL,默认为localhost,改成自己电脑的IP,即http://IP:8080,点击保存并完成

image

点击开始使用Jenkins,就可以进入控制台

image

二、配置jenkins

点击系统管理--系统设置

image

拉到全局属性,勾选环境变量,添加键值对配置Android SDK

image

找到系统管理员邮件地址,输入自己的邮箱

image

找到邮件通知,如下配置,qq邮箱的SMTP服务器为smtp.qq.com,其他邮箱的自行百度

image

记得勾选使用SMTP认证,密码不是你的qq密码,而是邮箱服务器密码,可以到邮箱查看邮箱服务器密码,打开qq邮箱,点击 设置--账户 拉到如下位置

image

点击开启POP3/SMTP服务,如果之前已经开启了,先点击关闭再点开启,提示要验证密保

image

验证完后就可以看到邮箱密码了

image

勾选 通过发送测试邮件测试配置 测试一下邮箱是否配置成功,输入你的邮箱,点击Test configuration,配置成功会提示Email was successfully sent,并且邮箱会收到一条信息

image

image

由于jenkins自带的邮件通知样式过于单调,而且不好用,所以我们用邮件扩展功能来自定义,拉到Extended E-mail Notification(没有这个选项的就是没装插件,主界面打开 系统管理--插件管理--可选插件,右上角搜索Email Extension Plugin进行安装),如下配置,跟刚才配置差不多

image

勾选Require Administrator for Template Testing,点击右边的Default Triggers...

image.png

勾选如下三个选项,这样构建成功或失败都会发送邮件通知

image.png

点击保存,完成系统设置

image

接下来配置一下Gradle

image.png

找到Gradle,添加GRADLE_HOME,路径参照我的路径,找到自己电脑上的gradle

image.png

接下来开始新建任务,点击新建任务,如下操作

image

我的视图中可以看到新建的任务

image

点击右边任务进入任务详情

image

点击 配置--源码管理,勾选Subversion(在此以svn为例),点击Add,添加svn账号

image

用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,勾选参数化构建过程,选择 添加参数--选项参数

image.png

输入名称,与gradle.properties配置的字段一致,设置选项,输入app版本,描述随便填

继续点击 添加参数--字符参数

image.png

继续点击添加参数,添加两个选项参数,如下配置

image.png

这样配置的目的是为了让打包有更多可选项,设置完立即构建就变成了Build with Parameters

image.png

点击Build with Parameters可以看到多了构建选项

现在还不能构建,因为还没配置构建,回到 配置--构建 ,勾选Invoke Gradle

image.png

Gradle Version选择配置好的GRADLE_HOME,Tasks输入 clean assemble${PRODUCT_FLAVORS}${BUILD_TYPE}类似于Android Studio里的命令

image.png

点击 增加构建步骤--执行shell(上传apk到蒲公英生成二维码)

image.png

输入命令

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,然后上传蒲公英

image.png

uKey和_api_key登陆蒲公英可拿到(注册一个蒲公英账号就有啦)

image.png

点击保存,回到项目任务,如下点击,开始构建

image.png

可以打开下拉列表选择 控制台输出 查看日志

看到构建成功

image.png

此时还没有二维码,登陆蒲公英,如下操作复制二维码地址

image.png

回到 配置--构建,点击 增加构建步骤

image.png

在Description中设置二维码地址,语法为HTML <img src="蒲公英二维码地址">

image.png

点击保存,然后再次构建项目,就可以看到二维码啦

image.png

接着我们来配置邮件模板,点开 配置--构建后步骤,选择 增加构建后步骤--Editable Email Notification

image.png

在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>项目名称&nbsp;:&nbsp;${PROJECT_NAME}</li>
                    <li>构建编号&nbsp;:&nbsp;第${BUILD_NUMBER}次构建</li>
                    <li>SVN&nbsp;版本:&nbsp;${SVN_REVISION}</li>
                    <li>触发原因:&nbsp;${CAUSE}</li>
                    <li>构建日志:&nbsp;<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                    <li>构建&nbsp;&nbsp;Url&nbsp;:&nbsp;<a href="${BUILD_URL}">${BUILD_URL}</a></li>
                    <li>工作目录&nbsp;:&nbsp;<a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                    <li>项目&nbsp;&nbsp;Url&nbsp;:&nbsp;<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="&nbsp;&nbsp;&nbsp;&nbsp;%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>

以下地方改成你的蒲公英二维码地址

image.png

拉到下面,Attach Build Log设置编译日志要不要发送到邮件,看具体需求,点开右边 高级设置

image.png

点高级

image.png

输入要发送的邮箱地址,多个用“,”隔开,一定要配置,不配置打死收不到邮件

image.png

点击保存,再次点击构建项目,不出意外的话,就可以收到邮件通知啦!

image.png

打开手机浏览器,输入http://IP:端口号(电脑和手机连接的网络必须在同一个局域网)登陆jenkins控制台,点击构建,就可以打包apk啦!

如果同一个局域网还不能访问,链接launchd配置文件,终端输入 ln -sfv /usr/local/opt/jenkins/*.plist ~/Library/LaunchAgents 进入 /usr/local/opt/jenkins(Finder前往)用编辑器打开homebrew.mxcl.jenkins.plist

image.png

修改--httpListenAddress=0.0.0.0,把jenkins的监听地址改成广播的形式

image.png

修改完成,执行命令行: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist 这样局域网的其他电脑就能访问你的ip啦如果要外网也能访问,可以把jenkins部署到Tomcat或者服务器(自己研究啊哈哈)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Netkiller

PHP 安全与性能

PHP 安全与性能 摘要 我的系列文档 Netkiller Architect 手札Netkiller Developer 手札Netkiller PHP 手札...

4876
来自专栏互扯程序

手把手教你整合最优雅的SSM框架

现在很多公司新的项目已经使用springboot来搭建ssm项目了。实在是太方便了,so easy,妈妈再也不用担心我写程序了。 但是用越简单的东西,他的底层实...

1.5K7
来自专栏pangguoming

使用Spring Cloud Security OAuth2搭建授权服务

前言:  本文意在抛砖引玉,帮大家将基本的环境搭起来,具体实战方案还要根据自己的业务需求进行制定。我们最终没有使用Spring Security OAuth2来...

8667
来自专栏网络

换换Cygwin的Terminal吧

17年最后一篇技术相关帖来介绍一下使用secureCRT等工具连接cygwin吧。 cygwin可以说是一个很好的在Windows上迅速模拟和学习Unix/Li...

2177
来自专栏Java进阶架构师

01: springboot快速入门之三分钟构建可运行项目

Spring Boot英文中是“引导”的意思,是用来简化Spring应用的搭建到开发的过程。可以这么说。SpringBoot是一个服务于框架的框架,服务范围是简...

733
来自专栏程序猿DD

Spring Boot中使用RabbitMQ

复刻一篇老文,为后续要发的内容做一些铺垫 Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目...

27410
来自专栏Hadoop实操

HDFS添加 NFS Gateway 角色实例启动失败问题及解决办法

昨天登录公司测试集群的时候,发现HDFS存在告警信息,查看详细信息,发现 NFS Gateway 进程退出,尝试重启该角色实例,执行重启操作后,报如下异常:

1.4K4
来自专栏互联网杂技

SpringBoot (一) :入门篇

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而...

1223
来自专栏landv

php归档格式:phar文件详解(创建、使用、解包还原提取)

2784
来自专栏崔庆才的专栏

一言不合就改成 777 权限?会出人命的!

最近和几个朋友开发项目,期间使用了一台服务器跑模型,这台服务器是多人公用的,很多人都在上面有自己的账号,互不干涉内政,一切看起来十分井然有序。

5253

扫码关注云+社区

领取腾讯云代金券