简体   繁体   English

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

[英]Google Play Console Crash Reports - multiple ORs

Why the Google Play Console of my Production app crash reports (located in "Android Vitals" / "ANR and Crashes" and then select any crash to see a stack trace) contains a lot of ORs in the Stack Trace?为什么我的生产应用程序崩溃报告的 Google Play 控制台(位于“Android Vitals”/“ANR 和崩溃”,然后选择任何崩溃以查看堆栈跟踪)在堆栈跟踪中包含大量OR

What does it mean?这是什么意思? Which of that 12 methods actually caused the crash?这 12 种方法中的哪一种实际上导致了崩溃? Why the report so unclear?为什么报告这么不清楚?

Is there a way to get exact method name and ideally the line number in the report?有没有办法获得确切的方法名称和理想情况下报告中的行号? (I have added mapping file under "Deobfuscation files"). (我在“反混淆文件”下添加了映射文件)。

在此处输入图片说明

The reason is that you are using Proguard for minifying and obfuscating your code (so far so good), and Proguard reuses the same method names as much as it can (ie as long as the signature of the methods are different) to minimize the number of letters it has to use.原因是你使用 Proguard 来缩小和混淆你的代码(到目前为止很好),并且 Proguard 尽可能多地重用相同的方法名称(即只要方法的签名不同)以最小化数量它必须使用的字母。 So the minified code contains most likely a dozen of methods with the name "a" in each class, and the stacktrace only gives you the method name, not its signature, so it's unfortunately impossible to know which one of the dozen "a" methods is being called, hence the deobfuscation tool gives you all the possibilities.因此,缩小后的代码很可能在每个类中包含十几个名称为“a”的方法,并且堆栈跟踪只为您提供方法名称,而不是其签名,因此遗憾的是不可能知道十几个“a”方法中的哪一个正在被调用,因此反混淆工具为您提供了所有可能性。

You can customise the Proguard configuration to avoid so many conflicts and hence make it easier to debug for you, but that will be at the cost of your app's size.您可以自定义 Proguard 配置以避免如此多的冲突,从而使您更容易调试,但这将以您的应用程序大小为代价。

Edit: Use the -useuniqueclassmembernames flag to avoid these ORs.编辑:使用-useuniqueclassmembernames标志来避免这些 OR。 You can check the ProGuard manual for more details.您可以查看ProGuard 手册以获取更多详细信息。

I had the same question some time ago:前段时间我也有同样的问题:

Strange stacktrace reported by Google Play Console . Google Play Console 报告的奇怪堆栈跟踪

In my case i could notice that only one of the functions in each group could be the right one beacause the others where not invoked inside the "above" function.在我的情况下,我可以注意到每组中只有一个函数可能是正确的,因为其他函数没有在“above”函数内部调用。

I think this is a protection method against reverse engineering.我认为这是一种防止逆向工程的保护方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM