8

我有一个启用了Proguard(minifyenabled true)的应用程序,最近在Google Play开发控制台中收到了崩溃报告。当我看着它,我看到 如下:Google Play开发者控制台显示Stacktrace中的类和方法名称

enter image description here

我很惊讶地看到第1行中完整的类和方法的名称,如Proguard的启用。我一直以前看到这样的事情:

在com.myname.myapp.cf(来源不明)

我也很好奇如何为我不是行号出现在我的Proguard配置文件中保留行号(因此,为什么我通常在我的堆栈跟踪中看到“未知源”)。

我反编译了我的.apk文件,在classes.dex文件中窥视了一下,看起来一切正常。我找到了堆栈跟踪第1行中引用的类,并且类名确实是混淆的,方法名也是如此。

现在,'MyActivity'(stacktrace的第2行)是我的应用程序的启动Activity,并且在Manifest中声明,所以我明白为什么它的名称没有被混淆,并且'onConnected'方法是不是我的方法(它来自Google Play游戏服务),因此,这也是可以的。

'MyMethodName' 从称为内 onConnected像这样:

@Override 
public void onConnected(Bundle arg0) { 
    myClassObject.myMethodName();  //Where myClassObject is an instance of MyClassName 
} 

调试设置为禁用在我的build.gradle文件。

我没有将mapping.txt文件上传到Play控制台,我手动运行回溯以查看我的去混淆堆栈跟踪。

如果有人能帮助我理解为什么我在这里看到我的完整课程和方法名称,我将不胜感激。我可以/应该做些什么来防止这种情况发生?

+0

MyClassName是一个Activity类吗?您是否使用默认的“ProGuard”规则? –

回答

3

折腾在这星期后,我终于发现了原因......

就够了,说,我的发布程序是完全混淆 - 这些去混淆堆栈跟踪信息是从我自己的测试装置未来!

是的,我自己的测试设备直接通过Android Studio运行应用程序和无符号。 (出于显而易见的原因,我没有在我的调试版本上启用ProGuard)。

我用于测试此应用程序的设备不是“主流”设备,在Dev Consol中出现的“名称”与设备的实际名称不相似,所以我没有马上注意到。我相当肯定这在过去从未发生过(至今我还没有看到过) - 为什么任何人都希望他们的调试版本中的崩溃报告随着生成构建崩溃一起出现在开发控制台中,我不知道。

因此,如果有人看到这个问题,请检查它不是你自己的调试版本,导致堆栈跟踪在其他任何事情之前涌入!

-2

我没有将mapping.txt文件上传到Play控制台,我手动运行回溯 以查看我的去混淆堆栈跟踪。

然后,您可能想要将mapping.txt添加到谷歌播放,这将确保您的包和类名称被混淆。

+0

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

相关问题