Google Play 控制台崩溃报告 - 多个 OR

Posted

技术标签:

【中文标题】Google Play 控制台崩溃报告 - 多个 OR【英文标题】:Google Play Console Crash Reports - multiple ORs 【发布时间】:2018-07-25 08:07:36 【问题描述】:

为什么我的生产应用程序崩溃报告的 Google Play 控制台(位于“android Vitals”/“ANR 和崩溃”,然后选择任何崩溃以查看堆栈跟踪)包含很多 OR在堆栈跟踪中?

这是什么意思?这 12 种方法中的哪一种实际上导致了崩溃?为什么报告如此不明确?

有没有办法获得准确的方法名称,最好是报告中的行号? (我在“反混淆文件”下添加了映射文件)。

【问题讨论】:

我猜你可能正在使用多个mapping.txt 文件。不过我不确定。 未启用 proguard 可能是某种问题。您是否尝试在启用 proguard 的情况下产生错误?注意 minify 和 proguard 是不同的 我不确定。 minifyEnabled 为真(在 gradle 中)。我应该在哪里更改 proguard 设置? minifyEnabled true 意味着您的代码将被优化和缩小。通过在 gradle 中提及 proguard 规则来使用 proguard 有助于混淆代码。 【参考方案1】:

原因是您正在使用 Proguard 来缩小和混淆您的代码(到目前为止一切都很好),并且 Proguard 尽可能多地重用相同的方法名称(即,只要方法的签名不同)尽量减少它必须使用的字母数量。所以缩小的代码很可能在每个类中包含十几个名称为“a”的方法,而堆栈跟踪只给你方法名称,而不是它的签名,所以很遗憾不可能知道十几个“a”方法中的哪一个正在被调用,因此反混淆工具为您提供了所有可能性。

您可以自定义 Proguard 配置以避免如此多的冲突,从而使您更容易调试,但这将以您的应用程序大小为代价。

编辑:使用 -useuniqueclassmembernames 标志来避免这些 OR。您可以查看ProGuard manual了解更多详情。

【讨论】:

您能否提供任何信息/说明如何解决此问题(即保留 proGuard 但摆脱 OR) - 这样我们就可以看到崩溃发生的确切位置。理想情况下也有行号 编辑了我的回复以回答您的问题。关于行号,我认为标志是-keepattributes SourceFile,LineNumberTable 更多信息可以在here 找到——搜索“产生有用的混淆堆栈跟踪”。希望有帮助:)【参考方案2】:

前段时间我也有同样的问题:

Strange stacktrace reported by Google Play Console。

在我的例子中,我注意到每个组中只有一个函数可能是正确的,因为其他函数没有在“上面”函数中调用。

我认为这是一种针对逆向工程的保护方法。

【讨论】:

以上是关于Google Play 控制台崩溃报告 - 多个 OR的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 控制台崩溃报告与我的应用无关

Google Play 控制台报告未发布的应用程序崩溃

在 Google Play 管理中心找不到崩溃报告

让Android Studio调试版崩溃的Google Play Developer Console?

Google Play 控制台开发者监控错误

Android:如何在Google Play开发者控制台中获取有关已捕获例外的信息?