安卓发布进入主场景报错UTF8ToUTF16 failed

19:26:26 [ERROR]: [ERROR] file /Applications/CocosCreator/Creator/3.8.4/CocosCreator.app/Contents/Resources/resources/3d/engine/native/cocos/bindings/manual/jsb_cocos_manual.cpp: line 746
2024-12-19 19:26:26.610 1664-1689 Cocos com.test.aaa E 19:26:26 [ERROR]: UTF8ToUTF16 failed, file: @assets/assets/main/import/0e/0e559d9d2.json

这个json应该是主场景,ios正常,apk包会报此错,这个json是scene的数据,里面label有中文内容

我重新下了3.8.4引擎, 新建了个测试项目,在loading中添加label控件 添加中文 也同样如此

好奇怪真机安卓可以,mumu模拟器就不行 :joy: :joy:

这应该跟模拟器无关。方便提供一个复现问题的demo吗?

归档.zip (574.2 KB)
就随便一个3.8.4拉个带label带中文就行,我的mac mumu版本

我是intel芯片老mac 13.7.1 (22H221),我的模拟器下载链接:链接: https://pan.baidu.com/s/1wQt6ssjOJc-4ECuc8xByGg?pwd=edin 提取码: edin 复制这段内容后打开百度网盘手机App,操作更方便哦
–来自百度网盘超级会员v7的分享

模拟器别的应用也都是好的,我的安卓发布设置:



应该是官网文档里写的sdk ndk版本

测试1:非剔除模块问题 新建的空项目 将配置设置为与 报错的app一样配置 是正常的

测试2:也不是设置热更路径的问题,之前在main.js中加入了热更路径

安卓的路径前面带@assets,ios则不带
["@assets/data/","@assets/Resources/","@assets/"]
如加了cache 与 temp的读取,现在去掉还是会报无法读取

测试3:换初始登录场景,在setting中设置初始场景为一个新建测试的场景,发布还报之前的场景无法转换utf16,再尝试在发布设置中把原来这个场景勾掉测试可以正常进入新建的场景了,看来就是老的loadding场景哪个不正常

测试4:老loading场景有prefab关联去除引用测试 问题依旧

测试5:去掉一个中文的rich_text测试

报另一个错了:
2024-12-20 11:36:02.019 2789-2807 Cocos com.rutangnetwork.fannaojiejuedashi E 11:36:02 [ERROR]: JS: Parse json failed! Error: Parse json failed!
at jsb-adapter/engine-adapter.js:1413:15
2024-12-20 11:36:02.020 2789-2807 Cocos com.rutangnetwork.fannaojiejuedashi E 11:36:02 [ERROR]: JS: Parse json failed! Error: Parse json failed!
at jsb-adapter/engine-adapter.js:1413:15
2024-12-20 11:36:02.032 2789-2807 Cocos com.rutangnetwork.fannaojiejuedashi E 11:36:02 [ERROR]: JS: Parse json failed! Error: Parse json failed!
at jsb-adapter/engine-adapter.js:1413:15
2024-12-20 11:36:02.033 2789-2807 Cocos com.rutangnetwork.fannaojiejuedashi E 11:36:02 [ERROR]: JS: Error: Parse json failed!

测试6:在去掉一个中文内容的label,好了,但又卡在读取别的prefab了。。。

测试7:新的空项目随便加个Rich label 里面有中文果然也不行。。去了中文就是好的

测试8:引擎重新下一个测试,还是报同样的错误

测试9:安卓真机pixel5 测试正常,不知道为啥模拟器不行

上面是我测的↑

不行 提包到google被拒了,理由是 app不稳定,估计某些机器像模拟器一样还是会报错

回退到3.8.3 模拟器正常了

你把 android 上出问题的这个文件发我一下。
assets/main/import/0e/0e559d9d2.json

另外,可以在 UTF8.cpp 中把
#define CC_USE_SIMD_UTF 1

这个值改为 0 再试试看。

模拟器是x86架构的,模拟arm会有各种不稳定情况。
你android构建面板中只选了arm64-v8a ,需要勾选x86架构

果然好了,勾了x86就好了,但我之前回退到3.8.3 只钩arm64-v8a也是好的,上次如果3.8.3还不行我估计也会试试这个x86,目前3.8.3提审安卓googleplay的包过了

因为这里用了simd的utf转换库,可能libhoudini这个指令转换库对simd兼容度不好。