Jenkins-安卓項目打包

安卓項目開發,打包,需要分開不同階段,不同人員進行負責,這裏我嘗試使用jenkins進行相關的控制和打包配置。

一、 列表內容

Jenkins安裝

軟件環境:

windows系統
jdk
android sdk
gradle

以上系統相關的安裝方法和環境變量設置暫不詳述。

到jenkins官網下載對應的最新版本windows安裝包,裝完就可以直接用http://localhost:8080訪問
官網地址

安裝成功後,進入首頁,用管理員賬號登錄。

1.首先進入系統管理,插件管理,把需要的插件先裝了:

這裏寫圖片描述

需要安裝的插件列表:
Branch API Plugin
build timeout plugin
build-name-setter
Credentials Binding Plugin
description setter plugin
Dynamic Parameter Plug-in
Environment Injector Plugin
fir-plugin(可選)
Git plugin(可選)
GIT server Plugin(可選)
Gradle Plugin
Pipeline: Basic Steps
Pipeline: Build Step
Pipeline: Input Step
Pipeline: Nodes and Processes
Pipeline: Stage Step
Post-Build Script Plug-in
SSH Slaves plugin
Subversion Release Manager plugin(可選)
Timestamper
Workspace Cleanup Plugin
Subversion Plug-in(可選)

2.打開主Module的build.gradle,該步坑比較多,主要是用於打包時候生成的包的類型控制,證書配置等信息,建議把對應的證書信息,存儲在環境變量中,然後在jenkins中配置相關環境變量,如果不做修改,在每次編譯過程中,還需要重新修改。

具體文件內容如下:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.0"

    defaultConfig {
        applicationId "com.test"
        minSdkVersion 14
        targetSdkVersion 15
        versionCode 28
        versionName "1.6.0.28"
    }
    signingConfigs {
        release {
        storeFile file("$System.env.KEYSTORE_PATH")
        storePassword "$System.env.STOREPASS"
        keyAlias "$System.env.ALIAS"
        keyPassword "$System.env.KEYPASS"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    repositories {
        flatDir {
            dirs 'libs' //this way we can find the .aar file in libs folder
        }
    }

    lintOptions {
        abortOnError false
        }

}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile files('libs/EventBus-2.4.0.jar')
    compile files('libs/nineoldandroids-2.4.0.jar')
    compile(name: 'recyclerview-v7-22.2.0', ext: 'aar')
    compile files('libs/glide-3.7.0.jar')
    compile files('libs/okhttputils-2_3_9.jar')
    compile files('libs/okhttp-3.6.0.jar')
    compile files('libs/okio-1.10.0.jar')
    compile files('libs/pinyin4j-2.5.0.jar')
    compile files('libs/sqlcipher.jar')
    compile files('libs/commons-codec.jar')
    compile files('libs/guava-r09.jar')
    compile 'com.android.support:support-annotations:22.2.0'
    //    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.android.support:support-v4:23.0.0'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
}

二、配置Jenkins參數
回到主界面->系統管理->Global Tool Configuration: 配置好JDK與Gradle。由於我本地已安裝好JDK與Gradle所以只需爲其指定路徑即可。
這裏寫圖片描述

另外,全局屬性->Environment variables 增加各個相關需要的一些環境變量,可以被後續編譯的程序中調用。

三、然後回到主界面->新建->構建一個自由風格的項目->ok:

1.勾選上參數化構建過程,先點擊Choice可爲其配置可選參數。我的項目需要配置的可選參數有API環境、打包渠道、是否來自Jenkins打包的標識。
這裏寫圖片描述

2.點擊String Parameter,讓使用者可以自定義顯示在App上的版本號,方便測試。可以再添加一個可輸入的標籤,最後把這個標籤加到構建頁的構建名稱中。

這裏寫圖片描述

3.點擊Dynamic Parameter,注入Groovy腳本,主要是生成時間戳。
這裏寫圖片描述

4.如果是SVN用戶可選擇List SubVersion tags,然後寫地址帳號密碼等,這個選項可以讓你選擇打包SVN上不同版本的代碼。如果是Git用戶可參照http://birdinroom.blog.51cto.com/7740375/1404930 上面的配置來拉取不同的版本。
這裏寫圖片描述

5.勾選源碼管理中自己所用的管理工具Git或者Subversion,填寫好相關信息,當然我們的地址是動態的,所以需要引用上一步所選擇的版本,如圖。(如果是Linux後面得加上/,不然拉取的其目錄下的內容不包含TAG_SVN這個目錄)
這裏寫圖片描述

6.在構建環境中勾選上Set Build Name,主要是動態生成每次顯示在構建頁上的名稱方便查看。
這裏寫圖片描述

7.Build periodically H 9 * * 1-6代表每週一至週六上午九點中的某一時間自動build一次。點擊每一項後面的問號有詳細說明可根據需求自行設置。
這裏寫圖片描述

8.在構建欄裏面選擇Invoke Gradle Script->選擇配置好的Gradle Version->在Tasks中輸入Gradle命令(沒了解過的建議先看下Gradle的基本命令),我們先執行一個clean,然後開始編譯,這時候就可以用引用上面配置的一些參數了,這裏可以用-P命令把參數傳入,也可以更方便的把下面的Pass jod parameters as Gradle properties勾選上,其實內部也是用-Pkey=Value的命令->在Root Build script中動態指定你項目的目錄,爲什麼是動態的呢?這是因爲我們上面提供了可選版本的功能,所以拉取的每個版本所放目錄是不一樣的,想要編譯相應的版本就得動態指定編譯目錄。
這裏寫圖片描述

9.選擇剛剛系統設置中的gradle版本,clean build代表每次都clean了再build。可自行配置命令行
這裏寫圖片描述

10.構建後可能需要發郵件或者獲得apk下載,如下,選擇Archive the artifacts並填寫apk路徑。
這裏寫圖片描述
選擇該project job-》左邊“狀態”-》最後一次成功的構建結果,並點擊下載apk。

注意事項:

1、參數傳遞的時候Jenkins裏面的參數名稱需要與build.gradle裏面的一致,不然沒什麼卵用。如:這裏寫圖片描述這裏寫圖片描述

2、在服務器上的SDK最好與你本地的一致,不然指不定編譯的時候會少東西。如果服務器的環境與你本地環境不同就不能直接copy過去了,最好的辦法是下載一個服務器環境的SDKManager或者直接用Android Studio,然後對照你本地SDK裏面的數據挨個下載,完了再copy到服務器。

3、local.properties中sdk.dir需設置成ANDROID_HOME路徑,默認代碼中最好刪去該項,該項配置在環境變量中,動態獲取

4、build.gradle的compileSdkVersion、buildToolsVersion需與ANDROID_HOME中的SDK一致

5、build.gradle腳本中可能需要加上lintOptions選項。該內容需要增加在主model的build.gradle中,並非根目錄的文件中。

android{

lintOptions {
abortOnError false
}

}

參考1
參考2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章