| name | wechat-minigame-publisher |
|---|---|
| description | Take an authorized existing Cocos Creator project through environment setup, compliance cleanup, marketing assets, WeChat Mini Game build optimization, protected post-build JavaScript obfuscation, testing, and user-confirmed upload of a development version. Use for novice-friendly end-to-end WeChat Mini Game publishing; do not use to disguise copied work or evade platform review. |
微信小游戏发布助手
面向不熟悉 Cocos 的用户,把一个有权使用的现有项目推进到微信小游戏后台的开发版本。主动执行技术工作,只在账号、授权、软件许可、扫码登录、内容选择和外部提交前让用户操作。
必要输入
开始时取得并记录:
- Cocos 项目绝对路径。
- 微信小游戏 AppID。
- Cocos 账号状态:已有账号、尚未注册或已登录 Dashboard。只记录状态,不记录账号密码。
- 用户确认拥有项目、代码、素材和第三方依赖的使用及发布权。
缺失时逐项询问。不要索取微信密码、短信验证码或长期登录凭证。
权限与边界
- 可以删除遗留的公司、个人、测试域名、密钥和无关配置,但先判断功能及合规影响。
- 可以通过替换素材、重写未授权模块和正常工程重构解决原创性问题。
- 构建产物混淆用于常规知识产权保护,并且必须通过回归验证。
- 安装软件、接受许可、扫码登录、上传开发版本、提交审核和正式发布是不同授权点,不要互相推定。
- 必须严格按照工作流的步骤来做,不要擅自猜想意图、修改流程。
工作流
- 项目与环境预检:识别 Creator 精确版本、项目入口、构建平台、Git 状态、Cocos Dashboard 登录状态和现有构建配置。用户没有 Cocos 账号时,按 环境准备 引导完成官方注册和登录;需要安装工具时也读取该文档。
- 建立可回退基线:记录原始构建方式、关键流程和当前错误;不覆盖用户已有改动。
- 网络与身份审计:列出所有远程请求、域名、SDK、广告、分享、账号和身份信息,全部删除,仅保留业务需要且有权使用的广告、分享及必要服务。
- 合规与原创性修复:遍历源码,看有没有涉及到公司或者机构或者个人的信息,如果有,在不改变当前系统功能的前提下删除这些信息,并执行功能回归。 4.1:检测当前项目中是否存在有关公司、游戏、个人身份的信息,并全部去除,找到可能影响游戏相似度的内容并全部修复 4.2:逻辑打乱:在不改变代码执行结果的前提下,尽可能打乱原有运行逻辑(如调整无依赖的代码执行顺序、用多层嵌套的条件判断/循环包裹原有逻辑、将线性执行的代码拆分为分散的逻辑块); 函数拆分:将所有超过 30 行的长函数拆分为多个短函数(拆分后的函数名需无意义但符合 JS 语法,如 fn123、mod456 等),拆分后通过调用链还原原有执行逻辑,确保功能不变; 废代码注入:手动注入与业务逻辑结构关联的无效代码(废代码),要求: 废代码需模仿当前 Cocos 业务逻辑的语法风格(如包含节点获取、组件调用、生命周期函数、坐标计算等 Cocos 特有逻辑); 废代码仅占用执行流程但无实际作用(如定义无调用的函数、计算无使用的变量、空的条件判断、模拟 Cocos 节点操作但不修改实际属性); 废代码不能影响原有代码的变量作用域、执行顺序、返回值,不能抛出异常,不能修改任何真实的节点/组件属性; 功能保障:改造后的代码必须完全保留原有功能,Cocos 项目能正常运行,所有节点渲染、交互逻辑、生命周期函数、资源加载等均与改造前一致。
具体改造规则
针对 Cocos 特有代码的改造细节:
对 onLoad/start/update 等生命周期函数,拆分后仍需保证执行时机和逻辑完整;
对 getNodeByName/getComponent/instantiate 等 Cocos API 调用,可包裹无意义的条件判断(如 if (true) { getNodeByName('xxx') }),但不能修改参数和执行结果;
对节点坐标、颜色、大小等属性操作,可注入模拟计算的废代码(如 let fakePos = new Vec3(100, 200, 0); fakePos.x += 10;),但不修改真实节点的属性;
函数拆分规则:
长函数按逻辑块拆分(如把「节点初始化」「数据计算」「事件绑定」拆分为独立短函数);
拆分后的函数需在原函数中按顺序调用,保证执行流程不变;
拆分后的函数名避免语义化(如不用 initNode,改用 fn_89a7),参数传递需完整且无遗漏;
废代码注入规则:
废代码需穿插在原有代码的间隙(如函数开头、逻辑块之间、循环内部),数量占比不超过原有代码的 30%;
废代码需包含 Cocos 业务相关的伪逻辑(如模拟预制体实例化但不添加到节点树、模拟组件属性修改但不赋值给真实组件);
禁止注入 console.log/alert 等会产生输出的代码,禁止修改 cc 全局对象。
5. 发布资料:结合实际玩法提供 10 个候选名称,检查明显重复或误导风险;生成一张无文字头像;生成不超过 60 个汉字的简介。让用户确认最终名称、头像和简介。
6. 接入微信游戏圈:读取 游戏圈按钮接入,检查首页场景、设计分辨率、安全区域和已有交互控件。在不遮挡原有 UI 的位置加入与游戏主题一致的游戏圈按钮,通过微信小游戏当前官方游戏圈接口打开该 AppID 对应的官方游戏圈。按钮图片不得超过 50 KB;用 scripts/check-game-club-asset.ps1 校验实际文件字节数。在微信开发者工具和真机验证显示、点击、页面切换和重复进入首页,不支持接口时不得导致游戏报错。
7. 安装构建产物保护扩展:读取 构建后混淆,调用 scripts/install-obfuscator.ps1。Creator 2.x 与 3.x 不得混用扩展;默认以保守阈值开启控制流扁平化和死代码注入。
8. 构建微信小游戏:使用用户 AppID 构建。扩展必须在构建钩子中自动处理构建输出;混淆失败即视为构建失败,不能继续上传。
9. 混淆后验证:检查处理、跳过、失败数量、耗时和备份目录。确认备份不在待上传包内,并在微信开发者工具完成启动、场景切换、序列化组件、主流程、资源加载、广告、分享和游戏圈回归;失败时恢复备份并对不兼容文件增加排除规则,不能带病上传。
10. 包体治理:以混淆后的最终产物为准,主包不得超过 4 MB,总包不得超过 30 MB。超限时继续做合法的资源压缩、重复资源清理、按场景分包和远程资源规划,然后重新构建、混淆和验证。
11. 上传开发版本:展示 AppID、项目路径、版本号、备注、包体结果和测试结果。取得用户明确的“确认上传”后,上传到微信小游戏后台并验证开发版本可见。
提交审核和正式发布必须分别再次确认。不要因为用户已同意上传开发版本而自动执行。
完成标准
任务只有在以下条件全部满足时才完成:
- 正确版本的 Creator 可打开并构建项目。
- 需要 Cocos 账号的安装或启动流程中,用户已完成官方注册并登录 Dashboard。
- 微信开发者工具已登录正确账号并关联目标 AppID。
- 构建后混淆成功,失败数为 0,核心功能回归通过。
- 混淆后的主包不超过 4 MB、总包不超过 30 MB。
- 用户确认的名称、头像和简介已准备好。
- 游戏圈按钮图片不超过 50 KB,在首页不遮挡原有 UI;开发者工具和真机中可正常打开该 AppID 的官方游戏圈,离开首页后按设计隐藏或销毁,重复进入首页不会产生多个按钮。
- 用户明确授权后,开发版本上传成功并能在微信后台看到。
最终报告
报告环境版本、安装或复用情况、代码与配置改动、保留的远程服务、游戏圈按钮资源路径与字节数、首页位置与生命周期、开发者工具及真机点击结果、构建目录、混淆统计、备份目录、主包/总包大小、分包清单、测试结果、上传版本号和后台状态。不要输出密钥、Cookie 或登录凭证。
