摘要
需求
针对不同平台打包,时间,效率等方面提升的需要。
实现方式
通过
Gradle
自定义配置及、工程结构特殊配置实现打包过程时间效率的提示
结果
实现多渠道,多版本,动态替换包名、图片、资源文件。
详细说明
Gradle
- buildTypes 定义
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
applicationIdSuffix ".debug"
minifyEnabled false
}
}
buildTypes
声明编译类型,常规可以设置release
、debug
、beta
等,可根据实际情况,定义相应属性配置,eg:是否混淆,最小化等
- productFlavors 定义
//给定风格纬度
flavorDimensions "platform"
productFlavors {
//Android 平台 app
androidapp {
dimension "platform"
applicationId "com.example.multichannel.androidapp"
manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.androidapp"]
versionCode = 101
versionName = "1.0.1"
}
//ink 平台 app
einkapp {
dimension "platform"
applicationId "com.example.multichannel.einkapp"
manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.androidapp"]
versionCode = 102
versionName = "1.0.2"
}
//其他 平台 app
otherapp {
dimension "platform"
applicationId "com.example.multichannel.otherapp"
manifestPlaceholders = [PACKAGE_NAME:"com.example.multichannel.otherapp"]
versionCode = 103
versionName = "1.0.3"
}
}
flavorDimensions "platform
3.0(Android Studio Gradle plugin)之后需要明确声明风格,并且在渠道内明确声明dimension
同样,渠道声明内部也可以定义相应属性配置
与
buildTypes
组合可以形成对应的flavors + buildTypes
包
- 定义输出.apk文件名
// 输出文件配置
applicationVariants.all { variant ->
variant.getPackageApplicationProvider().get().outputScope.apkDatas.forEach { apkData ->
apkData.outputFileName = "multi-channel-${variant.flavorName}-${variant.versionName}-${variant.buildType.name}.apk"
}
}
以上代码表示,输出apk会自动打包成 :
multi-channel-[flavorName]-[versionName]-[buildType].apk
Eg: buildTypes为
release
,flavor为einkapp
则会生成multi-channel-einkapp-1.0.2-release.apk
动态替换包名、图片、资源文件

如图在
src
下,新建与渠道同名包,将对应渠道的资源放入其中(目录结构与main
相同)注意:相同资源需要同名
因资源文件种类众多,不做赘述
打包


打包过程无区别,可以选择需要的版本进行打包,支持单个或多个,打包好后会在
app
目录下生成对应的渠道包,在渠道包下生成对应的构建类型包,如图:

结语
到此,多渠道打包,动态替换包名、图片、资源文件功能需求已完成,后续也可根据实际情况,进行相应的定制。