资讯动态

Cocos Creator 到 OpenHarmony:自动化构建 HAP 包全流程解析

发布时间:2026/10/23 21:08:28 来源:尧图企业网站定制
1. 从“点按钮”到“跑命令”这条链路自动化到底图什么这半年我一直在折腾一件事把Cocos Creator工程构建成OpenHarmony应用的流程从每天手动打开编辑器、点构建面板、填参数改成一条命令触发、全自动出包的流水线。最初只是嫌麻烦后来发现手动构建真正的问题不是慢而是不可靠——同样的参数今天能出包明天换一台机器就失败同一个版本上午打的包和下午打的包安装行为都能不一样。先说结论如果你的团队还在用“人肉点按钮”的方式出 OpenHarmony 包我强烈建议你把这件事当成一个正儿八经的工程问题来解决而不是靠“记得盯一下”来兜底。自动化构建换来的不光是省下那十几分钟更重要的是让每一次出包都可复现、可追踪、可回溯。1.1 手动打包的一天有多痛苦我经历过一段相当原始的阶段。那时候每次要给测试提包流程是固定的打开 Cocos Creator打开项目工程等编辑器加载完成打开构建面板选择 OpenHarmony 平台填写包名、版本号、构建目标点构建等进度条走完构建完成后再打开 DevEco Studio 去打开生成好的工程等 hvigor 同步依赖、编译编译通过后再调签名工具把 HAP 包签上名最后用命令行 adb 装到开发板上验证能不能安装。这一套下来顺利的话十五到二十分钟不顺利的话一个下午就没了。而且这中间每一步都是“人肉状态机”昨天构建用的编辑器版本和今天是不是同一个这次构建用的 API 版本是 10 还是 11签名用的 p12 证书文件是不是还在上次那台机器上版本号到底写的是 0.9.1 还是 0.91这些都是我踩过的坑。更尴尬的是当测试反馈某个包有问题我去追溯“这个包是用什么参数构建出来的”回答往往是“好像就是默认参数吧”。这种状态对于个人开发还可以忍一旦有两个人以上在维护项目或者需要在多个分支之间切包立即就会乱成一锅粥。1.2 自动化之后我实际得到的好处把这套流程改成自动化之后我得到的不是一个“更快的按钮”而是一整套约束参数可固化所有构建参数都写进脚本团队只看代码评审不靠口头传递。版本可追溯每次构建自动生成版本号、提交 git 记录、产物哈希后续定位问题直接按构建号查。环境可迁移换机器时只要照着环境准备清单配置一遍脚本还能照常跑。出包频率不受限制以前提包是“能不提就不提”现在每天自动出包测试随要随有。一句话总结自动化的核心价值不是“快”而是“确定性”。下文我会从链路原理、方案选型、脚本实现和踩坑排查四个维度把这个全流程讲透。如果你正准备动手这篇文章可以直接当参考手册用。2. 先把链路画清楚一个Cocos Creator工程如何变成OpenHarmony应用包写自动化脚本之前我花了不少时间把整条构建链路拆开看了一遍。很多人的误区是一上来就想写脚本结果对每一步生成的产物、需要的依赖完全没概念脚本写得再漂亮也跑不通。先理解“构建到底在干什么”后面的所有代码才有根基。2.1 Cocos Creator构建资源、代码与工程模板的三步合成Cocos Creator 在这一步做的事情本质上是把游戏/应用资源打包并把引擎代码和你的业务逻辑编译成目标平台需要的形态。选择 OpenHarmony 平台后编辑器主要完成三件事资源导入与压缩把场景、预制体、贴图、音频等资源做格式转换和压缩原始资源变成适合 OpenHarmony 设备加载的格式比如纹理压缩、音频转码。代码编译与打包把 TypeScript/JavaScript 脚本编译成可执行代码并连同引擎库一起打包产物会被整合到 OpenHarmony 工程对应的资源目录里。生成 OpenHarmony 工程骨架Cocos Creator 会根据项目配置生成一个标准的 OpenHarmony 工程目录里面包含 entry 模块、AppScope、构建配置、模块描述文件等。这个过程产出的不是最终可安装的包而是一个“可以被 hvigor 继续加工”的工程目录。你在脚本里需要关注的就是这个目录的路径以及它内部结构和默认配置是否符合预期。2.2 OpenHarmony侧的hvigor构建最终产出HAP得到 Cocos Creator 生成的工程骨架之后真正的 OpenHarmony 应用构建才刚开始。OpenHarmony 工程使用 hvigor 作为构建工具它类似于 Android 生态里的 Gradle负责做依赖解析、代码编译、资源合并、混淆等任务最终产出 HAP 包HarmonyOS Ability Package。Cocos Creator 生成的工程里其实已经带了 hvigor 相关的配置文件比如hvigorfile.ts、oh-package.json5等。你要做的就是进入这个工程目录执行 hvigor 的打包命令。打包命令会根据工程配置去下载依赖、编译原始代码、合并资源最后生成一个未经签名的 HAP 包。这一步在脚本里要注意的是工作目录切换和首次构建的依赖下载耗时。hvigor 首次跑的时候要拉取很多公共依赖如果网络状况不佳很容易出现超时。后文我会专门讲这个坑的排查方式。2.3 签名与归档决定能不能装机的最后一环hvigor 默认产出的 HAP 包是不能直接安装到真机/开发板上的必须经过签名。OpenHarmony 的签名机制和 Android 类似但也有差异它需要p12 证书文件包含应用开发者的私钥用于对包做数字签名。Profile 文件描述应用包名、签名证书指纹、调试/发布类型等信息的配置文件。hap-sign-tool 工具负责把 p12 证书和 profile 文件信息写入 HAP 包完成最终签名。签名这一步在 DevEco Studio 里通常是一键完成的但自动化环境里必须手动调用工具链把证书文件的路径、别名、密码、签名算法等参数逐个传进去。这块如果配置不对最常见的表现是“包能构建但装不上”错误信息五花八门排查起来非常痛苦。我建议把签名参数单独抽到一个配置中心里不要在脚本里写死。搞清楚了这三段链路你会发现整个自动化方案其实就是在回答三个问题如何无人工干预地触发 Cocos Creator 构建如何无人工干预地调用 hvigor 打包如何无人工干预地完成签名并归档产物接下来所有方案选型和脚本代码都是围绕这三个问题展开的。3. 自动化方案选型我在Jenkins、GitLab CI和纯脚本之间怎么选链路清楚之后下一步是选择承载自动化的“骨架”。这里我做了一轮对比主要候选是 Jenkins、GitLab CI 和纯本地脚本。方案没有绝对的好坏关键看你的团队基础设施和运维成本承受能力。3.1 三种方案的优缺点对照方案优点缺点适合场景纯脚本Shell/批处理灵活、不依赖额外服务、上手最快没有任务面板、失败通知弱、并发管理全靠自己个人开发、小团队、本地验证Jenkins生态成熟、插件齐全、支持流水线语法、结果可视化需要单独维护 Jenkins 服务初次配置有一定成本团队已有 CI 习惯或需要一个稳定的“构建中控台”GitLab CI/GitHub Actions与代码仓库集成紧密配置文件即代码云端/自托管都行对构建机的环境掌控不如 Jenkins 直接长时间运行的任务需要考虑资源配额仓库托管在对应平台、追求“配置即代码”我个人的判断是如果你的项目已经托管在某个代码托管平台上并且不想额外维护服务GitLab CI 或 GitHub Actions 更省心如果你们喜欢“构建机 面板”的传统模式Jenkins 更直接。纯脚本在我的实践里更适合做“最后一公里”的封装——比如 Jenkins 里调用的构建步骤本身就是一个 Shell 脚本两者并不互斥。3.2 我的最终选择与理由我的最终选择是Jenkins Pipeline 本地 Shell 脚本的组合。理由有三个对构建机资源的掌控更直接Cocos Creator 构建和 hvigor 构建都属于重型任务我需要精确控制哪台机器执行、哪些目录有缓存、是否可以并发。这在自己的 Jenkins 节点上最可控。失败处理更灵活Jenkins 的 Pipeline 可以细粒度地定义失败后的行为比如重试构建、清理缓存、发送通知。纯脚本写这种逻辑虽然能实现但复用性差。历史记录与追溯Jenkins 天然保留每次构建的参数、日志、产物地址配合后续的版本号规则追溯问题非常方便。实际落地时Jenkins 的任务不再笨重地做“每一步鼠标点击”而是通过 Pipeline 脚本串起来核心逻辑全部放在 Shell 脚本里。Pipeline 只负责调度、超时控制、并发管理和结果归档。这样即使以后要迁移到其他 CI 系统搬走的只是一套 Shell 脚本迁移成本很低。3.3 工程目录与产物的统一规范不管用哪种 CI 系统我强烈建议先约定一套工程目录规范否则脚本很难维护。我的目录结构大致如下build_scripts/ build_creator.sh # 调用 Cocos Creator 命令行构建 run_hvigor.sh # 进入工程执行 hvigor 打包 sign_hap.sh # 调用 hap-sign-tool 签名 archive_hap.sh # 产物归档、重命名、生成哈希 all_in_one.sh # 总入口按顺序调度上述脚本 workspace/ projects/ # 存放 Cocos Creator 工程源码 outputs/ # 存放构建产物 logs/ # 存放每次构建日志 cache/ # 存放构建缓存后续优化会用到每次构建开始前先清空一次 outputs 和 logs保证“这一次构建的结果是全新的”构建结束后所有中间产物和最终 HAP 包全部归档在 outputs 目录下并用构建号命名。这个规范对排查问题非常重要——你永远知道某个包是哪个构建产生的中间产物还在不在。4. 环境准备90%的失败其实卡在版本和路径很多人写自动化脚本的时候容易忽略环境准备结果脚本写得很漂亮但一执行就报错。从我实测的经验看Cocos Creator 到 OpenHarmony 这条构建链路上的坑很大比例根本不是代码逻辑问题而是环境版本不匹配、路径找不到、证书配置不对。所以我把环境准备单独拎出来讲这里面的细节决定了你后面省不省心。4.1 工具链版本怎么对照最省心我的经验是把整个工具链的版本写死并记录下来不要用“最新版”。原因很简单——Cocos Creator、OpenHarmony SDK、hvigor、JDK、Node.js 都有版本兼容性问题你不知道哪个组合一定会有问题但你知道哪个组合实测能跑通。我当前使用的组合如下组件版本说明Cocos Creator3.8.x构建 OpenHarmony 工程OpenHarmony SDKAPI 10 / API 11根据目标设备选择DevEco Studio与之配套的版本主要用于离线获取 SDK、hvigor 等工具链hvigor随 DevEco Studio 配套hvigor 版本对构建结果影响很大JDK17hvigor 构建依赖Node.js16 或 18Cocos Creator 某些脚本和工具链需要hap-sign-tool对应 SDK 版本用于最终签名值得留意的一点是Cocos Creator 和 OpenHarmony SDK 各自的版本升级都可能带来接口或配置差异升级任意一个都要做一次完整的“冒烟测试”。我试过只升级 Editor 版本、其他不动结果构建出来的工程在 hvigor 阶段直接报错后来发现是新版 Creator 生成的模块配置和旧版 hvigor 不兼容。4.2 环境变量与SDK路径的配置陷阱自动化构建最怕的是“当前用户能构建但 Jenkins 任务构建失败”。原因往往出现在环境变量的作用域上。比如你手动开终端时.bashrc里的JAVA_HOME被正常加载了但 Jenkins 节点启动的 agent 进程可能没有加载这些变量。我在实践中把所有环境变量写进一个独立的env.sh每次构建前先 source 它export JAVA_HOME/usr/lib/jvm/java-17-openjdk-amd64 export PATH$JAVA_HOME/bin:$PATH export NODE_HOME/usr/local/node-v16.20.2-linux-x64 export PATH$NODE_HOME/bin:$PATH export OHOS_SDK_HOME/opt/ohos-sdk export DEVECO_SDK_HOME/opt/DevEco-Studio/sdk export COCOS_CREATOR_PATH/opt/CocosCreator/CocosCreator这里最容易踩坑的是OHOS_SDK_HOME 和 DEVECO_SDK_HOME 的指向。OpenHarmony SDK 可能通过 DevEco Studio 安装也可能通过命令行工具单独安装不同安装方式的目录层级不一样。你用 DevEco Studio 打开一个工程时它能自动识别 SDK但命令行环境不会自动识别必须手动把路径告诉 hvigor。我建议在构建机器上只保留一份 SDK并用软链统一入口避免路径混乱。4.3 签名文件与证书的存放方式签名证书属于敏感文件不要直接塞进 git 仓库。我在构建机上的做法是单独放在一个不参与版本控制的目录下权限设为 600并且只给构建用户可读权限。同时证书的密码不要明文写在 Shell 脚本里而是从 Jenkins 的凭据管理中读取然后以环境变量的方式注入到脚本中。举个例子Jenkins Pipeline 里可以这样声明environment { SIGN_KEY_PASSWORD credentials(sign-key-password) SIGN_PROFILE_PASSWORD credentials(sign-profile-password) }然后在 Shell 脚本里读取$SIGN_KEY_PASSWORD传给 hap-sign-tool。这样既避免明文密码出现在代码或日志中也方便后续做证书轮换。签名文件的路径、别名、签名算法这些参数同样统一放在配置中不要散落在各个脚本里。5. 核心流水线拆解从Creator到HAP的自动化脚本实现环境准备好之后剩下的就是写好构建流水线。我把这条链路抽象成四个步骤Creator 构建、hvigor 打包、签名、归档。每一步对应一个独立脚本最后由一个总入口脚本串起来。这样做的好处是你可以单独调试某一个环节也可以在任何一步失败后从缓存点继续而不是每次从头再来。5.1 第一步用命令行触发Cocos Creator构建Cocos Creator 支持命令行构建模式。命令行构建的格式大致如下$COCOS_CREATOR_PATH --project $PROJECT_DIR --build platformopenharmony;debugfalse;buildPath$BUILD_PATH参数说明--project指向 Cocos Creator 工程目录目录下需要有project.json或对应版本的项目配置。--build构建参数多个参数用分号分隔。platform固定为 openharmonydebug根据是否需要调试包选择buildPath可以指定构建产出的临时目录。还可以追加version、packageName等参数让自动化脚本把版本号、包名直接注入构建流程省去后续手动改配置的麻烦。这一步有一个需要注意的点Cocos Creator 命令行构建并不总是“静默”的部分版本在首次运行时可能会尝试初始化图形环境或读取用户目录配置。我在构建机上装了一个轻量的显示环境甚至在纯命令行的 Linux 服务器上也会预先设置DISPLAY变量指向虚拟屏防止构建过程因为无法初始化窗口而挂死。如果你用的是自带图形界面的机器这个坑可以避开。执行完成后脚本要检查构建产物目录是否存在。这个目录一般是build/openharmony或其子目录。如果目录不存在直接报错退出不要继续向下走。5.2 第二步hvigor编译与打包拿到 Creator 生成的 OpenHarmony 工程后进入工程根目录执行 hvigor 打包命令cd $BUILD_PATH # 安装依赖 ohpm install # 执行 hvigor 构建 ./hvigorw assembleHap --mode module -p productdefaultohpm install会按照oh-package.json5拉取项目依赖hvigorw是 hvigor 的 wrapper 工具类似 Gradle wrapper会保证使用指定版本的 hvigor 执行构建。assembleHap是拼接 HAP 的 task--mode module表示按模块构建-p productdefault指定产品类型。这一步我先说几个常见问题的预防首次执行ohpm install时依赖下载量大一定要给 CI 任务设置足够的超时时间至少在十分钟以上否则很容易被默认超时杀掉。hvigor 构建输出里会出现警告信息但不要只看最后几行是绿的就觉得成功了一定要检查最终 HAP 文件是否生成、文件大小是否合理。如果工程里有多个模块而你需要出整包可能要增加-p moduleentrydefault这样的参数。具体以你的工程模块结构为准可以在本地先手动跑通一遍再写进脚本。构建成功后hvigor 会在模块的build/default/outputs/下生成 HAP 文件。在脚本里把这个路径记录下来下一步签名要用。5.3 第三步自动签名与版本号注入签名这步的脚本思路是把必要的参数全部从外部传入避免在代码里硬编码。hap-sign-tool 调用方式大致如下java -jar $HAP_SIGN_TOOL sign-app \ -keyAlias $SIGN_KEY_ALIAS \ -signAlg SHA256withECDSA \ -mode localSign \ -appCertFile $CERT_FILE \ -profileFile $PROFILE_FILE \ -inFile $UNSIGNED_HAP \ -outFile $SIGNED_HAP参数说明keyAlias证书别名创建 p12 时设置的。signAlgOpenHarmony 签名常用的算法是SHA256withECDSA。appCertFile你的 p12 证书文件路径。profileFile应用的 profile 文件由构建证书/profile 生成。inFile和outFile输入的未签名 HAP 和输出的已签名 HAP。版本号注入这件事我习惯放在签名之前做。具体做法是在 Creator 命令行构建时通过version参数传入版本号或者在 hvigor 构建前修改工程里的app.json5/module.json5中的版本字段。比较稳妥的方式是在 Creator 构建那一层就指定好版本号因为这样整个 HAP 版本管理都贯穿一致。版本号我建议用三位段式如 1.2.0或者带构建号如 1.2.0.45方便快速定位是哪个构建产生的包。5.4 第四步产物归档与通知签名完成之后把最终的 HAP 包复制到集中的一个产物目录并做两件小事生成校验哈希用sha256sum计算 HAP 的哈希值存放到同目录的.sha256文件中。后续任何人拿到包都可以校验完整性。记录构建元信息把 Git 提交号、构建参数、Cocos Creator 版本、hvigor 版本、构建时间等写入一个build_info.txt文件。这两步对出问题后的追踪特别有用。我遇到过测试反馈“这个包有问题”结果根据 build_info 发现包是在某次旧环境配置下构建的跟代码本身没关系。没有这些元信息排查过程会非常痛苦。归档完成后Jenkins Pipeline 里可以继续执行通知步骤比如发送到企业内部通讯工具或邮件。通知内容里带上产物下载地址、版本号、构建号让需要的人可以直接拿包去测。6. 实测中的高频失败与完整排查链路脚本写完只是开始真正磨人的是踩坑。我把自己遇到的频率最高的三个问题完整写下排查思路照着这个顺序去查大多数失败都能定位。6.1 场景一构建命令长时间不返回任务“挂死”现象Jenkins 任务卡在 Cocos Creator 构建或 hvigor 构建阶段持续十几分钟没有任何输出最后要么超时被杀要么一直挂着。排查链路先看构建机上的进程确认命令是死了还是还在运行。如果是 Java/Cocos 子进程还活着说明只是没有输出回显。检查是在哪个阶段挂的。Cocos Creator 阶段挂死多半和图形环境初始化有关比如缺少 X 相关组件、内存不足。hvigor 阶段挂死多半是依赖下载卡住或内存不足。看日志文件。Cocos Creator 日志可以重定向到文件里hvigor 日志默认在工程目录的hvigor子目录下有细致输出。针对“无输出回显”问题我的解决办法是为每个构建命令加--max-log-length或者直接重定向到日志文件并且用timeout命令包一层超过阈值就强杀并回传日志。timeout 1800 $COCOS_CREATOR_PATH --project ... $LOG_DIR/creator_build.log 21这样即使挂死也有日志可查不会干瞪眼。6.2 场景二hvigor依赖下载失败导致构建中断现象ohpm install或 hvigor 执行时网络下载依赖失败报 SSL 证书错误、超时或者仓库地址无法访问。排查链路确认构建机是否能正常访问依赖仓库。企业的内网构建机经常有网络限制导致仓库地址不可达。检查 hvigor 配置中的仓库地址。如果默认仓库访问不稳定可以考虑切换到内网镜像仓库或者把公共依赖提前缓存好。查看具体依赖版本。有些依赖下载重定向失败是因为版本号使用了动态版本如^1.0.0每次解析结果都不一样本地缓存也没有命中。全部改成锁定版本可以降低随机失败概率。最实用的兜底方案在构建机上维护一个本地缓存目录首次成功构建后把依赖目录整体压缩备份后续构建直接从缓存恢复。配合 hvigor 自身的缓存机制可以显著降低对网络的依赖。6.3 场景三签名的包装不上安装时报“签名不一致”现象HAP 构建成功、签名也成功返回 0但安装到 OpenHarmony 设备上时直接失败提示签名错误或证书不匹配。排查链路确认签名用的 p12 证书和 profile 文件是否配套。OpenHarmony 签名是“证书 profile”双重绑定两者必须对应同一个应用和同一个开发者。很多人从网上找了一个证书又拿另一个项目的 profile必然失败。检查签名算法是否被目标设备支持。老设备的系统版本如果较旧可能不支持某些新算法。检查 HAP 包内各模块的签名是否一致。如果你的工程有多个 HAP比如 entry 和另一个 feature 模块OpenHarmony 安装时会校验所有 HAP 的签名一致性——必须用同一套证书签所有模块不能用两套证书。用官方工具或日志查看具体错误码。设备端安装失败的原因可以从hilog或者 DevEco Studio 的设备日志中看到密码错误、证书过期、profile 应用名不匹配这些错误码各不相同。逐条对照比盲目换证书有效得多。6.4 我的通用排查顺序踩了足够多的坑之后我总结了一套通用排查顺序遇到任何构建问题都按这个顺序走看日志任何一步构建都有日志先找到对应的日志文件看最后一个报错点。确认版本组合Cocos Creator、SDK、hvigor、JDK、Node 的组合是否与之前成功构建时一致。确认环境变量相关的 SDK 路径、JAVA_HOME、PATH 是否在当前构建进程中正确加载。确认权限构建用户是否对依赖目录、缓存目录、产物目录有读写权限。复现最小化把构建参数简化到最小手动在构建机上执行一次排除 CI 层面的干扰同时方便观察完整日志。这套顺序帮我解决了很多看起来“玄学”的失败。多数情况下问题都出在环境变量或版本组合上而不是代码本身。7. 让流水线“跑得稳”缓存、并发与通知的几个优化当流水线能稳定跑通下一步就是让它跑得快、跑得省。我在这里分享几个我认为回报率最高的优化点。7.1 缓存体系把重复劳动降到最低构建过程中最耗时的两个部分一是 Cocos Creator 对工程资源的重编译二是 hvigor 对依赖的重解析。这两部分其实都有缓存机制关键在于怎么让你的自动化流程尽可能命中缓存。hvigor 的缓存目录通常在用户目录下的.hvigor或项目build/.hvigor下。我的做法是把这个缓存目录映射到构建机的固定位置并且每次构建前不清理它只在版本升级时手动清理一次。这就让“同一依赖的不同构建”能共享缓存第二次构建能比第一次快三分之一。Cocos Creator 构建侧的缓存逻辑相对复杂直接清理临时目录反而容易踩坑。我建议让构建临时目录按构建号隔离例如outputs/tmp_$BUILD_NUMBER这样一方面避免并发冲突另一方面如果你想复现某一历史构建的完整现场目录还在可以直接进去看。7.2 并行构建与构建机资源分配如果团队的构建任务比较频繁可以让 Jenkins 节点同时跑多个任务。但有一个前提要精确控制并发数。Cocos Creator 构建和 hvigor 构建都是内存大户单台构建机同时跑两个构建内存很容易被吃满反而导致互相拖慢。我实际的做法是单节点最多允许一个“重型构建”任务并发同时允许轻量任务如打包配置校验、静态检查并行。Jenkins 里通过节点的执行器数量控制这个并发度可以有效避免资源争抢造成的偶发失败。7.3 失败通知与日志收集自动化构建最怕的就是失败之后没人知道。我在 Pipeline 全局加了一个post阶段无论成功还是失败都会把本次构建的日志压缩上传到固定的存储目录并且把日志链接、产物地址、失败原因摘要发给相关人员。我特意强调“失败原因摘要”而不是“原始日志”。因为完整日志动辄上百兆直接发给人看很容易被忽略。我的做法是脚本在失败时自动抓取最后 50 行日志里的关键错误行比如ERROR、FAILED开头的行汇总成一个简短的摘要。这样接收人一眼就知道大概是什么问题需要详细日志再点链接查看。7.4 版本号的自动生成规则版本号看似小事实际很影响管理效率。我用的规则是主干版本号 构建号。比如代码版本是 1.2.0Jenkins 构建号是 45最终 HAP 的版本号就是1.2.0.45同时把这个版本号写进 HAP 文件名里。这样做的最大好处是任何人拿到包从文件名就能知道它是哪个主版本产物、第几次构建。脚本里只需要一行读取 Jenkins BUILD_NUMBER 然后拼进去APP_VERSION${MAJOR}.${MINOR}.${PATCH}.${BUILD_NUMBER}相比手动维护版本号这个做法不仅省事还能彻底避免“忘记改版本号导致覆盖旧包”这种低级失误。最后再分享一个小技巧整条流水线里我最常被问到的问题并不是脚本怎么写而是“如何在 Cocos Creator 构建失败时快速知道是资源问题还是代码问题”。我的做法是在构建日志里提前埋好关键字比如资源构建阶段开始和结束时各打印一行这样抓取摘要时能快速区分阶段归属。这个小细节看起来不起眼实际排查问题时能帮你少折腾半小时。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑