Android productFlavors多渠道 打包

本文详细介绍了如何在Gradle构建脚本中实现不同渠道的依赖管理(如channelA和channelB),使用`channelImplementation`区分模块和库,以及如何根据版本号和ABI重命名APK。还讨论了在缺少定义的风味渠道时如何进行默认匹配。
摘要由CSDN通过智能技术生成

一、不同渠道引用不同 dependencies方法
如下build.gradle文件所示,
1.先定义productFlavors 渠道channelA和channelB,
2.然后通过getTaskNames 获取当前编译的渠道,并赋值给变量 channel
3.dependencies 中判断当前 channel 依赖不同的mudule或者jar
--------------------build.gradle文件
def channel = ""
gradle.startParameter.getTaskNames().each { task ->
if (task.toLowerCase().contains("channelA")) {
channel = "channelA"
} else if (task.toLowerCase().contains("channelB")) {
channel = "channelB"
}
}

android {
productFlavors {
channelA {
buildConfigField("String", "PROJECT_NAME", "\"channelA\"")
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]

}
channelB {
buildConfigField("String", "PROJECT_NAME", "\"channelB\"")
versionCode rootProject.ext.android["versionCode"]
versionName rootProject.ext.android["versionName"]

}
}

}

dependencies {
println("**********channel:" + channel)
if (channel == "channelA") {
//依赖不同的module
} else if (channel == "channelB") {
//依赖不同的module
}
}
--

这样做代码编辑模式下识别不到引用的包(只有编译时才可以识别到引用的包),可以做如下修改
例如:implementation 'androidx.appcompat:appcompat:1.2.0'
//如果只是channelA 渠道引用该jar 可以改成
channelAImplementation 'androidx.appcompat:appcompat:1.2.0'
这样就可以做到不同渠道引用不同的module,jar或aar了


二、多渠道重命名输出apk

例如在build variant 选择 versionCode1Abi1release,
variant.baseName为: versionCode1-abi1-release
生成的apk名称为myapp-versionCode1-abi1-release.apk
-------build.gradle文件配置如下
android {
flavorDimensions('versionCode', 'abi')
productFlavors {
versionCode1 {
dimension 'versionCode'
}
versionCode2 {
dimension 'versionCode'
}
abi1 {
dimension 'abi'
}
abi2 {
dimension 'abi'
}
}

android.applicationVariants.all { variant ->
variant.outputs.all {
println("**********applicationVariants variant.baseName:" + variant.baseName)

def appName = "myapp"
outputFileName = appName + "-" + variant.baseName + ".apk"

println "output app :" + outputFileName
}
}
}

三、风味渠道缺失默认匹配
例如 :如果app 定义的 了
flavorDimensions "demo"
productFlavors {
flavor1 {
dimension 'demo'
}
flavo2 {
dimension 'demo'
}
}
在其他module中没有定义可以定义匹配的的风味渠道,可以通过missingDimensionStrategy 默认匹配,

missingDimensionStrategy 'demo', 'flavor1', 'flavor2'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值