arm64-v8a cocos2d-x 4.0 安卓11 黑屏 [LUA ERROR] load "assets/src/main.luac", error: syntax error during pre-compilation.

arm64-v8a的前提下
使用cocos2d-x 4.0 的 Lua版本
正常情况打包安卓是没问题的,但是一旦使用“luajit”就会黑屏。
所以估计是Luajit导致的问题。
安卓模拟器上报错信息(真机是荣耀50pro测试的,bug信息没收集,但是是黑屏)是:
[LUA ERROR] load “assets/src/main.luac”, error: syntax error during pre-compilation.

以前也看到说要把 <新建的项目文件夹>/frameworks/cocos2d-x/external/lua/luajit/下的“prebuilt”和“include”文件夹完全替换掉,比如换成了Quick-Cocos2dx-Community中的luajit的“prebuilt”和“include”或者github上别人分享的这两个文件夹;可以构建成功,生成apk,但是每次都是黑屏。

lua 我目前用的是 5.1.4版本
luajit我目前用的是LuaJIT 2.1.0-beta3
我开发用的电脑是MacOS

不过,以前说cocos2d-3.X版本的要更新luajit,但目前4.0版本的luajit应该是不用更新的,已经是最新了,是在想不清楚该如何解决这个安卓luajit黑屏问题,求详细解决方法。

以上问题采用 armeabi-v7a 则不存在问题

补充一下真机上的报错信息:
[LUA ERROR] load “assets/src/64bit/main.luac”, error: syntax error during pre-compilation.
……ArtManagerInternalImpl: /data/misc/iorapd/<工程名称>/1/org.cocos2dx.lua.AppActivity/compiled_traces/compiled_trace.pb doesn’t exist

我高度怀疑这是cocos2d-x造成的bug,而不是luajit造成的bug,应该是cocos2d-x没有对启动路径进行自动修改,所以导致这个问题。(后来证实了还是luajit的问题

我原以为是路径错误,我手动修改了cocos2d-x生成的安卓配置文件,把路径改好了,但依然是同样的错误,看来还是luajit的问题。

补充一份详尽的真机报错信息

05-03 21:23:20.416 2081 16011 I WindowManager: Changing focus from null to Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}mode 0 displayId=0
05-03 21:23:20.417 2081 16011 V HwPhoneWindowManager: updateSystemUiColorLw window=Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity},EmuiStyle=0,StatusBarColor=0xff000000,NavigationBarColor=0xfffcfcfc, mForceNotchStatusBar=false
05-03 21:23:20.420 2081 2336 I StatusBarDisable: setFlags what=0 which=1 pkg=Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.431 5192 5239 I iGraphics: [0020080c] pn: org.cocos2dx.test4lua, p: 5192
05-03 21:23:20.431 5192 5239 I iGraphics: [0030080c] no spt app: org.cocos2dx.test4lua
05-03 21:23:20.436 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.436 2081 16011 I InputDispatcher: Focus entered window: Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity} in display 0
05-03 21:23:20.444 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.452 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.461 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: {
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: cocos2d.x.version: cocos2d-x-4.0
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: vendor: Qualcomm
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: cocos2d.x.compiled_with_profiler: false
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: max_texture_units: 96
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: cocos2d.x.build_type: DEBUG
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: renderer: Adreno ™ 642L
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: cocos2d.x.compiled_with_gl_state_cache: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: max_samples_allowed: 0
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_OES_depth24: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: version: OpenGL ES 3.2 V@0530.0 (GIT@009e9bf746, I4cc83cbab4, 1623344793) (Date:06/10/21)
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: max_vertex_attributes: 32
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_NPOT: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_vertex_array_object: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: max_texture_size: 16384
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_S3TC: false
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_discard_framebuffer: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_ETC1: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_OES_map_buffer: false
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_PVRTC: false
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_BGRA8888: false
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_ATITC: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: supports_OES_packed_depth_stencil: true
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info: }
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info:
05-03 21:23:20.463 5192 5263 D cocos2d-x debug info:
05-03 21:23:20.469 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.494 2081 16011 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.495 5192 5263 I HwApiCacheMangerEx: apicache path=/storage/emulated/0 state=mounted key=org.cocos2dx.test4lua#10262#256
05-03 21:23:20.496 5192 5263 D cocos2d-x debug info: [LUA ERROR] load “assets/src/main.luac”, error: syntax error during pre-compilation.
05-03 21:23:20.503 2081 16008 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.511 2081 16008 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.519 2081 16008 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.528 2081 16008 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.536 2081 2262 I InputDispatcher: ajustFocusedWindowHandle window = Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.542 2081 2378 I ActivityTaskManager: Displayed org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity: +494ms
05-03 21:23:20.573 2081 3589 I FixedRotationTransitionListener: onAppTransitionFinishedLocked ActivityRecord{a57a4b1 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity t133}
05-03 21:23:20.579 2081 16008 V ActivityTaskManager: Activity idle: ActivityRecord{a57a4b1 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity t133}
05-03 21:23:20.602 2081 2339 I FixedRotationTransformState: transform ActivityRecord{a57a4b1 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity t133}
05-03 21:23:20.613 2081 2339 I FixedRotationTransformState: resetTransform [ActivityRecord{a57a4b1 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity t133}]
05-03 21:23:20.628 2081 2336 I StatusBarDisable: setFlags what=0 which=1 pkg=Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:20.677 2081 2336 I StatusBarDisable: setFlags what=0 which=1 pkg=Window{11ad924 u0 org.cocos2dx.test4lua/org.cocos2dx.lua.AppActivity}
05-03 21:23:21.038 1535 1570 D AwareLog: iawared: WorkingsetProcessCommand subCmd = 351, userId=10262, pid=5192, org.cocos2dx.test4lua
05-03 21:23:21.039 1535 1570 D AwareLog: iawared: WorkingsetPause org.cocos2dx.test4lua

这个问题是否无解,正如网友所说“arm64-v8a会引起诡异的兼容问题,这是厂商造成的……”(我为我自己的失败在甩锅……)

你把那几个框架加一起都重新编译看看,APP_ABI := armeabi-v7a arm64-v8a .
很佩服你的还在用cococs2dx开发,现在都转creator去了…

试了很多遍,依然有问题……

不用creator很奇怪吗?2dx自然有creator无法取代之处,u3d/godot/creator更像一个维度……2dx与creator并非是非此即彼的关系。

2dx坑很多,bug也不少,但只要坚持纠是胜利 :rofl:,以前用cocos studio编辑器做,真机上出问题那才叫头大,有适配问题,黑屏问题,找不到节点ui崩溃等等.有时候资源路径是个大问题,要经常多加addsearch.给他自己找对为止,使用热更也是,也得把getWritablePath路径addsearch

1赞

在用cocos2dx,不过我已经不用lua了。
自己写一个C++工具又要绑定一次lua,感觉lua的优势不大。
脚本绑定也有很多内容,以前官方放弃了js绑定,以后对lua的维护难以预期。

自己写了个xml的工具代替了studio,用xml来写UI和一些“预制件”,逻辑代码直接用C++

2dx坑很多,只了解lua上层,不了解底层/gl,用2dx就很难用。

如果是2d的话,2dx还算够用的。

因为我玩的3D,需要遭很多轮子。用lua没有意义 :innocent:

1赞

我也在考虑放弃lua版本,直接C++;lua如果luajit 64位这个问题无法解决产生兼容性问题,这个得不偿失,lua版本不用luajit等于在裸奔……

刚才qq上遇到一个大佬,说要自己编译才能有用,之后我来试试,有结果后再更新此帖


自行编译了好几个版本都算比较新和最新的luajit,结果都是一样;难道arm64-v8a确实会出现各种各样的错误是因为手机厂商魔改ROM造成的?如果真是如此,等于cocos2d-x Lua这条线就废掉了……因为64位的应用很快就会是标配了

放弃luajit。用纯lua vm。整体性能其实差别不会很大
ios一直都是没办法开启jit的

1赞

我觉得我应该找到问题的关键了,
cocos console 的命令并不包含对代码进行luajit,或者它内在的luajit的方式有问题。

当我使用手动使用luajit把*.lua文件luajit后继续保存成.lua文件后,不借助自动化的cocos luacompile命令,则会完全成功,总之,确保没有luac文件就不会出错。

有个编译好的 最新的luajit,更新下试试
luajit.rar (2.8 MB)

谢谢,我已经搞定了,我发现问题的根源并不是要替换luajit的prebuilt的那些,其实,v4.0的prebuilt已经足够新的了;应该是luacompile命令内的luajit不是最新的,我换手动luajit就搞定了。再自己用几分钟用python写一个批量luajit工具,已经差不多了。可能还是缺乏系统且详细的教程导致的,我再摸索摸索吧。。。。。。

我发现后面还有问题,最后确实要替换libluajit.a,但发现到PROP_TARGET_SDK_VERSION 30依然抓狂,换了还没成功。。。lua用的有多爽,配置环境与打包生成的时候就有多抓狂

我是大概率闪退
if cc.Application:getInstance():getTargetPlatform() == 3 and jit.arch == “arm64” then
jit.off()
jit.flush()
end
加上这句就可以正常了,最后只能先关闭了

先用cocos compilelua 编译32位lua代码,然后cocos compile的时候,发现里面只有luac的文件,自然不会用64位编译了,就跳过了。亲测可用

luajit 是你自己用源码生成吗,怎么生成的

关闭jit确实是一种平衡的好选择。
我之前测试下来,sdk小于30的都成功了,唯独30的没成功;
后来我也懒得继续尝试了,继续尝试应该会可以尝试成功的;
但是即使弄成功了,随着未来的升级换代,这条路径我认为不定因素还是过多。
虽然用的很顺手,但打算放弃了lua了

我仔细又思考了一下,我认为不是luajit的问题,30依然可以成功,luajit依然没问题,也就是要手动罢了。