整合 Jenkins 自動化打包 Android Apk
在最近的 Android 開發中,每次釋出版本都要手動打包,深感到不便,為了讓測試的人員也可以感受到 Android 打包的樂趣,參考了網上很多 Jenkins 進行 Android 自動打包的文章後,花了一些時間把這個環境搭建起來了。
Jenkins 安裝
Jenkins
的可以單獨執行也可以在 Tomcat
伺服器中執行,不過我這裡是單獨執行的,首先就要到 https://jenkins.io/download/ 下載一個適合自己的電腦環境版本的 Jenkins
:
由於我的電腦就是 Windows ,所以就下載圖片紅色選中的,下載並安裝完成後,就會出現下面的介面,要求你填寫 Jenkins
填寫完密碼後,將會看到外掛安裝介面:
這裡我選擇了第一項,安裝預設的外掛,熟悉後再做修改:
等全部外掛都下載完成後,就可以看到下面的使用者名稱設定頁面了:
上面每一項設定完成並點選 儲存並完成 後,就是設定進入 Jenkins
管理頁面的 url 了,繼續點選右下角的儲存:
現在一切都準備就緒,可以開始執行 Jenkins
了:
然後就可以看到下面的頁面了:
配置 Jenkins 的環境變數
首先進行系統設定:
到 系統設定 的全域性屬性裡面新增 ANDROID_HOME
SDK
的路徑:
然後點選下發的應用並儲存 :
注意:這裡必須先點選應用再去進行儲存,如果不點應用的話,儲存可能會無效
然後就是 全域性工具配置 了:
要在這裡配置 JDK
目錄和 Gradle
目錄:
這裡就不要使用自動安裝了,直接依賴本地的就可以了,因為 JDK
的自動安裝需要一個 Oracle
賬號,而 Gradle
的下載網速是出了名的慢。
現在就輪到最後的 專案的 gradle
指令碼配置了,這裡就只需要簡單配置一些打包相關的東西即可:
apply plugin: 'com.android.application'
android {
compileSdkVersion 1
buildToolsVersion 1.0.0
defaultConfig {
applicationId "xxx.xxxx.xxxxx"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName 1.0
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//這個是必須有的
signingConfigs {
config {
keyAlias 'fritz'
keyPassword '123456'
storeFile file('keystores\\fritz.jks')
storePassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
//去掉沒有使用過的資原始檔,請慎重使用
//因為圖片資源如果在程式碼裡面沒有id引用,一樣會移除
//無法確保全部圖片資源都有id引用的話,不要使用這個屬性
shrinkResources = true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//這裡修改apk檔名
android.applicationVariants.all {
variant ->
variant.outputs.all {
outputFileName = "fritz.apk"
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
implementation "com.android.support:appcompat-v7:27.1.1"
implementation "com.android.support:support-v4:27.1.1"
implementation "com.android.support:design:27.1.1"
implementation "com.android.support.constraint:constraint-layout:1.1.2"
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
建立打包任務
現在就來建立我們的打包任務吧:
給我們的打包任務一個名字,按照下圖中去配置即可:
點選確認後就可以看到下面的六個配置:
這些配置全部都有作用,不過這裡我先針對一部分來講解。
原始碼管理
這裡我使用了 Git
來進行原始碼的管理:
在 Repository URL 中新增專案的 Git
路徑,然後在下面的 add 按鈕裡面新增 Git
的使用者憑證:
我們可以在 Branch Specifier 切換到我們想打包的分支,由於這個是剛建立的測試專案,暫時就只有 master 而已。
構建
這裡選中第一個 Invoke Gradle ,Gradle Version 就用我們之前配置的 GRADLE_HOME
就可以了,而需要執行的 Task 則就是:
app:clean
app:assembleRelease
接著我們點開右下角的 高階配置按鈕 ,把下面的兩個選擇給勾上:
這個是用來傳遞一些自定義引數到 gradle
腳本里面的,暫時用不上,不過可以先開啟。
這個就比較重要了,它是專案依賴的support包或第三方庫原始碼下載到 Jenkins
的伺服器中,以便順利完成打包,因此這個是必須開啟的。
這樣子,基本配置就已經完成,這時候點選下面的應用並儲存吧:
執行構建任務
在點選儲存之後,就會看到下面的介面,點選立即構建就會開始執行打包任務了:
這時候就會看到下面的構建過程了:
藍色表示成功,紅色表示失敗,我們點選構建任務來看控制檯的輸出:
而且從控制檯的輸出,可以看到它下載了不少第三方庫到本地 Jenkins
伺服器上面:
我們到安裝 Jenkins
的資料夾裡面的 workspace
,可以看到下載到本地的專案檔案多了幾個新的資料夾,其中就有下面的快取資料夾:
這裡點選進去 caches
進去到 caches\transforms-1\files-1.1 裡面,就可以看到相關的依賴下載了:
因此這裡再提醒一次,請務必任務配置裡面把下面這勾給勾上了:
而任務打包出來的 apk 所在路徑為 app\build\outputs\apk\release :
上傳 apk 到 fir.im
目前已經順利把 apk 打包出來了,但是目前打包出來是存放在 Jenkins
的本地伺服器上面,還是不太方便提供給測試人員,因此最好就是把伺服器打包出來的 apk 上傳到一個託管釋出測試的平臺,這裡我就選擇了 fir.im 作為測試 apk 釋出平臺。
在登入後 fir 官網的個人資料中有一個 API token :
先把這個記下來,然後到 http://blog.fir.im/jenkins/ 下載 Jenkins
的 fir.im的外掛,下載完成後就到 系統管理 -> 外掛管理->高階 裡面來安裝這個本地外掛:
選中剛才下載的外掛後,上傳即可。
安裝完成後,再一次開啟我們剛才構建的任務的配置,到 構建後操作 裡面,這時可以看到新的元素了:
選中後,填好下面配置即可:
然後點選 應用並儲存 。然後再一次構建專案,構建成功後我們會在控制檯輸出看到下面的列印:
說明已經上傳到 fir.im 了,現在到 fir.im 裡面可以看到下面的資訊:
這時候,測試人員就只需要通過 fir.im 下載連結即可下載最新的測試 apk 了。
從此開發人員就只需要上傳程式碼,然後幫測試人員那邊安裝好環境,以後就可以讓測試人員慢慢享受打包的樂趣了。