我的視頻課程:《FFmpeg打造Android萬能音頻播放器》
我們在Android的開發中常常需要:開發環境、測試環境和生產環境三個環境下測試我們的應用,經常會遇到這樣的情況,測試人員給我們開發人員說“能不能給我打一個XXX的環境的包,我需要測試”,再工作不忙或者偶爾一次的情況下,開發人員還是很樂意給測試人員打包的,畢竟分分鐘就搞定了。但是當維護的產品多了,或者測試人員需要很多的版本,那就不是分分鐘搞定的事了,又讓我們給他們打包非累壞我們可愛的程序員哥哥(妹妹)的。所以作爲一名“懶”的猿類,當然想把打包這種簡單的事交給測試人員自己幹了,愛怎麼打包就怎麼打包,這裏就利用Jenkins+Git+gradle來自動構建Android應用,一鍵搞定就這麼簡單。先來一張實例圖片吧,畢竟無圖無真相:
圖中分爲三個環境:開發、測試和生產;然後項目中維護了5個APP的項目(當然一個也是一樣的)。然後最後一個參數是判斷是來自哪裏的打包,這裏根據這個參數來設定打包後apk的存放路徑。
先來說說大體思路:首先在Linux(Ubuntu)上面配置Java、Android SDK、Gradle、Tomact、Jenkins、Git等開發所需的環境;然後進入Jenkins中配置我們打包需要的環境;然後創建構建的項目;然後添加自定義參數(用戶在gradle中獲取);然後配置項目源碼;然後構建腳本等。這麼多然後以後,就可以愉快的構建了。
第一步:搭建Jenkins環境,這一步網上很多教程,搭建Tomact環境,然後部署Jenkins就行了,一般開發中如果是Jenkins構建所以項目的話,後臺已經搭建好了,我們只需要添加我們需要的插件即可;然後配置Android SDK環境變量、Java環境變量等,這不是我們這次的重點,所以就不講了,網上很多資料的。
第二步:在Jenkins上面創建我們的構建項目:
1):安裝必要的插件(Git和Gradle)
1、在Jenkins主頁面上面選擇“系統管理”->“管理插件”,就到了插件管理的界面:
在上面導航欄中選擇我們需要安裝的插件,然後下載安裝重啓後就可以用了。
2、配置Gradle插件
選擇“系統管理”->“Global Tool Configuration”,裏面可以配置全部插件,應git後臺已經配置好了,這裏我們只需要配置gradle插件即可(附gradle下載地址:http://www.androiddevtools.cn/index.html)這裏有很多Android的工具。然後下載相應的gradle版本,配置gradle插件:
2):創建項目
在Jenkins主頁面上面點擊“新建”,然後輸入構建項目名稱,然後選擇“構建一個自由風格的軟件項目”,就可以了。
然後進入我們創建的項目配置環境參數:
1:添加構建參數
配置中的“BUILD_TYPE”、“BUILD_SCRIPT”和“IS_JNEKINS”都是我們在Jenkins和gradle要獲取的值,然後根據這些值來進行相應的打包配置,即可完成打包。裏面的值有多重類型,一般選擇“Choice”就可以了:
2:添加構建腳本
在“源碼管理”中添加我們的項目源代碼,選擇Git然後添加項目git地址,Jenkins只能用SSH這種方式來clone代碼,所以還需要添加賬號的身份認證證書才行,這裏也不絮叨了,找後臺管理人員給添加就行了。
3:添加構建腳本
這裏面主要是添加構建參數和腳本,通過參數來控制腳本里面的邏輯,實現不同的打包:Jenkins裏面的參數可以在gradle.properties中獲取到具體的值,然後gradle.properties中的值可以在build.gradle中獲取到,這樣我們就能在build.gradle中獲取Jenkins中選擇的參數的值了,然後進行打包配置操作。
gradle.properties中配置如下:
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
BUILD_TYPE = DEV
IS_JNEKINS = false
其中BUILD_TYPE、IS_JENKINS就是我們要獲取的值,然後在build.gradle中調用如下:
最好我們來設置一下構建好的apk的輸出目錄:在build.gradle android下面添加如下代碼
applicationVariants.all { variant ->
variant.outputs.each { output ->
//開始輸出
if("true".equals(project.IS_JNEKINS))
{
if('DEV'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('dev路徑+***debug.apk')
}
else if('STG'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('stg路徑+***debug.apk')
}
else if('PRD'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('stg路徑+***debug.apk')
}
}
}
}
這樣自動構建好的apk就放到了對應的路徑下,然後測試人員或其他人員就可以在裏面獲取或設置成下載鏈接。file中的文件名也可以帶參數,比如加上版本號等。好的,寫了這麼多我也是夠囉嗦的了,Linux下面通過Jenkins+Git+Gradle自動化打包Android項目就完成了,感覺還是不容易呀。