Google Play Dev Console 在 Stacktrace 中显示 Class 和方法名称
Google Play Dev Console showing Class and Method names in Stacktrace
我有一个启用了 Proguard 的应用程序 (minifyenabled true),最近在 Google Play Dev Console 中收到了一份崩溃报告。当我看着它时,我看到
以下:
我很惊讶在第 1 行看到完整的 class 和方法名称,因为 Proguard 已启用。我以前总是看到这样的事情:
at com.myname.myapp.c.f (Unknown Source)
我也很好奇行号是如何出现的,因为我没有在 Proguard 配置文件中保留行号(因此,为什么我经常在堆栈跟踪中看到 'Unknown Source')。
我反编译了我的 .apk,查看了 classes.dex 文件,看起来一切正常。我找到了在堆栈跟踪的第 1 行中引用的 class 并且 class 名称确实被混淆了,方法名称也是如此。
现在,'MyActivity'(堆栈跟踪的第 2 行)是我的应用程序的启动 Activity,因此在清单中声明,所以我明白为什么它的名称没有被混淆,并且 'onConnected' 方法不是我的方法(它来自 Google Play Games Services),所以,再一次,这没问题。
'MyMethodName' 从 在 onConnected 中调用,如下所示:
@Override
public void onConnected(Bundle arg0) {
myClassObject.myMethodName(); //Where myClassObject is an instance of MyClassName
}
调试在我的 build.gradle 文件中设置为禁用。
我没有将 mapping.txt 文件上传到 Play 管理中心,我 运行 手动回溯以查看我的去混淆堆栈跟踪。
如果有人能帮助我理解为什么我在这里看到完整的 class 和方法名称,我将不胜感激? can/should 我该怎么做才能防止这种情况发生?
I don't upload mapping.txt files to the Play Console, I run retrace
manually to see my de-obfuscated stacktraces.
然后您可能需要将 mapping.txt
添加到 google 播放,这将确保您的包和 类 名称被混淆。
经过数周的苦思冥想,我终于找到了原因...
我只想说,我发布的应用程序完全混淆了 - 这些去混淆的堆栈跟踪来自我自己的测试设备!!
是的,我自己的测试设备 运行 应用程序直接通过 Android Studio 和 unsigned。 (出于显而易见的原因,我没有在我的调试版本中启用 ProGuard)。
我用于测试此应用程序的设备不是 'mainstream' 设备,并且出现在 Dev Consol 中的 'name' 与设备的实际名称没有任何相似之处,所以我没有'不会马上注意到。
我相当确定这在过去从未发生过(我肯定直到现在才看到它)——这就是为什么有人希望他们的调试版本的崩溃报告与生产版本崩溃一起出现在开发控制台中,我不知道。
因此,如果有人看到此问题,请首先检查是不是您自己的调试版本导致堆栈跟踪大量涌入!
我有一个启用了 Proguard 的应用程序 (minifyenabled true),最近在 Google Play Dev Console 中收到了一份崩溃报告。当我看着它时,我看到 以下:
我很惊讶在第 1 行看到完整的 class 和方法名称,因为 Proguard 已启用。我以前总是看到这样的事情:
at com.myname.myapp.c.f (Unknown Source)
我也很好奇行号是如何出现的,因为我没有在 Proguard 配置文件中保留行号(因此,为什么我经常在堆栈跟踪中看到 'Unknown Source')。
我反编译了我的 .apk,查看了 classes.dex 文件,看起来一切正常。我找到了在堆栈跟踪的第 1 行中引用的 class 并且 class 名称确实被混淆了,方法名称也是如此。
现在,'MyActivity'(堆栈跟踪的第 2 行)是我的应用程序的启动 Activity,因此在清单中声明,所以我明白为什么它的名称没有被混淆,并且 'onConnected' 方法不是我的方法(它来自 Google Play Games Services),所以,再一次,这没问题。
'MyMethodName' 从 在 onConnected 中调用,如下所示:
@Override
public void onConnected(Bundle arg0) {
myClassObject.myMethodName(); //Where myClassObject is an instance of MyClassName
}
调试在我的 build.gradle 文件中设置为禁用。
我没有将 mapping.txt 文件上传到 Play 管理中心,我 运行 手动回溯以查看我的去混淆堆栈跟踪。
如果有人能帮助我理解为什么我在这里看到完整的 class 和方法名称,我将不胜感激? can/should 我该怎么做才能防止这种情况发生?
I don't upload mapping.txt files to the Play Console, I run retrace manually to see my de-obfuscated stacktraces.
然后您可能需要将 mapping.txt
添加到 google 播放,这将确保您的包和 类 名称被混淆。
经过数周的苦思冥想,我终于找到了原因...
我只想说,我发布的应用程序完全混淆了 - 这些去混淆的堆栈跟踪来自我自己的测试设备!!
是的,我自己的测试设备 运行 应用程序直接通过 Android Studio 和 unsigned。 (出于显而易见的原因,我没有在我的调试版本中启用 ProGuard)。
我用于测试此应用程序的设备不是 'mainstream' 设备,并且出现在 Dev Consol 中的 'name' 与设备的实际名称没有任何相似之处,所以我没有'不会马上注意到。
我相当确定这在过去从未发生过(我肯定直到现在才看到它)——这就是为什么有人希望他们的调试版本的崩溃报告与生产版本崩溃一起出现在开发控制台中,我不知道。
因此,如果有人看到此问题,请首先检查是不是您自己的调试版本导致堆栈跟踪大量涌入!