为什么我的制作应用程序崩溃报告的Google Play控制台(位于“Android Vitals”/“ANR和Crashes”中,然后选择任何崩溃以查看堆栈跟踪)包含大量 ORs 在堆栈跟踪?
这是什么意思?这12种方法中哪一种真的导致了崩溃?报告为何如此不清楚?
有没有办法获得确切的方法名称,理想情况下是报告中的行号? (我在“反混淆文件”下添加了映射文件。)
答案 0 :(得分:2)
原因是你正在使用Proguard来缩小和混淆你的代码(到目前为止这么好),并且Proguard尽可能多地重用相同的方法名称(即只要方法的签名不同)尽量减少必须使用的字母数量。因此,缩小的代码很可能包含十几个名为" a"的方法。在每个类中,stacktrace只给你方法名称,而不是它的签名,所以很遗憾不可能知道十几个中的哪一个" a"正在调用方法,因此反混淆工具为您提供了所有可能性。
您可以自定义Proguard配置以避免这么多冲突,从而使您更容易调试,但这将以您的应用程序的大小为代价。
编辑:使用-useuniqueclassmembernames
标志来避免这些OR。您可以查看ProGuard manual了解详情。
答案 1 :(得分:0)
前段时间我有同样的问题:
Strange stacktrace reported by Google Play Console。
在我的情况下,我可以注意到,每个组中只有一个功能可能是正确的,因为其他功能在"上面没有被调用"功能。
我认为这是一种防逆向工程的保护方法。