为啥 apk 仅在 Android 10 的发布版本中中止?

Posted

技术标签:

【中文标题】为啥 apk 仅在 Android 10 的发布版本中中止?【英文标题】:Why does the apk abort only in the release version on Android 10?为什么 apk 仅在 Android 10 的发布版本中中止? 【发布时间】:2020-09-20 19:20:58 【问题描述】:

我正在使用 Unity 2018.4 制作 2D 游戏。仅在发布版本中,也可能在 android 10 中,我遇到了原生代码(可能来自某个库)的奇怪错误。

我不知道如何解释中止消息。

Abort message

我使用的唯一不以 Unity 开头的库是从 SQLite 网站本身提取的 libsqlite3.so。 (Link 这里)

我也遇到了来自 Android Vitals 的 Google Play 的错误,但它同样不可读。

有谁知道我该如何解决?我的游戏已经在 Play 商店中,我收到了一些投诉。

【问题讨论】:

【参考方案1】:

SIGSEGV,很好。欢迎来到真正让 Android 崩溃的游戏程序员俱乐部。我有几个猜测,但不能肯定。更多信息会很有用 - 您的版本的所有用户都会发生这种情况,还是只是某些设备或设备系列?

我已经设法做到了,但我的崩溃是一致的 - 每次都发生,而不仅仅是发布。我打开了一些 libGDX 本机对象,然后尝试在关闭它们之前更改活动。我的崩溃看起来很像你的。检查您的屏幕更改,以确保在尝试更改活动/片段之前干净地关闭所有对象。

你提到发布的事实让我想到了 ProGuard。如果您打开它,它可以积极优化“未使用”的类。这意味着如果您有通过反射使用的类,那么它们将不会被编译到发布包中。您可以尝试将其完全关闭并发布,看看是否能让事情再次正常运行。如果是这个原因,请查看

-keepclasseswithmembers class [your_class_path].** *;

在你的proguard-rules.pro.

【讨论】:

谢谢您的回答。很抱歉不太了解,但我该如何清洁这些物品?据我所知,Unity 只编译一个 Activity,UnityPlayerActivity。当场景发生变化时,该错误通常发生在装有 Android 10 的 64 位手机上。 在那种情况下我不知道对不起。我的是绘制/渲染子系统的一部分,我只需要使用object.close(); 关闭它们【参考方案2】:

我怀疑是正确的,问题是 64x 库 libsqlite3.so,我不太明白可能发生了什么,我将库替换为来自 this 源的库。

【讨论】:

以上是关于为啥 apk 仅在 Android 10 的发布版本中中止?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 仅在发布 apk 中,java.lang.IllegalArgumentException:无法为类创建转换器

为啥 Kivy apk 在 android 设备上启动 apk 后立即崩溃

如何理解为啥android无法安装apk文件?

为啥 Android Studio 创建的 APK 比 Eclipse 创建的 APK 大?

为啥 Google Maps Cordova ionic angular 仅在 Android 中工作而在 IOS 中为空白?

R8 / Android Gradle插件是否足够聪明,可以仅在测试apk中保留所需的库类/方法?