Linux中Jenkins+Git+Gradle自動化打包Android

我的視頻課程:《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中調用如下:


build.gradle中我們通過(project.XXX)來獲取我們配置在gradle.properties中的值,然後manifestPlaceholders裏面是設置AndroidManifest.xml中相關SDK的參數的。 buildConfigField "String", "PUBLISH_MODE", "\"$project.BUILD_TYPE\""這一句是創建“PUBLISH_MODE”變量,我們在Java代碼中可以調用,調用方式爲:BuildConfig.PUBLISH_MODE,這樣一來,Jenkins中的參數我們在build.gradle、AndroidManifest.xml和Java代碼中都可以獲取到了,然後就可以根據參數進行相關的配置。

最好我們來設置一下構建好的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項目就完成了,感覺還是不容易呀。






發佈了64 篇原創文章 · 獲贊 154 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章