在Android开发中,多渠道打包是一种常见的需求,它可以帮助开发者追踪应用在不同渠道上的安装和使用情况。以下是一个使用Gradle的多渠道打包示例:
首先,在项目的build.gradle文件中配置flavors:
android {
...
productFlavors {
googleplay {}
baidu {}
xiaomi {}
// 添加更多的 flavors 根据需要
}
}
然后,在gradle.properties文件中添加多渠道配置:
# 默认渠道
CHANNEL=googleplay
# 或者在命令行中设置渠道
# CHANNEL=baidu
# CHANNEL=xiaomi
接下来,在build.gradle中使用CHANNEL属性来为每个flavor指定渠道名称:
def getTime() {
return new Date().format("yyyyMMdd_HHmm", TimeZone.getDefault())
}
android {
...
productFlavors {
googleplay {
manifestPlaceholders = [channelId: "googleplay"]
}
baidu {
manifestPlaceholders = [channelId: "baidu"]
}
xiaomi {
manifestPlaceholders = [channelId: "xiaomi"]
}
}
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 输出apk名称为app_v1.0_20240805_1023_xiaomi.apk
def fileName = "app_v${defaultConfig.versionName}_${getTime()}_${variant.productFlavors[0].name}.apk"
outputFileName = fileName
}
}
}
}
最后,在AndroidManifest.xml中使用${channelId}占位符来设置渠道特定的信息:
<meta-data android:name="CHANNEL" android:value="${channelId}" />
现在,你可以在终端或命令行使用以下命令来构建特定渠道的APK:(备注这部分我还没试,明天再试试执行一下)
./gradlew assembleGoogleplay
./gradlew assembleBaidu
./gradlew assembleXiaomi
或者,如果你在gradle.properties中设置了CHANNEL属性,只需运行以下命令即可:
./gradlew assemble
这将根据CHANNEL属性中定义的渠道来构建APK。