环境: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
查看结果: