【问题标题】:How to find what crashes a Cordova App in Android?如何在 Android 中查找导致 Cordova 应用程序崩溃的原因?
【发布时间】:2019-01-30 05:57:51
【问题描述】:

我使用 Cordova 为 iOS 和 Android 编写了一个混合游戏。游戏在 iOS 和 Android 上运行完美,我几乎准备好发布它,但我只需要制作几个启动画面。完成后,我在两个平台上进行了最后一次测试,结果在玩几分钟后发现游戏在 Android 上崩溃了!它以前从未这样做过,我不知道是什么原因造成的。还有新的是,我的手机在玩游戏的时候很烫,一会就握不住了(我测了126F)。

我只使用了两个插件:cordova-plugin-admob-free 和 cordova-plugin-splashscreen。出于测试目的,我删除了两者以查看它们是否导致崩溃,但崩溃仍然存在。

当使用 Cordova(cordova run android --devices)构建游戏时,如果我在 PhoneGab Build 上构建它并手动安装 apk,游戏也会崩溃。

我已尝试使用 chrome://inspect 进行调试,但我没有看到控制台上出现任何错误。我也跑过

adb logcat

但是日志太复杂了,我无法理解导致崩溃的原因。如果有人想看一下,我已经上传了日志的副本here。游戏的名称是“mygame”(这不是它的真正名称,但我在日志文件中将其更改为)。

我不知道如何找出导致此崩溃的原因。在 iOS 上,一切正常。只有 Android 会导致此问题。如果您需要更多信息或者我需要更具体的信息,请让我知道您需要更多信息,我会将其添加到这篇文章中。

2018 年 8 月 24 日编辑: 我已经能够在另一部 Android 手机和模拟器上对其进行测试,并且它没有在那里崩溃。我仍然需要找出导致崩溃的原因,因为它是我的手机上唯一崩溃的应用程序。我还想知道是什么导致我运行它时大量消耗电池。这也是新的。

2018 年 8 月 26 日编辑: 好吧,更多的 Android 设备正在经历崩溃。我在我的设备上做了一些测试。我删除了两个 Cordova 插件 (AdMob en SplashScreen) 并开始了游戏。我让它坐在打开的屏幕上,所以那时还没有创建任何游戏对象,它所做的只是一些简单的计算和一些 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)

谁能帮我调试一下?

【问题讨论】:

标签: javascript android cordova hybrid-mobile-app phonegap


【解决方案1】:

你的问题有点笼统,所以答案也是这样:

$ adb logcat ActivityManager:I <com.your.application>:V -e INFO:CONSOLE*

这使您能够仅获取有关您正在测试的应用程序的日志。将尖括号中的所有内容(包括尖括号)替换为项目的点式应用程序名称。

在详细了解编辑更新时,如果您希望获得详细帮助,请考虑提供示例和来源。

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多