我有一个基于 Android NDK 的游戏,我们部分使用开源引擎 (Cocos2d-x) 的部分构建该游戏。大多数引擎都是自定义的,但对于 OpenGL 上下文设置、Java 桥接和事件等内容,我们发现使用现成的解决方案很方便。
快进到今天,我们遇到了稳定性问题,cocos2d-x 不再维护,我们遇到了一些严重的稳定性问题。我花了大约 1 周的时间对此进行调试,但未能找到追踪它的方法。这是我尝试过的
崩溃的方式差异很大
我还想说,该应用程序在除 Android 之外的所有其他平台上都非常稳定,并且我们 95% 的代码都在共享 C++ 中。我什至注释掉了在 C++ 中实际启动我们的代码,但游戏仍然在黑屏上崩溃,只有开箱即用的引擎代码。
我正在考虑移植到 SDL,这样引擎至少会得到支持,但如果有人有任何关于追踪此类事情的提示,我会很高兴听到它。
更新:
我相信连接到调试器时的崩溃问题可能是引擎设置的一个单独问题。对于生产用户来说,问题似乎是来自帧缓冲区或纹理的 OpenGL 图形内存没有被释放回系统。我应该注意到,代码与iOS相同,没有这个问题,所以它一定与共享上下文或驱动程序的工作方式有关。我会接受任何只能解决这个问题的答案。
你可以检查这个链接,它在记忆中的讨论中 https://github.com/google/sanitizers/wiki/AddressSanitizerInHardware
有点遥远,但是您是否使用各种线程,即加载线程? Android 中有很多东西必须在主线程上操作,如果你不这样做,你就会遇到这种“有时有效,大多数情况下无效”的情况。
我对你有感觉。移动操作系统大约每两年就会破坏旧代码,而不会产生任何负罪感,如果您使用的东西没有更新,您基本上必须获取源代码并自己维护。我们最终决定用两个月的时间来编写我们自己的框架。