批量打包工具
批量打包工具:解决多平台发布的重复劳动
批量打包工具:解决多平台发布的重复劳动
它解决什么问题
如果你用Cocos Creator开发游戏,要发布到多个平台,你就知道有多痛苦了。
每次更新版本,需要:
- iOS包:Creator构建 → 修改版本号 → Xcode打包 → 上传TestFlight
- Android包:Creator构建 → 生成热更新文件 → 修改版本号 → 签名打包 → 上传分发
- 微信小游戏:Creator构建 → 上传CDN资源 → 上传小游戏包 → 设置体验版
- 支付宝小游戏:Creator构建 → 上传CDN资源 → 上传小游戏包 → 设置体验版
- 抖音小游戏:Creator构建 → 上传CDN资源 → 上传小游戏包 → 设置体验版
- 鸿蒙包:Creator构建 → 生成热更新文件 → 修改版本号 → DevEco打包
一个游戏6个平台,每个平台5-8步操作,手动操作一遍要1-2小时,而且容易出错。
这个工具就是为了把这些重复劳动自动化,一个命令搞定所有平台的打包发布。
核心功能
支持平台
- 原生平台: Android、iOS、鸿蒙
- 小游戏平台: 微信、支付宝、抖音
- 多渠道: TapTap、小米、4399等Android渠道
自动化流程
原生平台打包:
Creator构建 → 生成热更新manifest → 修改版本号/build号 → 平台打包 → 上传CDN → 飞书通知
小游戏打包:
Creator构建 → 上传远程资源到CDN → 上传小游戏后台 → 设置体验版 → 飞书通知+二维码
热更新发布:
Creator构建 → 生成新manifest文件 → 上传更新资源到CDN → 飞书通知
快速开始
1. 安装依赖
cd BuildTools
npm install
2. 配置文件
修改config.json,主要配置:
{
"creator": "/Applications/Cocos/Creator/3.8.6/CocosCreator.app/Contents/MacOS/CocosCreator",
"project": "/Users/your-name/YourGame",
"channels": [
{
"channel": "wechatgame",
"name": "微信小游戏",
"platform": "wechatgame",
"config": "./local/buildConfig_wechatgame.json"
}
],
"platforms": [
{
"platform": "android",
"native": "./native/engine/android/app",
"build": "./build/android/proj"
}
]
}
3. 环境变量
# 阿里云OSS(用于CDN上传)
export OSS_ACCESS_KEY_ID="your-key-id"
export OSS_ACCESS_KEY_SECRET="your-key-secret"
export OSS_URL="your-oss-url"
export OSS_REGION="oss-cn-hangzhou"
export OSS_BUCKET="your-bucket"
# 飞书通知机器人
export FEISHU_ROBOT_WEBHOOK="your-webhook-url"
# Android打包工具
export APKSIGNER="/path/to/sdk/build-tools/30.0.3/apksigner"
4. 使用方式
交互式打包:
node BuildCommand.js
# 选择平台、输入版本号、选择debug/release
命令行打包:
# 打包微信小游戏 v1.2.0 release版
node BuildJenkins.js -p wechatgame -v 1.2.0 -b 1 -d false -n true
# 热更新 Android v1.2.1
node HotUpdateJenkins.js -p android -v 1.2.1 -hot 1001 -d false -n true
集成Jenkins:
// Jenkins Pipeline 示例
pipeline {
agent any
parameters {
choice(name: 'PLATFORM', choices: ['wechatgame', 'android', 'harmonyos-next'], description: '选择平台')
string(name: 'VERSION', defaultValue: '1.0.0', description: '版本号')
booleanParam(name: 'IS_DEBUG', defaultValue: false, description: '是否Debug版本')
}
stages {
stage('Build Game') {
steps {
script {
sh """
cd BuildTools
node BuildJenkins.js -p ${params.PLATFORM} -v ${params.VERSION} -b ${env.BUILD_NUMBER} -d ${params.IS_DEBUG} -n true
"""
}
}
}
}
post {
success {
echo "构建成功: ${params.PLATFORM} v${params.VERSION}"
}
failure {
echo "构建失败"
}
}
}
技术特点
配置化驱动: 通过JSON配置文件管理所有平台参数,不需要改代码。
模块化设计: 每个平台一个独立模块,添加新平台只需实现对应接口。
完整的构建链: 从Creator构建到最终发布的完整自动化。
错误处理: 每步操作都有结果检查,构建失败会及时停止并通知。
通知集成: 自动发送飞书通知,包含版本信息、下载链接、二维码。
二次开发指南
添加新平台
- 创建平台模块
// platforms/YourPlatform.js class BuildYourPlatform { static async build(config, channel, version, buildCode, isDebug) { // 实现平台特定的构建逻辑 return Result.success(); } } - 注册到主流程
// AutoBuild.js this._platformFlowBindFuncs = { ['your-platform']: this.buildYourPlatformFlow, // ... 其他平台 } - 添加配置
{ "channels": [ { "channel": "your-channel", "name": "Your Platform", "platform": "your-platform", "config": "./local/buildConfig_your-platform.json" } ] }
自定义构建步骤
继承基础构建类,重写需要的方法:
class CustomAndroidBuild extends BuildAndroid {
static async beforeBuild() {
// 构建前的自定义操作
await super.beforeBuild();
// 你的自定义逻辑
}
static async afterBuild() {
// 构建后的自定义操作
await super.afterBuild();
// 你的自定义逻辑
}
}
扩展通知方式
添加新的通知渠道:
// notifications/YourNotification.js
class YourNotification {
static async send(title, content, isDebug) {
// 实现通知逻辑
}
}
核心模块说明
AutoBuild.js: 主控制器,协调各模块BuildCreator3.8.js: Creator构建封装platforms/: 各平台构建实现utils/: 通用工具类(命令执行、文件操作、结果处理)oss/: CDN上传模块NotificationFeishu/: 飞书通知模块
开发建议
遵循现有模式: 每个平台模块都返回Result对象,统一错误处理。
配置优先: 尽量通过配置文件控制行为,减少硬编码。
详细日志: 使用Colors.js输出带颜色的日志,方便调试。
异常处理: 每个异步操作都要try-catch,构建失败要有明确提示。
适用场景
- Cocos Creator游戏多平台发布
- 需要频繁更新版本的项目
- 有多个Android渠道的游戏
- 团队协作需要标准化构建流程的项目
- Jenkins集成自动化发布
如果你也被多平台打包折磨,不妨试试。