Android直接用手机打包apk!

作者: Zachary46 | 来源:发表于2018-07-31 18:04 被阅读135次
    目瞪口呆.png

    你没有看错,用手机浏览器访问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或者服务器(自己研究啊哈哈 完美.png

    可通过以下途径关注本人:

    个人网站https://zachary46.xyz

    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!

        本文链接:https://www.haomeiwen.com/subject/obphvftx.html