Android使用Jenkins持續整合自動化打包
阿新 • • 發佈:2018-12-10
一、使用shell自動打包apk
命令呼叫android專案根目錄下的gradlew來完成打包
新建AndroidBuild.sh命令檔案,並配置檔案內容如下
#!/bin/bash #version.properties檔案所在的目錄 path='/Users/mac/androidProject/TestMaster' content=$(cat ${path}/version.properties) echo "讀取內容:$content" #讀取檔案的VERSION_CODE對應的value,儲存versionCode變數 versionCode=`grep VERSION_CODE ${path}version.properties|cut -d'=' -f2` #將versionCode+1,得到累加後的addVersionCode addVersionCode=`expr $versionCode + 1` echo "versionCode====$versionCode" # 將addVersionCode重新累加賦值給檔案的VERSION_CODE sed -i "s#^VERSION_CODE=.*#VERSION_CODE=${addVersionCode}#g" ${path}version.properties content=$(cat ${path}version.properties) addVersionCode=`grep VERSION_CODE ${path}version.properties|cut -d'=' -f2` echo "替換之後====$content" echo "addVersionCode====$addVersionCode" #判斷versionCode是否累加成功, -gt標識大於返回true if [ $addVersionCode -gt $versionCode ] then # 打包apk #gradlew 對應目錄 BUILD_TOOL_PATH='/Users/mac/androidProject/TestMaster' echo "開始打包..." #cd $BUILD_TOOL_PATH && ./gradlew assembleinsectRelease cd $BUILD_TOOL_PATH && ./gradlew assembleDebug openRootPath='/Users/mac/androidProject/TestMaster/app' #打包完成開啟包所在的目錄,當然,程式裡面的這面絕對路徑請替換成你對應的路徑,不然程式執行不會成功 explorer $openRootPath'\build\outputs\apk' else echo "error : versionCode未加1" fi
其中需要打包debug版本需要配置gradlew assembleDebug/assembleinsectDebug,
打包release版本需要配置gradlew assembleRelease/assembleinsectRelease
使用時cd到AndroidBuild.sh資料夾,使用命令sh AndroidBuild.sh
二、Gradle配置
首先需要在根目錄下新建versionCode配置檔案用於記錄打包的版本號,舉例新建version.properties,檔案內容VERSION_CODE=1
配置主Module的Gradle檔案,檔案內容可簡單配置如下
apply plugin: 'com.android.application' def getVersionCode() { def versionFile = file('../version.properties') if (versionFile.canRead()) { def Properties versionProps = new Properties() versionProps.load(new FileInputStream(versionFile)) def versionCode = versionProps['VERSION_CODE'].toInteger() def runTasks = gradle.startParameter.taskNames //僅在assembleRelease任務是增加版本號,其他渠道包在此分別配置 // if ('assembleDebug' in runTasks|'assembleinsectDebug' in runTasks) { versionProps['VERSION_CODE'] = (++versionCode).toString() versionProps.store(versionFile.newWriter(), null) // } return versionCode } else { throw new GradleException("Could not find version.properties!") } } android { def currentVersionCode = getVersionCode() compileSdkVersion 26 defaultConfig { applicationId "com.liuxingyu.testmaster" minSdkVersion 15 targetSdkVersion 26 versionCode currentVersionCode versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } signingConfigs { release { storeFile file('/Users/mac/androidProject/TestMaster/app/release.keystore') //絕對路徑 storePassword "jure123456" keyAlias "key0" keyPassword "jure123456" } } buildTypes { debug { minifyEnabled false shrinkResources false zipAlignEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { minifyEnabled true shrinkResources true zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.1.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
二、使用Jenkins持續整合
待續。。。