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服務,如果之前已經開啟了,先點擊關閉再點開啟,提示要驗證密保

驗證完后就可以看到郵箱密碼了
勾選 通過發送測試郵件測試配置 測試一下郵箱是否配置成功,輸入你的郵箱,點擊Test configuration,配置成功會提示Email was successfully sent,并且郵箱會收到一條信息

由于jenkins自帶的郵件通知樣式過于單調,而且不好用,所以我們用郵件擴展功能來自定義,拉到Extended E-mail Notification(沒有這個選項的就是沒裝插件,主界面打開 系統管理--插件管理--可選插件,右上角搜索Email Extension Plugin進行安裝),如下配置,跟剛才配置差不多


勾選Require Administrator for Template Testing,點擊右邊的Default Triggers...

勾選如下三個選項,這樣構建成功或失敗都會發送郵件通知
?

點擊保存,完成系統設置

接下來配置一下Gradle

找到Gradle,添加GRADLE_HOME,路徑參照我的路徑,找到自己電腦上的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_TIMEoutDirectory = 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

Gradle Version選擇配置好的GRADLE_HOME,Tasks輸入

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>項目名稱&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 LastSuccessful 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><prestyle="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): <ahref="${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

修改--httpListenAddress=0.0.0.0,把jenkins的監聽地址改成廣播的形式

修改完成,執行命令行:

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist

?

這樣局域網的其他電腦就能訪問你的ip啦如果要外網也能訪問,可以把jenkins部署到Tomcat或者服務器(自己研究啊哈哈~)

可通過以下途徑關注本人:

個人網站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

轉載于:https://www.cnblogs.com/Zachary46/p/jenkins_android_apk.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451046.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451046.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451046.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java中byte、short、char、boolean實際都是按照int處理的!

byte、char、short、boolean四種類型在匯編期或運行期間采取和int類型一樣的存儲方式&#xff0c;在計算時會先轉換為int類型&#xff0c;后進行計算。所以兩個short類型數據做算數運算&#xff0c;結果卻為int類型。這主要是因為jvm的字節碼為了簡潔高效&#xff0c;設計時只使…

4、2 核心組件

1、Stage&#xff1a;虛的  一組RDD構成的鏈條并行的task集合&#xff0c;同一Stage的所有任務有著相同的Shuffle依賴。階段的劃分按照shuffle標記來進行的。一個階段含多個RDD&#xff0c;先有RDD后有Stage一個階段含多個taskstage通過ShuffleDependency劃分&#xff0c;一個…

狗窩里的小日子- 2 ...

來&#xff0c;把平時作的菜菜整理下&#xff1a; 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

優秀程序員必備素質——快速調試

你是否有過這些經歷&#xff1a; 1.代碼敲完了&#xff0c;剛想松口氣&#xff0c;一運行程序&#xff0c;滿滿的Bug。 2.找啊找啊找&#xff0c;怎么找都找不到哪里出了問題。 3.調試了半天出不來&#xff0c;就開始便得心煩氣躁。 4.一天連一個Bug也沒調出來&#xff0c;…

Java程序編譯運行過程

整體流程 1.首先由源程序文件編譯成class文件。注意這里的源程序并不僅限于java程序&#xff0c;其他語言如果能夠編譯成class文件&#xff0c;并且符合jvm規范也能夠在jvm上運行。 2.jvm將class文件拷貝到內存&#xff0c;解釋成相應的機器語言運行。我們常用的hotspot虛擬機…

【TeeChart .NET教程】(七)使用函數

2019獨角獸企業重金招聘Python工程師標準>>> 上一篇&#xff1a;【TeeChart .NET教程】&#xff08;六&#xff09;使用系列 【下載TeeChart.Net最新版本】 &#xff08;一&#xff09;功能類型 1.1 功能類型 TeeChart Pro功能是一個系列&#xff0c;幾乎可以是任何…

Django的簡介

一.MTV模型 Django的MTV模式: Model(模型):和數據庫相關的.負責業務對象與數據庫的對象(ORM) Template(,模板):放所有的HTML文件 模板語法:目的是將變量(數據庫內容)如何巧妙的鑲嵌到HTML頁面中 View(視圖):負責業務邏輯,并在適當的時候調用Model和Template 此外Django還有一個…

狗窩里的小日子- 3 ...

來&#xff0c;把平時作的菜菜整理下&#xff1a; 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.

5種流行的Linux發行版:你更喜歡哪一個呢?

現如今&#xff0c;對于各種類型的用戶&#xff08;如桌面用戶、服務器管理員、圖形設計者等&#xff09;而言Linux已經成為一種最流行的操作系統。Linux是免費且開源的&#xff0c;任何人都可以建立和編譯它的源代碼&#xff0c;并將它分發給別人。這就是為什么Linux會有很多個…

購物商城Web開發第二十三天

今天完成了結算頁的第二個頁面的編寫&#xff0c;買東西的完整流程已完成了頁面的部分 后面還差頁面的JS部分和后臺。 今天沒有遇到什么大的困難&#xff0c;有一個問題是CSS的float屬性的運用還是不夠好&#xff0c;今 天也意識到了一些會產生的問題&#xff0c;以后還需要多注…

java裝箱拆箱

所謂的拆箱裝箱&#xff0c;其實就是一個簡單的語法糖。我們以Integer為?。 &#xff08;一&#xff09;裝箱 Integer i 1&#xff1b; 本質上就是&#xff1a; Integer i Integer.valueOf(1); &#xff08;二&#xff09;拆箱 int m i&#xff1b; 本質上就是&…

基于ASP.net耳機網店商城系統(前臺頁面+后臺頁面)

源碼https://github.com/doublekai/user web文件夾 轉載于:https://www.cnblogs.com/doublekai/p/9778246.html

狗窩里的小日子- 4 ...

來&#xff0c;把平時作的菜菜整理下&#xff1a; 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.

硅谷觀察者眼中的亞洲

摘要&#xff1a;而印度團隊因為語言優勢&#xff0c;更多直接涉足在硅谷和全球的創業項目競爭中。去年&#xff0c;她花了大部分時間游歷了日本、韓國、中國、印度、新加坡和越南等國家&#xff0c;走訪了數百位亞洲的創業者和風險投資商。 即便是如此現場豐富且高度碎片化的亞…

[Web 前端] 解決因inline-block元素導致的空白間距和元素下沉

cp from : https://www.jianshu.com/p/617e78a27c88 ** 前言&#xff1a; ** CSS 中的 display:inline-block 是筆者最為喜歡的元素之一&#xff0c;可以將原本占據一行的塊級元素&#xff0c;轉變為可以并列顯示的行內塊級元素。 display:inline-block 常被用來代替float進行頁…

我的第一個隨筆

自我介紹 Hello&#xff01;大家好破音&#xff0c;我叫單嘉隆&#xff0c;來自地理信息162&#xff0c;興趣愛好有 看電影&#xff08;豆瓣已刷完&#xff0c;正在看imdb&#xff09;怪物獵人世界&#xff01;偶爾看看書 個人編程能力&#xff1a; 以前看網課大概寫了100來行p…

java8中LocalDate、LocalTime、LocalDateTime介紹

很久以前java8中就推出了新的Time API&#xff0c;旨在解決舊版Date和Calendar的缺陷。講道理真的挺好用的&#xff0c;不過由其他工具對新版time的兼容并不夠完善&#xff0c;導致現在使用還不夠普及。大家都還在用老的Date類&#xff0c;苦?的封裝時間工具函數&#xff0c;感…

狗窩里的小日子- 5 ...

來&#xff0c;把平時作的菜菜整理下&#xff1a; 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.

Linux(RadHat)基礎學習—FTP服務

RedHat下的ftp服務 1.ftp服務的啟動 1.編輯文件&#xff1a;vim /etc/sysconfig/selinux第6行selinuxdisabled保存退出。重啟主機。 2.安裝vsftpd yum install vsftpd -y 安裝完成&#xff1a; 開啟ftp服務&#xff1a; systmctl start vsftpd systemctl enable vsftpd 3.防火墻…

C++經典面試題匯總

1. 下面代碼輸出什么&#xff1f;為什么&#xff1f;&#xff08;初始化列表&#xff09; #include<iostream>using namespace std;class Test {int m_i;int m_j; public:Test(int v): m_j(v), m_i(m_j){}int getI(){return m_i;}int getJ(){return m_j;} };int main() {…