Zip*_*970 8 javascript android cordova hybrid-mobile-app phonegap
我使用Cordova为iOS和Android编写了一个混合游戏.这款游戏在iOS和Android上都运行得很好,我几乎准备好发布它,但我只需要制作一些启动画面.完成后,我在两个平台上进行了一次最终测试,结果发现几分钟后Android上的游戏崩溃!它以前从未这样做,我不知道是什么导致它.最新的是我的手机在玩游戏时变得如此热,一段时间后你几乎不能再拿它了(我测得126F).
我只使用两个插件:cordova-plugin-admob-free和cordova-plugin-splashscreen.出于测试目的,我删除了两个以查看它们是否导致崩溃,但崩溃仍然存在.
当使用Cordova(cordova运行android - 设备)构建游戏时崩溃,如果我在PhoneGab Build上构建它并手动安装apk.
我已尝试使用chrome:// inspect进行调试,但我没有看到控制台上出现任何错误.我也跑了
adb logcat
Run Code Online (Sandbox Code Playgroud)
但是日志太复杂了,我无法理解导致崩溃的原因.如果有人想看一下,我已经在这里上传了一份日志副本.游戏的名称是"mygame"(这不是它的名字,但我将其更改为日志文件中的名称).
我不知道如何找出造成这次崩溃的原因.在iOS上,一切都很好.这只是导致此问题的Android.如果您需要更多信息或者我需要更具体,请告诉我您需要的更多信息,我会将其添加到这篇文章中.
编辑2018年8月24日: 我已经能够在另一部Android手机和模拟器上进行测试,并且没有在那里崩溃.我仍然需要弄清楚导致崩溃的原因,因为它是我手机上崩溃的唯一应用程序.我还想知道当我运行它时会导致巨大的电池耗尽.这也是新的.
编辑2018年8月26日: 嗯,更多的Android设备正在经历崩溃.我在我的设备上做了一些测试.我删除了两个Cordova插件(AdMob en SplashScreen)en启动游戏.我让它坐在开始屏幕上,所以在那一点上,还没有创建任何游戏对象,它所做的只是一些简单的计算和一些context.drawImage()调用.一段时间后手机仍会变热并崩溃.可能是context.drawImage()有内存泄漏吗?
编辑2018年8月27日: 我剥离了应用程序,以便在游戏的主循环中只剩下两个drawImage()(和一个requestAnimatonFrame()).一个drawImage()将画布作为源,另一个作为img对象.一段时间后它仍然崩溃.然后我用一个img对象作为源删除了drawImage(),经过一个小时的测试后它仍然没有崩溃.然后我添加了一些drawImage()全部用画布作为源 - 并且没有崩溃.然后我用img对象替换了画布作为源,几分钟后它就崩溃了.所以我认为将img对象作为源的drawImage()导致崩溃是安全的吗?
编辑2018年8月29日: 我在我的代码中更改了所有drawImages()以使用画布作为源.画布仅使用图像填充一次.我第一次跑完比赛时,它并没有崩溃!我以为我已经解决了这个问题,但经过一些测试后我发现它确实崩溃了,但游戏崩溃需要更长的时间.因此,即使这是朝着解决一个很好的一步,但它仍然是没有的解决方案.
编辑2018年8月30日: 我能够通过Android Studio运行游戏,当它崩溃时,调试控制台显示:
E/chromium: [ERROR:gl_fence_egl.cc(55)] Failed to get EGLSync attribute. error code:12300
W/google-breakpad: ### ### ### ### ### ### ### ### ### ### ### ### ###
Chrome build fingerprint:
68.0.3440.91
344009152
### ### ### ### ### ### ### ### ### ### ### ### ###
A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 13865 (Chrome_InProcGp)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我调试吗?
你的问题有点笼统,所以答案同样是:
$ adb logcat ActivityManager:I <com.your.application>:V -e INFO:CONSOLE*
Run Code Online (Sandbox Code Playgroud)
这使您能够仅获取有关正在测试的应用程序的日志。将尖括号中的所有内容(包括尖括号)替换为项目的点应用程序名称。
当您在编辑更新时详细了解细节时,如果您需要详细帮助,请考虑提供示例和来源。