我有一个启用了Proguard的应用程序(minifyenabled true),最近在Google Play开发者控制台中收到了崩溃报告。当我看着它时,我看到了 以下内容:
我很惊讶地看到第1行中的完整类和方法名称,因为启用了Proguard。我以前总是看到这样的事情:
at com.myname.myapp.c.f(Unknown Source)
我也很好奇线号是如何出现的,因为我没有在我的Proguard配置文件中保留行号(因此,为什么我通常会在我的堆栈跟踪中看到'未知来源')。
我反编译我的.apk,偷看了classes.dex文件,看起来一切都很好。我找到了堆栈跟踪的第1行引用的类,并且类名确实被混淆了,方法名也是如此。
现在,'MyActivity'(stacktrace的第2行)是我的应用程序的启动Activity,因此在Manifest中声明,所以我理解为什么它的名称没有被混淆,并且'onConnected'方法不是我的一种方法(它来自Google Play游戏服务),所以,这也没关系。
'MyMethodName'是从 on onConnected中调用的,如下所示:
@Override
public void onConnected(Bundle arg0) {
myClassObject.myMethodName(); //Where myClassObject is an instance of MyClassName
}
在build.gradle文件中将Debug设置为disabled。
我没有将mapping.txt文件上传到Play控制台,我手动运行回扫以查看我的去混淆堆栈跟踪。
如果有人能帮我理解为什么我在这里看到我的全班和方法名,我会很感激?我可以/应该做些什么来阻止这种情况?
答案 0 :(得分:3)
我只想说,我发布的应用程序完全混淆了 - 这些去混淆的堆栈跟踪来自我自己的测试设备 !!
是的,我自己的测试设备直接通过Android Studio和未签名运行应用。 (显而易见,我没有在我的调试版本上启用ProGuard。)
我用于测试此应用程序的设备不是“主流”设备,Dev Consol中出现的“名称”与设备的实际名称没有任何相似之处,所以我没有立即注意到。< / p>
我很确定这在过去从未发生过(直到现在我还没有看到) - 为什么有人会希望他们的调试版本中的崩溃报告出现在Dev Console中以及生成构建崩溃,我不知道。
所以,如果有人看到这个问题,请检查它不是你自己的调试版本,导致堆栈跟踪涌入之前!
答案 1 :(得分:-2)
我没有将mapping.txt文件上传到Play控制台,我运行了回扫 手动查看我的去混淆堆栈跟踪。
然后,您可能希望将mapping.txt
添加到Google Play,以确保您的包和类名称被混淆。