Android 使用 Jenkins 實現自動化打包【流程】&【踩坑】
引言
每個Android開發應該都有經歷過正在碼程式碼的時候突然被打斷要求打個啥啥環境啥啥配置的安裝包,然後就得暫存程式碼、切換分支、更改配置、等待build、balabala……往大了說就是浪費時間消耗員工價值對公司的不負責(胡扯),往小了說就是這TMD真的好煩啊(真實)。
如果可以將打包操作交給產品/測試/運維/XX呢?誰要安裝包誰自己打去別來煩我。Then,就是自動化打包的事情了。自動化打包應該都有聽說,感覺很高大上很難搞。然而實際操作後也就那麼回事兒。下文將從頭至尾圖文並敘得記錄過程和踩坑。
目錄
正文
1,下載 Jenkins
Jenkins 官網下載地址:https://jenkins.io/download/
選擇你喜歡的對應你的作業系統的版本(我的是長期支援的Windows版本)
2,安裝 Jenkins
下載後別BB直接安裝就行。沒啥好說的,安裝目錄想改就改,下一步就行。
安裝好你的預設瀏覽器會自動彈出視窗連結:http://localhost:8080
如圖,路徑都給了就不用多說了,找到對應檔案把裡面的密碼複製貼上上去。繼續。
安裝外掛。我們只用到2個外掛,選擇安裝就好了。找到Gradle和Git(如果你是SVN,不用我說吧?),勾選後安裝,相關的依賴外掛會自動安裝的。
下面幾步就不截圖了,並不是必要過程。
然後會讓你建立管理員賬號,選擇繼續使用admin就行(想建立也隨你開心)。
繼續,讓你配置路徑,也跳過就行(還是隨你開心)。
已就緒,開始使用。
PS:如果上述安裝外掛的地方你沒有安裝需要的Gradle和Git外掛,你也可以進入 Jenkins 環境頁面後選擇[系統管理] - [管理外掛] - [可選外掛],然後去找/搜到對應外掛安裝。
PS:*本博就是本地配置一下試試,伺服器上肯定是該建立賬號、配置路徑、安裝需要的別的外掛balabala。
3,配置 Jenkins
配置JDK、Git、Gradle:
我的JDK路徑當初安裝的時候不規範,打碼是為了防止誤導。
Git貌似不能自動安裝,貌似預設的不改動也能用。有興趣可以試試。
Gradle配置同上,沒啥好說的。
劃重點 -- Android SDK需要另行配置,見下圖
[系統管理] - [系統設定] - [全域性屬性] - [環境變數],對應圖去找,新增環境變數,鍵為“ANDROID_HOME”,值指向SDK目錄。
以上,配置完成。
4,新建任務並配置
選擇自由風格,確定。
基本資訊裡點選右下角高階有個“使用自定義的工作空間”,勾選可以指定目錄,不勾選預設在 Jenkins 安裝目錄下的 “workspace” 資料夾裡。
原始碼管理選擇Git,URL填入你的專案地址,沒有認證的時候會報錯,點選圖中圈出的“Add”,彈出下圖:
新增憑證後下拉選擇對應憑證,如果正確則不會報錯,同時下方展示檢出分支。預設master分支,可以自己看情況指定某分支。
構建觸發器不用管。
Tasks是構建執行的語句,一般都是“app:clean app:assembleRelease”,先clean再build。
構建後操作看需求,可以實現自動上傳apk到蒲公英/fir、郵件通知等等。
5,構建
點選立即構建後會出現下圖進度展示條。
藍色正常,build成功。紅色表明構建失敗,滑鼠移動右側有個向下箭頭,點選展開選項,點選控制檯輸出可以檢視錯誤。
6,引數化構建
構建時可選引數,這樣就可以打出不同引數的包。比如不同baseUrl。
[新增引數] - [選項引數],或者你願意用某種引數都行。
引數化構建配置上了,需要在構建時將引數對映到程式碼中,如下圖:
以上, Jenkins 上的引數化構建配置完成。我們還需要在程式碼中接收該引數。
引數會對映到gradle.properties
檔案中的對應引數名,我們先在該檔案中定義一個引數並賦預設值:
......
baseUrl = "http://qa-xxxxxx.com/api/"
......
然後在build.gradle
中獲取該引數並新增到BuildConfig.java
中:
......
android {
......
defaultConfig {
......
buildConfigField "String", "baseUrl", baseUrl
}
......
}
......
程式碼中可以直接獲取該引數:BuildConfig.baseUrl
以上配置後,專案會有所變化:
踩坑
坑1:AAPT error
錯誤提示:java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT error: check logs for details
百度的解決方案有三種,一是說在gradle.properties中加入程式碼android.enableAapt2=false
,二是說統一各module的compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion
等,三就是更不相干的東西了。
這裡我要說一下,各位的程式碼本地肯定都是跑過的,編譯打包都正常,只是上了 Jenkins 才報了這個錯,這三個解決方案都站不住腳啊!理論上不應該是程式碼裡的啥問題啊!!
折騰了好久,最後放棄百度,在某不存在的搜尋引擎找到個說法,Gradle路徑太長了導致編譯錯誤balabala……
其實仔細看錯誤日誌,會發現那一串錯誤都是好長的路徑(共同點),所以這個說法顯然站得住腳。
專案設定裡的構建處,點選右下角高階,找到下方此選項打勾。
再次構建,BUILD SUCCESSFUL。
坑2:aidl is missing
這個問題也是沒話說了。
問題發生在我部署到伺服器的時候,先是提示說少build-tools,然後說少對應版本的sdk,挨個上傳伺服器sdk目錄。然後就報了這個錯。但是本地都是正常的,sdk沒問題,沒理由到伺服器上就不行了啊。
這裡我要譴責一下運維同事,他堅定的告訴我伺服器上的sdk是從另一個Android同事那裡copy上傳的(windows),但後來發現是他自己down的(linux)。找該Android同事詢問,得到的回覆是“我不知道啊”、“你百度看看”。:)
折騰了很久才定位到這個問題,伺服器是Linux環境,本地是Windows環境,sdk是分版本的。不同版本的sdk下的檔案不一致,so,報錯。Fxxk。
結語
很多東西感覺很難,其實實踐下來也就那麼回事兒。事先少想點兒亂七八糟的,上去就是幹。另外,Fxxk。
相關推薦
Android 使用 Jenkins 實現自動化打包【流程】&【踩坑】
引言 每個Android開發應該都有經歷過正在碼程式碼的時候突然被打斷要求打個啥啥環境啥啥配置的安裝包,然後就得暫存程式碼、切換分支、更改配置、等待build、balabala……往大了說就是浪費時間消耗員工價值對公司的不負責(胡扯),往小了說就是這TMD真的
部署Jenkins實現Git提交後自動構建的踩坑記錄
1、建立工程後項目的"原始碼管理"->"Git"->"Repositories"配置中,Repository URL的地址填寫需要注意:如果你的URL是http協議的地址,直接填入就好;如果你的URL是ssh協議的地址,則需要把"ssh://"去掉之後再填入。例如:完整地址為ssh:
Jenkins+Gitlab+蒲公英構建Android專案, 實現自動打包上傳並生產二維碼下載
基本準備 # 關閉selinux setenforce 0 sed -i '/=enforcing/s/enforcing/disabled/g' /etc/sysconfig/selinux # 關閉防火牆 service iptables
Android Gradle JenKins SVN 自動化打包
JenKins 是什麼? 理解:是一個整合各種外掛,通過配置、管理 的本地Web,去自動化打包Android、IOS的工具。 整體流程 外掛配置——————》系統設定 sdk HOME 和路徑 ,全域性設定JDK、GRADLE 、GIT 的本地路徑 交由JenKins
Jenkins實現自動打包Android(安卓)程序
變量 lease jenkins配置 date oca -o ext 基本 nvi 一、主要實現功能1、通過jenkins實現對安卓程序的打包2、並上傳至fir.im並顯示一打包信息3、上方便開發與測試人員的下載二、服務器配置:1、jenkins可以正常運行2、需要下載以下
搭建jenkins實現自動化部署
ubunt 關閉 kcon 部署 epo java gpo add perm 1、安裝Jenkins Install Jenkins On Ubuntu wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.ke
iOS開發之使用fastlane工具實現自動化打包發布
TP ruby success 2.0 提交 gui ava 新的 unit test p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC"; color: #000000; backgroun
使用jenkins實現自動化部署的案例記錄:tomcat+svn+maven+ssh+jenkins
使用jenkins實現自動化部署的案例記錄:tomcat+svn+maven+ssh+jenkins 1.全域性配置,配置專案對應的tomcat伺服器的ssh登入地址,埠,密碼,路徑(寫/即可) 2.2-系統maven配置 3.構建一個maven風格的專案,選擇jdk版本
Maven、Jenkins實現自動化部署
工程例項程式碼:https://github.com/chocolateBlack/multi_env_folder_maven 利用Maven、Jenkins實現專案自動化部署,能夠按照bin、conf、lib檔案進行打包,並能夠通過Jenkins按照環境一鍵發不到伺服器上 首先通過Maven外掛
在Centos7搭建jenkins實現自動化部署springboot專案
在Centos7搭建jenkins實現自動化部署springboot專案 安裝前要把基本的環境裝好 1.jdk安裝 關於centos上的java Jenkins不支援在centos的預設的jdk上工作。所以要刪除自己裝 查詢jdk命令 rpm -qa | grep jdk 或者 rpm
第七篇 Postman+Node.js+Newman+Jenkins實現自動化測試
今天終於不咋忙了,學習整理一下一直想做卻沒實現的事兒,這事已經摺磨團隊半年之久了。因為專案是B端業務的測試,測試過程中需要生產大量的測試資料,而且都是跨多個系統的測試,對於後置流程的測試,這些同學往往要想有一條測試資料,就要自個去一步步的操作前置流程,最關鍵的是太耗時間,一條資料可能要花掉1個小時左右,加上測
iOS如何實現自動化打包
前言 在我們的日常開發工作中,避免不了會出現這樣的場景:需求迭代開發完成之後,需要提供ipa包給QA同學進行測試,一般會執行如下流程:1.執行Git Pull命令,拉最新的程式碼到本地 2.Pod Install安裝最新的依賴庫 3.在Xcode點選Archive編譯並打包 4.選擇輸出一個iOS AdH
jmeter+ant+jenkins實現自動化介面測試
一、安裝前準備 1.JDK:jdk-8u121-windows-x64 2.jmeter工具:apache-jmeter-2.13 3.ANT工具:apache-ant-1.9.7-bin 4.jenkins工具:jenkins-2.32.2 以上安裝包工具及版本下
Android Jenkins 如何編譯打包同一個Project中的不同的module
前言 Jenkins是一個功能強大的打包工具,不僅可以編譯打包JavaWeb專案,也可以編譯打包Android和iOS專案。 問題 作為一個Android開發者,經常會碰到要打不同的渠道包,當然,這個直接可以在.gradle中直接配置不同flavor即可。但是,當我們在
HtmlTestRunner + SmtpLib + Jenkins 實現自動化整合
首先呢,作為一個小白,大部分的程式碼都是網上搜索來的二次加工 可是拿來不見得就能用 比如,之前死活過不去的email垃圾檔案驗證,郵件只能躺在qq的草稿箱 網上那些方法,什麼抄送人新增自己之類的都沒用 最後是靈機一動,刪除了郵件正文裡的富文字才成功傳送郵件 如果以後能有更好
Docker安裝Jenkins實現自動化構建部署到Tomcat
安裝Docker 安裝VirtualBox 安裝Jenkins 安裝好docker-toolbox之後啟動Terminal 開啟virtualbox,然後等待下載好boot2docker.iso,下載好之後就可以看到virtualbox就
SVN + Maven + jenkins 實現自動化構建
搭建環境說明: SVN 在window下 執行在 192.168.74.1 jenkins 在 linux下 執行在 192.168.58.135 版本1.65 Maven 在 linux下 執行在
Jmeter簡單介紹與搭配Jenkins實現自動化測試實踐
Bioneck 豈安科技研發工程師 負責 Stalker 專案的部分研發與測試工作,程式設計愛好者,樂於使用程式碼解決生活中的重複工作。 最近有個需要依靠 Jmeter+Jenkins 實現自動化測試後部署的需求,於是看了看Jmeter的資
iOS中使用Fastlane實現自動化打包和釋出
Fastlane是一套使用Ruby寫的自動化工具集,用於iOS和Android的自動化打包、釋出等工作,可以節省大量的時間。 Fastlane Github:https://github.com/fastlane/fastlane 官網:https://fast
Android使用Gradle自動化打包
假如我們使用了友盟sdk或者別的sdk,我們需要在androidMainifest 填寫一個渠道號,來幫助我們統計。也就說app釋出之後需要每個應用市場對應著唯一的渠道號。如果我們不使用自動化打包的話,就非常的麻煩,需要自己去改Mainifest.xml中的