我在Google Play上有一个应用,下载量超过45,000。该应用存在3%用户的错误,但无法在调试或发布模式下进行复制。很难复制。任何对此错误有经验的人,请帮助我。
崩溃日志
致命异常:java.lang.NullPointerException:尝试调用 虚方法'void android.view.View.sendAccessibilityEvent(int)' 空对象引用 在android.view.ViewRootImpl $ AccessibilityInteractionConnectionManager.onAccessibilityStateChanged(ViewRootImpl.java:7712) 在android.view.accessibility.AccessibilityManager.lambda $ -android_view_accessibility_AccessibilityManager_36305(AccessibilityManager.java:1007) 在android.view.accessibility。-$ Lambda $ T3m_l9_RA18vCOcakSWp1lZCy5g $ 1. $ m $ 0(未知 资料来源:6) 在android.view.accessibility。-$ Lambda $ T3m_l9_RA18vCOcakSWp1lZCy5g $ 1.run(未知 资源) 在android.os.Handler.handleCallback(Handler.java:789) 在android.os.Handler.dispatchMessage(Handler.java:98) 在android.os.Looper.loop(Looper.java:172) 在android.app.ActivityThread.main(ActivityThread.java:6637) 在java.lang.reflect.Method.invoke(Method.java) 在com.android.internal.os.Zygote $ MethodAndArgsCaller.run(Zygote.java:240) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
答案 0 :(得分:1)
Android的一大优点是它是开源的,因此您可以自己解决这些问题。
首先查看错误消息:
试图在空对象引用上调用虚拟方法'void android.view.View.sendAccessibilityEvent(int)'
这意味着在某处执行foo.sendAccessibilityEvent(anInt)
的某些代码,但是foo是null
(即,空对象引用)。它甚至告诉您此代码在哪里:
android.view.ViewRootImpl$AccessibilityInteractionConnectionManager.onAccessibilityStateChanged(ViewRootImpl.java:7712)
接下来要做的就是查找源代码。您可以在Android Studio或网络中执行此操作。我将以Google "AccessibilityInteractionConnectionManager android source code"
顶部链接将我带到the code。我在Web浏览器中搜索方法名称“ onAccessibilityStateChanged()”,以防用户使用的是旧电话并且线路号码已更改。
代码如下:
public void onAccessibilityStateChanged(boolean enabled) { if (enabled) { ensureConnection(); if (mAttachInfo.mHasWindowFocus) { mView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); View focusedView = mView.findFocus(); if (focusedView != null && focusedView != mView) { focusedView.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED); }
如您所见,focusedView
被检查为空,而mView
不是。
如果我们在该文件中搜索mview =
,则会发现它可以通过3种方式发生:
mView
设置为null。无论如何,您的用户中有3%使用AccessibilityManager并更改状态似乎很奇怪。您的应用是否有可能使用Accessibility进行了不应做的事情,这导致崩溃。辅助功能开始起作用之前,速度较慢的手机上的用户可能未正确初始化视图。您可以尝试将Accessibility API的使用范围扩大,以查看是否可以改善情况。
另一种可能性是,不是您的应用程序在使用可访问性,而是另一个尝试操纵您的应用程序的应用程序。您的应用是否是用户可能会使用辅助功能作弊的一种应用,例如一款非常迅速地奖励点击的游戏?