当前位置: 首页 > news >正文

Flutter 项目一键打包多个渠道包的实现

前言

在移动开发中,通常需要对应用进行不同渠道的打包,以满足多平台推广需求。本文将介绍如何通过一键打包脚本,实现 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 脚本实现自动化渠道打包,节省了手动切换渠道标识的时间,方便后续的渠道分发和管理。

http://www.jsqmd.com/news/1295238/

相关文章:

  • 433M 无线接收模块输出方式怎么选?点动、自锁、互锁、串口,一文讲透
  • AsmDude2:Visual Studio汇编开发工具终极指南,快速提升x86/x64汇编编程效率
  • AI财务分析从0到1:7步构建高精度预测模型,附可复用Python代码库
  • AI音乐和弦生成技术白皮书(2024权威实测版):基于LSTM/Transformer/MusicLLM的7种进行效果对比报告
  • RedisDesktopManager 终极实战指南:如何高效管理 Redis 数据库
  • 基于区块链fisco的超市供应管理商城销售系统(源码+lw+部署文档+讲解等)
  • 短剧 / 电商工作室刚需!一站式 AI 视频工作台选型指南,批量制作与协同干货 - 品牌品鉴馆
  • 3个Palworld存档问题,用这个开源工具都能轻松解决
  • 靠谱的门铃音乐芯片企业
  • 2026年7月硬核东莞geo优化公司推荐榜单TOP5:实测数据盘点与分级选型建议 - 资讯在线
  • 5分钟掌握d2s-editor:免费开源的暗黑破坏神2存档编辑终极方案
  • 2026年应届生黑科技榜单9款AI论文软件亲测!
  • # 90%的人都在用AI写代码了,但最值钱的能力根本不是写代码
  • Formality:设置Automated Setup Mode模式
  • 2026安徽工贸职业技术学院1+3预科复读班火热招生 公办小班名额紧张可预约 - 教育为先
  • 如何用AI技术3步完成音频转歌词?Open-Lyrics智能字幕生成工具完整指南
  • 2026年8月房产中介管理系统怎么选?老板必看的“避坑六步法” - 优企甄选
  • HCIA四
  • 深度探索:Mem Reduct如何以轻量级设计重塑Windows内存管理体验
  • Cursor 写完 CRUD 后,导出接口为什么最容易漏权限
  • 分期乐支付宝消费券(套装)回收指南,新手适宜的三种途径对比与参考 - 淘淘收小程序
  • 深度解析ComfyUI ControlNet Aux:解密AI绘图预处理器的核心技术原理与实践应用
  • finereport 中台 帆软 编码解码
  • 2026世界互联网大会传递一个信号:企业数字资产建设,正成为AI时代的信任之锚 - 西安潮头条
  • Sunshine游戏串流终极指南:如何免费打造个人云游戏服务器
  • 什么是“可重构测试平台”?一文读懂模块化桁架在高校科研中的底层逻辑
  • 如何快速构建本地语音智能体:终极开源语音AI系统指南
  • 科研AI会员深度体验:7天足够判断一个工具适不适合
  • 重卡充电桩选型指南:干线物流补能,谁更经得起考验?
  • 【单片机毕设案例分享】基于雨水传感的多档位雨刮舵机控制系统设计与开发 基于嵌入式硬件的雨量检测与雨刮智能控制平台搭建(013401)