在 Cocos-JS 的项目中,编译时往往采用 加密 + 压缩 的方式。最终 CocosCreator 编译出的代码文件都是无法直接阅读的,代码文件有 jsb_polyfill.jsc、project.jsc、setting.jsc。强行打开如下图:
应用上线后,如有线上 JS 报错,很多情况也是无法直接定位到问题的,错误中指明的只有在 jsb_polyfill.js 文件的多少行有问题,而无法还原到实际的代码文件。比如:
对于此类问题,可以通过 Cocos-JS 加解密工具来帮助我们更加精确的定位问题,其代码地址为 cocos-jsc-endecryptor。
使用 Cocos-JS 加解密工具来定位问题代码行
这里以线下 Cocos 编译的 project.jsc 为例
- 把上述工具的代码拉到本地
终端执行如下命令即可将加密编译出的代码文件反编译出来,以 project.jsc 文件为例,你需要替换括号中内容为你实际的路径和密钥:
1
{PATH}/cocos-jsc-endecryptor/edc.py decrypt -k {COCOS_PROJECT_ENCRYT_KEY} -p {COCOS_PROJECT_PATH}/build/jsb-default/src/project.jsc
你也可以在 VSCode 中配置一项任务,之后直接在 VSCode 中运行该任务即可编译出 project.jsc 来定位问题:
1
2
3
4
5
6
7
8
9{
"label": "decryABCmouse",
"group": {
"kind": "build",
"isDefault": true
},
"type": "shell",
"command": "{PATH}/cocos-jsc-endecryptor/edc.py decrypt -k {COCOS_PROJECT_ENCRYT_KEY} -p {COCOS_PROJECT_PATH}/build/jsb-default/src/project.jsc ; open {COCOS_PROJECT_PATH}/decryptOutput"
}注:VS Code 中配置任务可以在
Cmd + Shift + P
呼出命令面板后,输入tasks configure task
,然后根据提示新增任务,之后可以在命令面板输入tasks run task
,运行刚刚创建的命令。打开 project.jsc 解密后的文件 decry.js,使用 Ctrl + G 快捷键呼出快速跳转代码行窗口,输入线上报错中的行数,如上图报错中的 16661。即可快速跳转到出错行对应的代码:
然后即可看到具体的代码,而非乱码。之后即可根据这里更加具体的代码来定位问题:
注:这里以线下 Cocos 编译的 project.jsc 为例,你也可以反编译对应的 jsb_polyfill.jsc 文件。如果是编译线上的文件,可以在对应的 apk 中找到。