環境:windows jdk1.8
一、Jenkjins服務器的搭建
官網地址: https://jenkins.io/download/ 或者 百度網盤Jenkins下載鏈接 提取碼:x49z
安裝插件的環境是在外網,所以需要大家科學上網
二、Jenkins配置-
1 點擊Configure System
第一個是sdk的路徑,相應的,在計算機環境變量也需要配置。ANDROID_HOME
第二個是解決文件路徑過長,這個環境變量也需要配置-可忽略
2 點擊Global Tool Configuration配置gradle
3 點擊Manage Plugins下載HTML Publisher plugin 以及 JaCoCo plugin 後面會介紹
三、Jenkins構建項目
1 構建一個自由風格的項目
2 配置git/subversion的path@HEAD(@HEAD代表拉取最新代碼,一定要配置)
3 構建步驟- 實際上就是執行gradle的命令,沒啥意思。 比如打個Debug版的360渠道包 assemble_360Debug。
這部分的指令在As右邊的Gradle都可以查看到
4增加構建步驟- 如果沒有下載插件的,是看不到下面的選擇項-
Html插件- 將本地的build目錄下reports的測試結果,以及代碼覆蓋率拷貝到相應的目錄(這裏的目錄需要你先在As上跑成功,纔能有具體的路徑,渠道包的更不同,所以要注意,所以給不了絕對路徑)
jacoco- 代碼覆蓋率。 AS中需要進行配置
Jenkins的配置就是這樣,其實真的很簡單。
四、下面貼下build文件的jacoco配置
apply plugin: 'jacoco'
jacoco {
version "0.7.9"
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.huke.eg"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "V1.0"
flavorDimensions "default"
multiDexEnabled = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
//佔位符
manifestPlaceholders = [
UMENG_CHANNEL_VALUE: "huke",
]
}
//渠道
productFlavors {
huke {}
//批量配置
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
}
signingConfigs {
release {
storeFile
storePassword
keyAlias
keyPassword
v1SigningEnabled true
v2SigningEnabled true
}
}
getSigningProperties()
//自定義輸出包名的設置
applicationVariants.all { variant ->
variant.outputs.all {
// 輸出apk名稱爲v1.0_tencent.apk
def fileName = "${defaultConfig.versionName}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
}
}
//其他設置
buildTypes {
release {
minifyEnabled true
shrinkResources true
signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
shrinkResources false
testCoverageEnabled = true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
//輸出類型
applicationVariants.all {
//判斷是release還是debug版本
def buildType = it.buildType.name
//獲取當前時間的"YYYY-MM-dd"格式。
def createTime = new Date().format("YYYY-MM-dd", TimeZone.getTimeZone("GMT+08:00"))
//如果是正式包,將其輸入到指定文件夾
if (buildType == "release") {
it.getPackageApplication().outputDirectory = new File('E:\\out_apk' + "/${createTime}")
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
lintOptions {
abortOnError false
}
}
//讀取簽名配置文件
def getSigningProperties() {
def propFile = file('signing.properties')
if (propFile.canRead()) {
def Properties props = new Properties()
props.load(new FileInputStream(propFile))
if (props != null && props.containsKey('STORE_FILE') && props.containsKey('STORE_PASSWORD') &&
props.containsKey('KEY_ALIAS') && props.containsKey('KEY_PASSWORD')) {
android.signingConfigs.release.storeFile = file(props['STORE_FILE'])
android.signingConfigs.release.storePassword = props['STORE_PASSWORD']
android.signingConfigs.release.keyAlias = props['KEY_ALIAS']
android.signingConfigs.release.keyPassword = props['KEY_PASSWORD']
} else {
println 'signing.properties found but some entries are missing'
android.buildTypes.release.signingConfig = null
}
} else {
println 'signing.properties not found'
android.buildTypes.release.signingConfig = null
}
}
task jacocoTestReport(type: JacocoReport) {
//gradlew jacocoTestReport
group = "Reporting"
description = "Generate Jacoco coverage reports after running tests."
reports {
xml.enabled = false
html.enabled = true
csv.enabled = false
}
classDirectories = fileTree(
dir: "$buildDir/intermediates/classes/debug",
)
def coverageSourceDirs = ['src/main/java']
additionalSourceDirs = files(coverageSourceDirs)
sourceDirectories = files(coverageSourceDirs)
additionalClassDirs = files(coverageSourceDirs)
executionData = files("$buildDir/outputs/code-coverage/connected/coverage.ec")
}
signing.properties文件內容-放到keystore的同級目錄-app的下面
STORE_FILE = /huke.jks STORE_PASSWORD = 123456 KEY_ALIAS = huke KEY_PASSWORD = 123456
然後assembleRealse-打包輸出到E盤out_apk目錄下面了
最後分享下我自己寫的腳本打包-build.bat 文件名
#快速編譯打包apk腳本 @echo off chcp 65001 cd 你的項目目錄 gradlew assembleRelease
查看結果: