命令行自动打包工具(支持批量、多渠道打包)集成到jenkins更香

一、前言

作为一名开发人员,应该专注于项目内容,而不是被一些重复性的工作占用大量时间精力,而项目上线后版本更新,会存在多个平台,多个渠道,这些不同渠道的打包,更是会占用大量精力,并且是一种重复性极强的工作。

基于本人目前的项目,我们算是渠道比较少的了

包含:iOS、鸿蒙、android (taptap/抖音app/官方包)、微信小游戏、抖音小游戏、支付宝小游戏

大体拆分一下打包流程

  • 小游戏

    编译creator项目 --> 上传远程资源到cdn --> 上传小游戏包到平台 --> 同步包信息给测试
    
  • 原生平台

    编译creator项目 --> 生成热更新比对文件manifest --> 生成包(android/鸿蒙/ios)--> 同步包信息给测试
    

渠道多了之后还是比较繁琐的,所以就有了下边这个自动化打包脚本

二、项目简介

这是一个基于creator项目的自动化打包工具

本工具使用的一些特殊工具:

  • cdn:用的是阿里云的oss

  • 通知:公司用的通讯工具是飞书,所以发送通知是到了飞书的群里

1. 支持平台:

  • android (支持多渠道配置 比如:taptap、小米、4399等)

  • ios (需要自行实现; 配合fastlane使用,可以自动上传到 testflight

  • 纯血鸿蒙

  • 微信小游戏

  • 支付宝小游戏

  • 抖音小游戏

  • 华为快游戏 (暂未实现)

2. 流程

打包原生平台

creator项目构建–> 生成热更新比对文件manifest --> 修改原生项目版本号和build号 --> 开始打包 --> 上传生成的包到cdn --> 发送飞书通知

打包小游戏

creator项目构建–> 上传远程资源到cdn --> 上传包到小游戏后台 --> 修改体验版为新版本 --> 发送飞书通知,附带新包二维码

热更新

creator项目构建 --> 生成并替换热更新比对文件manifest --> 上传更新资源到cdn -> 发送飞书通知

三、使用说明

见github或者gitee开源仓库

喜欢的话,动动小手,帮忙点个小星星~ 感谢!!!

鸿蒙打包演示
https://www.bilibili.com/video/BV19yG1zAEBg/?share_source=copy_web&vd_source=e0361e57571259df0aa1d24bbfc33c1a

android打包演示
https://www.bilibili.com/video/BV19yG1zAEiZ/?vd_source=a8673b48873802a41d5996698dcd14c2

四、推荐一波作者写的开源框架

最后放一个框架交流群二维码吧

15赞

现在好了~ 可以看看哈

可以可以,值得借鉴。 :innocent:

作者,高质高量。刚在看你框架,现在就在分享新的好东西了 :100: :+1:

:wave: :wave: :wave: :wave: (^U^)ノ~YO

贴一个交流群二维码,感兴趣的朋友来吧

建议:抽离逻辑
比如Cocos的构建、小游戏的打包、OSS的上传、飞书的通知
这样,就可以
支持不同的引擎、不同的平台、不同的对象存储、不同的办公软件

嗯 感谢建议
也这样想过,为了方便就一把梭出来了。。。

其实模块是抽离的,今天还有点时间,我再改改组装逻辑

主体逻辑有了,其实无所谓,让使用的人想怎么玩就怎么玩,也OK的。

是这个道理,开源的,大家可以随意改

1赞

重新组装了打包的流程
目前可以更方便的修改

   // AutoBuild.js中 分别注册了不同平台的打包流程

    constructor() {
        this._platformFlowBindFuncs = {
            ['android']: this.buildAndroidFlow,
            // ['ios']: this.buildIosFlow,
            ['harmonyos-next']: this.buildHarmonyNextFlow,
            ['wechatgame']: this.buildWechatFlow,
            ['bytedance-mini-game']: this.buildBytedanceFlow,
            ['alipay-mini-game']: this.buildAlipayFlow,
            // ['huawei-quick-game']: this.buildHuaweiQuickFlow,
        }
    }

想要修改对应平台的打包流程,只需要找到对应的函数
把不需要的调用删掉就差不多了

    /** 构建android渠道 */
    async buildAndroidFlow(channel) {
        let build = new BuildAndroid(channel, this._version, this._buildCode, this._debug);
        // 修改版本号
        build.modifyGameVersion();
        // 构建apk
        await build.buildApk();
        // 拷贝apk到指定目录 publish 目录
        await build.copyApkToPublish();
        // 给apk签名
        await build.signApk();
        // 上传apk到cdn
        await build.ossUpload();
        // 发送飞书通知
        if (this._notificationFeishu) {
            await build.notificationFeishu();
        }
        // 打印安卓打包完成信息
        console.log(colors("green", "安卓打包完成, apk文件路径:" + path.join(DataHelper.instance.project, 'publish', build.getApkName())));
    }

    /** 鸿蒙Next打包流程 */
    async buildHarmonyNextFlow() {
        let build = new BuildHarmony(this._version, this._buildCode, this._debug);
        // 修改鸿蒙项目版本号
        build.modifyGameVersion();
        // 构建鸿蒙app
        await build.buildApp();
        // 上传鸿蒙app和hap到cdn
        await build.ossUpload();
        // 发送飞书通知 
        if (this._notificationFeishu) {
            await build.notificationFeishu();
        }
        // 打印鸿蒙打包完成信息
        console.log(colors("green", "鸿蒙打包完成, hap文件路径:" + path.join(DataHelper.instance.project, 'publish', build.getHapName())));
        if (!this._debug) {
            console.log(colors("green", "鸿蒙打包完成, app文件路径:" + path.join(DataHelper.instance.project, 'publish', build.getAppName())));
        }
    }

    /** 支付宝小游戏打包流程 */
    async buildAlipayFlow() {
        let build = new BuildAlipay(this._version, this._message, this._debug);
        // 上传支付宝远程资源到cdn
        await build.uploadRes();
        // 上传支付宝小游戏到开发者后台 并且保存体验二维码到qrcode目录
        await build.uploadProject();

        // 发送飞书通知
        if (this._notificationFeishu) {
            let imagePath = path.join(DataHelper.instance.path, "qrcode", "ali_qrcode.png");
            await new NotificationFeishu().miniGameSend("alipay", this._version, imagePath, this._debug);
        }
    }

    /** 抖音小游戏打包流程 */
    async buildBytedanceFlow() {
        let build = new BuildBytedance(this._version, this._message, this._robot, this._debug);
        // 上传抖音远程资源到cdn
        await build.uploadRes();
        // 上传抖音小游戏到开发者后台 并且保存体验二维码到qrcode目录
        await build.uploadProject();
        // 发送飞书通知
        if (this._notificationFeishu) {
            let imagePath = path.join(DataHelper.instance.path, "qrcode", "bytedance_qrcode.png");
            await new NotificationFeishu().miniGameSend("bytedance", this._version, imagePath, this._debug);
        }
    }

    /** 微信小游戏打包流程 */
    async buildWechatFlow() {
        let build = new BuildWechat(this._version, this._message, this._robot, this._debug);
        // 上传微信远程资源到cdn
        await build.uploadRes();
        // 上传项目到微信后台
        await build.uploadProject();

        // 发送飞书通知 因为微信不支持自动修改体验版本 这里是提前把二维码放到目录下了
        if (this._notificationFeishu) {
            let imagePath = path.join(DataHelper.instance.path, "qrcode", "wechat_qrcode.jpg");
            await new NotificationFeishu().miniGameSend("wechatgame", this._version, imagePath, this._debug);
        }
    }

修改打包流程可以找到对应的平台,比如android

把飞书通知的代码注释掉

/** 构建android渠道 */
    async buildAndroidFlow(channel) {
        let build = new BuildAndroid(channel, this._version, this._buildCode, this._debug);
        // 修改版本号
        build.modifyGameVersion();
        // 构建apk
        await build.buildApk();
        // 拷贝apk到指定目录 publish 目录
        await build.copyApkToPublish();
        // 给apk签名
        await build.signApk();
        // 上传apk到cdn
        await build.ossUpload();
        // 发送飞书通知
        // if (this._notificationFeishu) {
        //     await build.notificationFeishu();
        // }
        // 打印安卓打包完成信息
        console.log(colors("green", "安卓打包完成, apk文件路径:" + path.join(DataHelper.instance.project, 'publish', build.getApkName())));
    }      

OV实现了吗?感谢分享,看一下

ov是什么?

oppo vivo的小游戏

那个我们游戏没上,就没搞,我这个是我们项目自用的,抽出来的

25年5月8日

添加自定义引擎的打包支持

二维码过期了

一会更一下