【问题标题】:Find View id in source code from Crashlytics crash report从 Crashlytics 崩溃报告中查找源代码中的 View id
【发布时间】:2016-01-29 02:46:34
【问题描述】:

我发布了一个内置 Crashlytics 的应用程序来发送崩溃报告,这是我收到的报告:

“致命异常:java.lang.IllegalStateException:适配器的内容已更改但ListView没有收到通知。 确保适配器的内容不是从后台线程修改的,而只是从 UI 线程修改的。确保您的适配器在其内容更改时调用 notifyDataSetChanged()。 [在 ListView(2131493375, class android.widget.ListView) 和 Adapter(class com.nhatnq.app.b.cr)] 在 android.widget.ListView.layoutChildren(ListView.java) 在 android.widget.AbsListView.onLayout(AbsListView.java) ……”

我想知道是哪个 Apdater/ListView 发生了这个崩溃,所以我想从这些事情中追踪:

  • “com.nhatnq.app.b.cr”:包名被隐藏,我不知道。在我的应用程序中,我在包 com.nhatnq.app.contact.ExpandableContactAdapter.java 中有一个“ExpandableContactAdapter extends BaseExpandableListAdapter”,以及一些包含适配器的片段,例如 com.nhatnq.app.fragment.HistoryFragment$ExpandableHistoryAdapter, com.nhatnq.app.fragment.MessageFragment$ExpandableMessageAdapter,...

  • ListView(2131493375):这是 ListView 的 ID。我将它从 dec 转换为 hex,然后在我的本地源代码(在 R.java 中)中找到,但没有找到这个资源 ID。可能ID在发布时是按时间键编码的。

我需要在这里检查什么,找到正确的 ListView/Adapter 然后我可以检查?现在我有 5 个适配器,真的不知道需要检查什么,因为这个问题只发生在某些手机上。 我在一个团队中工作,其他人负责从团队源代码中发布应用程序。

【问题讨论】:

  • 只需检查所有适配器并找出您要在后台线程中更新它的适配器。可能在 crashlytics 中您将获得所有详细信息,包括类名和行。
  • 在崩溃报告中找不到任何行,这就是为什么我无法确切知道适配器出现问题的原因:(因为我有一个根视图 (SlidingMenu),当此视图 layoutChildren() 时,适配器之一崩溃,所以这里没有行代码。

标签: android listview adapter


【解决方案1】:

您的版本“家伙”可能正在使用 Proguard 或类似的东西,所以类名被混淆了(类 com.nhatnq.app.b.cr)。这是一个使某人更难对您的代码进行逆向工程的过程。

您需要请他回溯(或反混淆)代码,以便正确识别该类。他应该为此保留文件,在 Proguard 的情况下,这是一个参考:

http://simplyadvanced.net/blog/android-how-to-decode-proguards-obfuscated-code-from-stack-trace/

【讨论】:

  • 哇,我不知道我可以从Produard映射文件中追溯,谢谢。现在我可以找到导致我崩溃的适配器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-18
  • 1970-01-01
  • 2013-07-23
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多