Cocos2d-x 3.2 Lua 在Android设备闪退问题解决记录

描述:iOS设备运行正常,windows环境下模拟器程序运行正常,但是Android设备大多数都有运行一段时间闪退的问题。 第一次运行android设备上时使用版本3.0,后来升级到3.1.1,再到3.2,Android闪退问题一直存在,尤其是在红米系列设备,几乎必现。 因为对Android开发不是很熟悉,没法直接定位到导致crash的地方,于是请教了同事,后发现是打包的API版本过高,修改后闪退问题有明显好转,但是依然存在,最近项目进度不是那么赶,于是决定要彻底追查这个问题。

之前在windows环境下开发的时候,出现过内存问题崩溃,全部是崩在LuaJIT模块里,于是去LuaJIT官网看了下,发现当时最新稳定版本是2.0.2,cocos2d-x集成的是2.0.1,于是升级了下,崩溃问题解决。 发现LuaJIT默认在iOS下是被关闭的,于是怀疑Android设备与LuaJIT有关,尝试升级LuaJIT至最新稳定版2.0.3。如果问题依然存在,则替换LuaJIT为原生的Lua5.1.4来试探问题是否依然存在。 用Vagrant搭好Linux环境,安装了NDK r10b,使用cocos2dx提供的build_android.bash开始编译LuaJIT 2.0.3,结果编译失败,提示 i686-linux-android-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found 后来google下发现原来是因为虚拟机环境共享目录不支持Symbol Link导致的。

If you have a problem creating symlinks (e.g. a shared directory in a virtual machine), the symlink won’t be created and the problem will occur. Try re-extracting the .tar.bz2 file to a filesystem that supports symlinks and verify that liblto_plugin.so exists.

参见:http://stackoverflow.com/questions/19272524/arm-linux-androideabi-g-fuse-linker-plugin-but-liblto-plugin-so-not-found 于是将下好的NDK拷贝到虚拟机的目录而非共享目录里再次解压,这次安全搞定,待测试结果。 之前最容易crash的红米设备运行良好,暂未出现crash,暂且归结为问题解决,升级LuaJIT版本至2.0.3即可。 附LuaJIT下载地址:http://luajit.org/download.html