Unity 游戏开始在 android 8 上崩溃

Posted

技术标签:

【中文标题】Unity 游戏开始在 android 8 上崩溃【英文标题】:Unity game started crashing on android 8 【发布时间】:2018-11-01 08:01:16 【问题描述】:

android Vitals 获得以下堆栈跟踪:

java.lang.Error: FATAL EXCEPTION [main]
Unity version     : 5.6.2f1
Device model      : samsung SM-G955F
Device fingerprint: samsung/dream2ltexx/dream2lte:8.0.0/*****/***********B7:user/release-keys
Caused by
  at bitter.jnibridge.JNIBridge.invoke (Native Method)
  at bitter.jnibridge.JNIBridge$a.invoke (Unknown Source:20)
  at java.lang.reflect.Proxy.invoke (Proxy.java:913)
  at $Proxy1.onBindingDied (Unknown Source)
  at android.app.LoadedApk$ServiceDispatcher.doConnected (LoadedApk.java:1652)
  at android.app.LoadedApk$ServiceDispatcher$RunConnection.run (LoadedApk.java:1685)
  at android.os.Handler.handleCallback (Handler.java:789)
  at android.os.Handler.dispatchMessage (Handler.java:98)
  at android.os.Looper.loop (Looper.java:164)
  at android.app.ActivityThread.main (ActivityThread.java:6938)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)

不知道。欢迎任何帮助或解释。

【问题讨论】:

可能是一个错误。将 Unity 更新为 2017.2 之类的内容。也许他们已经修好了。 【参考方案1】:

我们在大部分玩家群中都发现了同样的错误。我们能够联系 Unity 并深入了解该错误。

来自 Unity 企业支持:

我们知道这个问题。我们在升级后在 2017.3 中修复了它 JNIbridge 支持 Oreo API。以前的报告描述了当一个 具有 INTERNET 权限的 Unity 应用程序正在运行,并且 Google play 服务更新、停止或重启,会导致 应用程序在 Android 8、8.1 设备中崩溃。

问题是添加的 ServiceConnection.onBindingDied API 级别 26 在 2017.3 之前未实现;我们添加了这个 此类版本中的 GoogleAdsServiceConnection 还更新了 JNIbridge 来解决这个问题。

我可以通过设置 Internet 在一个空项目中重现它 访问“要求”并在设备上运行时,转到设置 ->应用程序和通知->google play services->存储->管理空间->清除所有数据,然后应用程序崩溃,如堆栈中所述 溢出。

您是否有计划将您的项目升级到 2017.4 LTS?

我问是因为我们认为修复的反向移植不是 可行,不仅因为它适用于我们不支持的版本 更长的创建补丁(5.6.x),但适当的修复将涉及 向后移植对 Oreo API 的全面支持,这可能很棘手,并且 可能会导致回归。

我们决定尝试将 Unity 版本从 5.6.4f1 升级到推荐的 2017 版本。听起来它应该可以解决我们的问题。

【讨论】:

【参考方案2】:

今天,我们在 Android Vitals 中针对 Android 8.0 和 8.1 用户的项目开始显示同样的故障。我们使用 Unity 2017.1.3 可能不依赖于 Unity 的版本。我发现此类故障的发生与 Google Play Market 更新的发布存在某种关联。

更新: 我们能够在我们的 Android 8.1 设备上重现此错误:

在设备上启动应用程序。 强制 Google Play Market 停止。 尝试在商店购买 IAP。 在 Android Vitals 中观看指定的错误报告

鉴于此错误的特点是意外大量出现,然后又意外完全消失,无需对应用程序进行任何更改,我们得出的结论是,当为自动用户更新 Google Play Market 后台时,系统服务会强制停止- 在使用我们的应用程序期间启用更新并连接到 WiFi 网络,然后尝试在 Google Play 商店中使用 IAP 访问数据或进行操作。

【讨论】:

我们看到同样的东西,Android 8,主要是三星设备 您可能会尝试捕获此错误,尝试重新连接到服务并再次执行相同的 IAP。【参考方案3】:

我们已经设法在 Unity 2017.2.1 上重现了 Android 8.0 上的错误。

升级到 Unity 2017.4.7 LTS 已解决此问题。

【讨论】:

更新:获取 Unity 2018.1.3 上的错误 您可以阅读有关 LTS 的更多信息。 Unity 2018.1.3 在平台支持方面实际上比 2017.4.7 早。

以上是关于Unity 游戏开始在 android 8 上崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx 游戏在 Android 上崩溃

尝试通过 Play 游戏登录时 Unity 应用程序崩溃

启用 64 位后,Unity 游戏在 Android 设备上滞后

Android 和 Unity 3D 游戏开发

async Task.Run lambda 表达式在 Android 上使 Unity AR 应用程序崩溃,但在 iOS 上运行良好

Unity3D - AdMob在Android中的回调造成崩溃的处理方式