批量打包工具

批量打包工具:解决多平台发布的重复劳动

批量打包工具:解决多平台发布的重复劳动

它解决什么问题

如果你用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构建到最终发布的完整自动化。

错误处理: 每步操作都有结果检查,构建失败会及时停止并通知。

通知集成: 自动发送飞书通知,包含版本信息、下载链接、二维码。

二次开发指南

添加新平台

  1. 创建平台模块
    // platforms/YourPlatform.js
    class BuildYourPlatform {
     static async build(config, channel, version, buildCode, isDebug) {
         // 实现平台特定的构建逻辑
         return Result.success();
     }
    }
    
  2. 注册到主流程
    // AutoBuild.js
    this._platformFlowBindFuncs = {
     ['your-platform']: this.buildYourPlatformFlow,
     // ... 其他平台
    }
    
  3. 添加配置
    {
      "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集成自动化发布

如果你也被多平台打包折磨,不妨试试。