谷歌Play开发控制台显示堆栈跟踪中的类和方法名

8

我有一个启用了Proguard的应用程序(minifyenabled为true),最近在Google Play Dev控制台上收到了崩溃报告。当我查看时,我看到以下内容:

enter image description here

我很惊讶在启用了Proguard之后,在第一行看到了完整的类和方法名称。以前我总是看到这样的东西:

at com.myname.myapp.c.f (未知来源)

我也很好奇为什么行号会出现,因为我没有在我的Proguard配置文件中保留行号(这就是为什么我通常在我的堆栈跟踪中看到“未知来源”的原因)。
我反编译了我的.apk文件,窥视了classes.dex文件,一切都看起来很正常。我找到了堆栈跟踪第一行引用的类,并且类名确实被混淆了,方法名也是如此。
现在,“MyActivity”(堆栈跟踪的第二行)是我的应用程序的启动活动,并且在清单中声明,所以我理解为什么它的名称没有被混淆,“onConnected”方法不是我的方法(它来自Google Play Games Services),所以,这也没问题。
“MyMethodName”是从“onConnected”中调用的,代码如下:
@Override
public void onConnected(Bundle arg0) {
    myClassObject.myMethodName();       //Where myClassObject is an instance of MyClassName
}

我的build.gradle文件中已将Debug设置为禁用。

我不会将mapping.txt文件上传到Play Console,我手动运行retrace来查看我的反混淆堆栈跟踪。

如果有人能帮我理解为什么我在这里看到完整的类和方法名称,我会很感激。我该怎么做才能防止这种情况发生?


MyClassName 是一个 Activity 类吗?你正在使用默认的 ProGuard 规则吗? - Pravin Divraniya
2个回答

3
数周来我苦苦挣扎,最终发现了原因...
我的发布应用被完全混淆了 - 这些反混淆的堆栈跟踪来自我的测试设备!!是的,我的测试设备直接通过Android Studio运行未签名的应用程序。 (由于明显的原因,我不会在调试构建上启用ProGuard)。
我用来测试此应用程序的设备不是“主流”设备,并且在Dev Consol中出现的“名称”与设备的实际名称毫不相似,因此我没有立刻注意到这一点。
我非常确定以前从未发生过这种情况(至少我之前没有看到过)- 为什么有人希望从调试构建中获取崩溃报告并将其显示在 Dev Console 中与生产构建崩溃一起出现,我不知道。
因此,如果有人看到此问题,请首先检查是否是您自己的调试构建导致了大量堆栈跟踪!

-2
我不会将mapping.txt文件上传到Play控制台,我会手动运行retrace来查看去混淆的堆栈跟踪。

然后您可以添加mapping.txt到Google Play,这将确保您的包和类名称被混淆。


这不正确 - mappings.txt 被上传以便您可以直接在开发者控制台中查看去混淆的堆栈跟踪,而无需手动使用像 retrace 这样的工具。它与保持它们混淆无关。相反,请参见:https://support.google.com/googleplay/android-developer/answer/6295281?hl=en-GB - Zippy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接