【问题标题】:Analytics v4 uncaught exceptions and proguardAnalytics v4 未捕获的异常和 proguard
【发布时间】:2014-05-16 04:14:14
【问题描述】:

我在使用 proguard 构建的 Android 应用上使用 Google Analytics v4 API。由此产生的崩溃报告是神秘的。例如,`NullPointerException (@a:t:-1) {main}'

1) 我可以根据提供的信息无需猜测就能找到这次崩溃的确切位置吗?

2) 如何提高崩溃报告的可读性? documentation 展示了如何设置自定义异常报告器,这是有道理的。但是,它也指出

切勿将异常消息 (e.getMessage()) 发送到 Google Analytics,因为它可能包含个人身份信息。

如果不是消息,我可以使用异常的哪些字段来生成崩溃报告,让我在使用 proguard 的应用上找到崩溃的位置?

【问题讨论】:

    标签: android google-analytics-api google-analytics-firebase


    【解决方案1】:

    除了@aleph_null 说的,你应该将这两行添加到你的proguard配置文件中以保留你的行号,否则你总是在异常消息中看到-1。

    -renamesourcefileattribute SourceFile
    -keepattributes SourceFile,LineNumberTable
    

    【讨论】:

      【解决方案2】:

      一些事情:

      1. Proguard 会为您执行的每个编译生成一个 ranames 映射。如果您将这些文件保存在某处,则可以自己映射堆栈。
      2. 如果您只是在本地计算机上调试应用程序,请尝试禁用 proguard。
      3. 我认为这里的主要问题是不应将个人身份信息发送给 Google。如果您能以某种方式仅解析堆栈跟踪的前 2 或 3 个类,那么事情不会奏效吗?

      请随时提出更详细的问题,我会尽力提供帮助。

      【讨论】:

      • 感谢您的回复。关于 1.,再深入研究一下,proguard 会生成 mapping.txt 文件,但例如 @a:t:-1 并没有为您提供足够的信息来找到正确的映射,因为它缺少 a 的包名。将有多个名为a 的类。这就是为什么更改异常格式很重要的原因。至于 2.,我所指的崩溃报告是由谷歌分析生成的,因此它是 Play 商店中发布版本的一部分。我同意 3。
      • 嗨,你能解释一下为什么谷歌提到这个personally identifiable information should not be sent to Google吗?既然 GA 只能由应用的所有者查看,那么这究竟指的是什么信息?
      【解决方案3】:

      解决方案是覆盖StandardExceptionParser 以同时报告根本原因的包名称。有关更详细的说明,请参阅my blog post

      【讨论】:

      • 给定的 url 不再起作用,因此最好在此处提供一些代码 sn-p。
      • “查看我的博客文章”,但它现在已关闭。一个非常有用的答案。 -1 来自我。
      • @Malcolm 您的博客仍然关闭。请在此处复制您的解决方案。
      • @AlirezaNoorali 我认为你的意思是 aleph_null。不过,他现在已经有几年没有上 StackOverflow 了,所以我怀疑他是否关心我们的请求......
      • @Malcolm 哦,是的,请原谅我的错误提及。
      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2010-09-28
      • 1970-01-01
      • 2012-05-31
      相关资源
      最近更新 更多