前言
在移动开发中,通常需要对应用进行不同渠道的打包,以满足多平台推广需求。本文将介绍如何通过一键打包脚本,实现 Flutter 项目多渠道打包,并生成指定的渠道 APK 文件。
效果图:
实现步骤
1. 定义渠道索引和名称
首先在代码中定义一个渠道索引和渠道名称的数组,以便在打包时区分不同渠道。Flutter 支持在构建应用时通过 dart-define 传递不同的构建参数,我们可以利用这一特性传递渠道标识。
// 渠道下标——打包时可更改——传给后端
int channelTypeIndex = int.fromEnvironment('CHANNEL_INDEX', defaultValue: 0);
channelTypeIndex 会根据不同的构建命令动态设置值
2. 编写打包脚本 build_channels.sh
在项目根目录新建 build_channels.sh 文件,并编写如下代码:
#!/bin/bash
#运行:./build_channels.sh
# 定义所有渠道的索引和对应的名称
channels=(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
names=('官网专业版' '百度竞价1专业版' '百度竞价2专业版' '百度竞价3专业版' '百度竞价4专业版'
'百度竞价5专业版' '百度竞价6专业版' '百度信息流2专业版' '360竞价1专业版' '360竞价2专业版'
'360竞价3专业版' '神马竞价1专业版' '神马竞价2专业版' '神马竞价3专业版' 'uc信息流1专业版'
'百度知识营销专业版' '360品专专业版')
# 版本号,这里手动指定版本号,或者从其他地方读取
version="1.0.0"
# 遍历每个渠道,进行打包
for i in "${!channels[@]}"
do
channel=${channels[$i]}
name=${names[$i]}
echo "Building channel $channel ($name)..."
# 执行 flutter build apk 指令,为每个渠道设置不同的渠道下标
flutter build apk --release --no-tree-shake-icons --dart-define=CHANNEL_INDEX=$channel
# 找到生成的 APK 并重命名为特定渠道的名称,格式为 test_版本号_渠道名.apk
APK_SOURCE_PATH="build/app/outputs/flutter-apk/app-release.apk"
APK_TARGET_PATH="build/app/outputs/flutter-apk/test_${version}_${name}.apk"
if [ -f "$APK_SOURCE_PATH" ]; then
mv "$APK_SOURCE_PATH" "$APK_TARGET_PATH"
echo "Channel $channel ($name) APK built successfully and saved to $APK_TARGET_PATH"
else
echo "Error: APK for channel $channel ($name) not found!"
fi
done
echo "All channels built successfully!"
3. 脚本解读
• 渠道索引与名称:通过 channels 数组定义了每个渠道的索引,并在 names 数组中定义了渠道名称。
• 版本号设置:可以在 version 变量中修改版本号,自动生成的 APK 文件将包含此版本号。
• 遍历打包:通过 for 循环遍历所有渠道,依次运行打包命令。
• 文件重命名:打包完成后,脚本会将生成的 app-release.apk 重命名为 test_版本号_渠道名.apk,以便区分不同渠道的 APK 文件。
4. 运行脚本
确保脚本具有执行权限,然后在终端运行:
./build_channels.sh
5. 运行结果
运行后,会在 build/app/outputs/flutter-apk/ 目录下生成不同渠道的 APK 文件,文件名格式为 test_1.0.0_<渠道名>.apk。
本文介绍了如何通过 Flutter 和 Shell 脚本实现自动化渠道打包,节省了手动切换渠道标识的时间,方便后续的渠道分发和管理。
标签:专业版,APK,一键,channels,渠道,build,apk,Flutter,打包 From: https://blog.csdn.net/qq_52871405/article/details/143402088