最近项目中要实现一个需求,打出不同资源文件的安装包,之前有过项目经验,但是是通过前端大佬编写linux脚本来实现资源替换,现在采用jenkins来实现,jenkins通过实现gradle脚本动态实现多渠道资源文件的可视化界面选择功能,最终打出多个渠道不同资源文件的安装包,闲言少叙,进入正篇。

jenkins的安装:

1.我这里采用的是.msi文件进行服务搭建,.msi安装成功后,需要在后台启动服务;(通过localhost:8080浏览器进行访问)

287ac3d3571f

2.然后进行插件更新,这个需要很久,楼主都是更新了好长时间,各种失败,小伙伴们不要担心,就算失败,最终进去还是可以更新的,更新完了我们就可以申请账号,进行项目的构建了;

287ac3d3571f

287ac3d3571f

3.在workspace(工作空间下创建自己的项目),然后就可以配置多渠道打包的构建环境了,看看我的配置属性:

注意:如果如果要选择打多个渠道的包,赋值为空;

287ac3d3571f

287ac3d3571f

287ac3d3571f

在app目录下创建多渠道打包的文件家,以及文件夹下面防止动态替换的资源文件,如下:

287ac3d3571f

287ac3d3571f

4.最后就可以进行项目可视化构建了

287ac3d3571f

5.再来看看项目结构与配置 签名文件配置、多渠道资源文件配置、自定义输出app名字与目录:

注意:渠道的名字一定要与app目录下文件的名字一致,要么无法找到;

apply plugin: 'com.android.application'

android {

compileSdkVersion rootProject.ext.compileSdkVersion

buildToolsVersion rootProject.ext.buildToolsVersion

aaptOptions.cruncherEnabled = false

aaptOptions.useNewCruncher = false

dataBinding {

enabled = true

}

signingConfigs {//签名的配置

release {

storeFile file("F:/OA-HLW/xxx.jks")

storePassword '123456'

keyAlias 'key0'

keyPassword '123456'

v1SigningEnabled true

}

}

productFlavors {//多渠道配置 包名、版本号、版本名、manifest文件中icon与app名字配置;

hbws {

applicationId "com.tjhq.oa.hbws"

versionCode 1

versionName "1.0"

manifestPlaceholders = [MTA_CHANNEL_VALUE: "hbws",app_icon: "@mipmap/oa_icon",app_name: "@string/app_name"]

}

fjoa {

applicationId "com.tjhq.oa.fjoa"

versionCode 1

versionName "1.0"

manifestPlaceholders = [MTA_CHANNEL_VALUE: "fjoa",app_icon: "@mipmap/oa_icon",app_name: "@string/app_name"]

}

hblcj {

applicationId "com.tjhq.oa.hblcj"

versionCode 1

versionName "1.0"

manifestPlaceholders = [MTA_CHANNEL_VALUE: "hblcj",app_icon: "@mipmap/oa_icon",app_name: "@string/app_name"]

}

}

defaultConfig {

applicationId "com.tihq.oa"

minSdkVersion rootProject.ext.minSdkVersion

targetSdkVersion rootProject.ext.targetSdkVersion

versionCode  APP_CODE as int

versionName  APP_VERSION

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

multiDexEnabled true //分包配置

flavorDimensions "default"

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

signingConfig signingConfigs.release //自定义apk的输出目录

applicationVariants.all { variant ->

variant.outputs.all {

variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath +File.separator+"app"+File.separator + "outputs"+File.separator+"apk")

outputFileName = "${variant.productFlavors[0].name}_" +

"${this.android.defaultConfig.versionName}_" +

"${releaseTime()}.apk"

}

}

}

}

}

def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}

动态配置manifest中icon、app名字、进行文件读写作者权限设置;

android:name="com.tjhq.basemodel.application.BaseApplication"

android:allowBackup="true"

android:icon="${app_icon}"

android:label="${app_name}"

android:supportsRtl="true"

android:theme="@style/ActivityTheme">

android:name="android.support.v4.content.FileProvider"

android:authorities="${applicationId}.fileprovider"

android:exported="false"

android:grantUriPermissions="true">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/file_paths" />

补充:这里需要配置java的jdk环境、android的sdk环境,gradle编译的环境,这里没有进行详细描述,最后小伙伴也可以拿到jenkins的构建脚本,进行后台多渠道一键打包功能,

D:\gradle-4.4\bin>call gradle.bat -PPRODUCT_FLAVORS=hbws -PAPP_CODE=1 -PBUILD_TYPE=Release -PAPP_VERSION=1.0 assemblehbwsRelease -b "D:\Program Files (x86)\Jenkins\workspace\XTBG_OA\trunk\app\build.gradle"。

动态替换掉其中资源文件以及编辑的哪个渠道文件,有好的建议或者方法的大神希望留言,写的不够完整,望多多见谅。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐