最近项目中要实现一个需求,打出不同资源文件的安装包,之前有过项目经验,但是是通过前端大佬编写linux脚本来实现资源替换,现在采用jenkins来实现,jenkins通过实现gradle脚本动态实现多渠道资源文件的可视化界面选择功能,最终打出多个渠道不同资源文件的安装包,闲言少叙,进入正篇。
jenkins的安装:
1.我这里采用的是.msi文件进行服务搭建,.msi安装成功后,需要在后台启动服务;(通过localhost:8080浏览器进行访问)
2.然后进行插件更新,这个需要很久,楼主都是更新了好长时间,各种失败,小伙伴们不要担心,就算失败,最终进去还是可以更新的,更新完了我们就可以申请账号,进行项目的构建了;
3.在workspace(工作空间下创建自己的项目),然后就可以配置多渠道打包的构建环境了,看看我的配置属性:
注意:如果如果要选择打多个渠道的包,赋值为空;
4.最后就可以进行项目可视化构建了
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名字、进行文件读写作者权限设置;
<application
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">
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
补充:这里需要配置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"。
动态替换掉其中资源文件以及编辑的哪个渠道文件,有好的建议或者方法的大神希望留言,写的不够完整,望多多见谅。