登录Android Developer Console时,可以访问崩溃报告。 由于我上传了映射文件,日志没有被模糊,但我仍然不确定如何阅读它们:
java.lang.NullPointerException:
at com.my.app.Path.To.Package.CrashClass.methodA(TheClass.java)
or .methodX (TheClass.java)
or .methodY (TheClass.java)
or .methodY (TheClass.java)
at com.my.app.Path.To.Package.CallingClass$7.run (CallingClass.java)
at android.os.Handler.handleCallback (Handler.java:751)
at android.os.Handler.dispatchMessage (Handler.java:95)
at android.os.Looper.loop (Looper.java:154)
at android.app.ActivityThread.main (ActivityThread.java:6692)
at java.lang.reflect.Method.invoke (Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1358)
我不明白有关methodA
,或 methodB
等信息的内容......
这是否意味着,每个类中是否发生了NullPointerException
?
这是CrashClass
中的调用堆栈(令人惊讶的是methodX
不会调用methodA
,反之亦然)?
答案 0 :(得分:0)
另一个问题的答案向我指出了这个问题的正确解决方案:
ProGuard可以将类的不同方法映射到相同的混淆名称。例如,两个方法MyClass.method1(...)
和MyClass.method2(...)
都可以映射到模糊名称MyClass.a(...)
。
因此,当方法a
上发生错误时,只知道,这发生在method1
OR method2
。这就是调用堆栈可能包含or-items ...
要避免此问题,可以将以下选项添加到Proguard配置中:
-useuniqueclassmembernames
可以找到更多信息here。