[{"id":1,"label":"忽略","contentPattern":"Installing exception handler...","reasons":["应用中引用的第三方SDK Crashlytics的输出(Crashlytics 用于崩溃报告,应用程序日志记录,在线审查和应用程序日志统计分析)"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":2,"label":"忽略","contentPattern":"Successfully installed exception handler.","reasons":["应用中引用的第三方SDK Crashlytics的输出(Crashlytics 用于崩溃报告,应用程序日志记录,在线审查和应用程序日志统计分析)"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":3,"label":"忽略","contentPattern":"Loaded settings:%","reasons":["应用中引用的第三方SDK Crashlytics的输出(Crashlytics 用于崩溃报告,应用程序日志记录,在线审查和应用程序日志统计分析)"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":4,"label":"忽略","contentPattern":"Unknown error while loading Crashlytics settings%","reasons":["应用中引用的第三方SDK Crashlytics的输出(Crashlytics 用于崩溃报告,应用程序日志记录,在线审查和应用程序日志统计分析)"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":5,"label":"运行时异常","contentPattern":"java.lang.RuntimeException\\n\\tat android.content.res.Resources.getDrawable(Resources.java:%)%\\n\\tat android.widget.Editor$InsertionHandleView.getHotspotX(Editor.java:%)\\n\\tat android.widget.Editor$HandleView.updateDrawable(Editor.java:%)\\n\\tat android.widget.Editor$HandleView.\u003cinit\u003e(Editor.java:%)\\n\\tat android.widget.Editor$InsertionHandleView.\u003cinit\u003e(Editor.java:%)\\n\\tat android.widget.Editor$InsertionPointCursorController.getHandle(Editor.java:%)%","reasons":["可绘制的安卓控件 android:drawable/text_cursor_material (文本框输入游标)的主题样式未定义"],"solutions":["为EditText控件添加属性初始化游标样式: android:textCursorDrawable\u003d“@drawable/your_customize_cursor_style”"],"inconsistenciesList":["brand"],"bugTypeList":[]},{"id":6,"label":"文件未找到","contentPattern":"stat file error, path is /data/app/%/lib/arm64, exception is android.system.ErrnoException: stat failed: ENOENT (No such file or directory)","reasons":["指定文件未找到,通常为特定品牌设备的权限问题"],"solutions":["确认是否为设备品牌问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":7,"label":"域名解析失败","contentPattern":"java.net.UnknownHostException: Unable to resolve host %: No address associated with hostname%","reasons":["1. Manifest文件中未请求网络连接权限","2. 设备未连接网络","3. DNS服务器故障"],"solutions":["1. 在Android项目中的AndroidManifest.xml中添加访问网络的权限","2. 访问网站已经倒闭/关闭或者不存在,可以在浏览器中验证一下","3.无法解析该域名,可以将域名对应的ip写入到hosts文件中保存","4.在应用中提示用户检查其设备网络连接状态"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":8,"label":"SSL异常","contentPattern":"Unknown error during handshake","reasons":["执行SSL握手时发生错误"],"solutions":["查看后续日志中的SSL错误详情确定出错原因"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":9,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d0 timeout_millis\u003d%","reasons":["SSL_ERROR_NONE 0,SSL_ERROR_NONE表示操作成功。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":10,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d1 timeout_millis\u003d%","reasons":["SSL_ERROR_SSL 1,SL_ERROR_SSL表示Lib中操作失败。 调用方可以检查错误队列以获取更多信息。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":11,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d2 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_READ 2,SSL_ERROR_WANT_READ表示尝试从传输读取时失败。 当传输准备好读取时,调用者可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":12,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d3 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_WRITE 3,SSL_ERROR_WANT_WRITE表示尝试写入传输时失败。 当传输准备好写入时,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":13,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d4 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_X509_LOOKUP 4,SSL_ERROR_WANT_X509_LOOKUP表示在调用| cert_cb |或| client_cert_cb |时失败。当回调准备好返回证书或已在外部配置证书时,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":14,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d5 timeout_millis\u003d%","reasons":["SSL_ERROR_SYSCALL 5,SSL_ERROR_SYSCALL表示在Lib外部的操作失败。 调用方应咨询系统特定的错误机制。 通常是| errno | 但是如果使用定制的| BIO |可能是定制的。 如果传输返回了EOF,也可能会发出信号,在这种情况下,操作的返回值为零。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":15,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d6 timeout_millis\u003d%","reasons":["SSL_ERROR_ZERO_RETURN 6,SSL_ERROR_ZERO_RETURN表示操作失败,因为使用close_notify警报完全关闭了连接。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":16,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d7 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_CONNECT 7,SSL_ERROR_WANT_CONNECT表示尝试连接传输的操作失败(| BIO |信号表示| BIO_RR_CONNECT |)。 传输准备就绪时,调用者者可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":17,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d8 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_ACCEPT 8,SSL_ERROR_WANT_ACCEPT表示尝试从传输接接收连接失败(| BIO |信号表示| BIO_RR_ACCEPT |)。 传输准备就绪时,调用者可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":18,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d9 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_CHANNEL_ID_LOOKUP 9,SSL_ERROR_WANT_CHANNEL_ID_LOOKUP表示该操作无法查找通道ID密钥。 当| channel_id_cb |已准备返回密钥或已使用| SSL_set1_tls_channel_id |配置了密钥时,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":19,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d11 timeout_millis\u003d%","reasons":["SSL_ERROR_PENDING_SESSION 11,SL_ERROR_PENDING_SESSION表示操作失败,因为会话查找回调指示会话不可用。 查找完成后,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":20,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d12 timeout_millis\u003d%","reasons":["SSL_ERROR_PENDING_CERTIFICATE 12,SSL_ERROR_PENDING_CERTIFICATE表示操作失败,因为之前的回调表明证书查找未完成。 查找完成后,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":21,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d13 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_PRIVATE_KEY_OPERATION 13,SSL_ERROR_WANT_PRIVATE_KEY_OPERATION表示操作由于未完成私钥操作而失败。 私钥操作完成后,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":22,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d14 timeout_millis\u003d%","reasons":["SSL_ERROR_PENDING_TICKET 14,SSL_ERROR_PENDING_TICKET表示有ticket解密待执行。 解密准备就绪后,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":23,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d15 timeout_millis\u003d%","reasons":["SSL_ERROR_EARLY_DATA_REJECTED 15,SSL_ERROR_EARLY_DATA_REJECTED表示之前的数据已被拒绝。 调用方应将此视为连接失败,然后重试与被拒绝的先前数据相关的任何操作。 | SSL_reset_early_data_reject | 可用于重用基础连接以进行重试。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":24,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d16 timeout_millis\u003d%","reasons":["SSL_ERROR_WANT_CERTIFICATE_VERIFY 16,SSL_ERROR_WANT_CERTIFICATE_VERIFY表示操作由于证书验证不完整而失败。 证书验证完成后,调用方可以重试该操作。 ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":25,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d17 timeout_millis\u003d%","reasons":["SSL_ERROR_HANDOFF 17. ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:当sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":26,"label":"SSL异常","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake ret\u003d% errno\u003d% sslError\u003d18 timeout_millis\u003d%","reasons":["SSL_ERROR_HANDBACK 18. ret:执行SSL握手后的返回值,errno:重试时间,sslError:SSL错误代码,timeout_millis:当sslError \u003d\u003d SSL_ERROR_WANT_READ或sslError \u003d\u003d SSL_ERROR_WANT_WRITE时等待套接字准备就绪的超时时间"],"solutions":["重写WebViewClient的onReceivedSslError以防止WebView加载空白页面"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":27,"label":"忽略","contentPattern":"ssl\u003d% SSL_connect:error exit in %","reasons":["回调日志"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":28,"label":"忽略","contentPattern":"ssl\u003d% SSL3 alert %","reasons":["回调日志"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":29,"label":"忽略","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake clean error \u003d\u003e 0","reasons":["1. 连接被同级关闭","2. SSL握手终止"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":30,"label":"忽略","contentPattern":"ssl\u003d% NativeCrypto_SSL_do_handshake unclean error \u003d\u003e 0","reasons":["SSL握手中止"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":31,"label":"SSL异常","contentPattern":"SSLProtocolException:SSL handshake terminated: ssl\u003d%: Failure in SSL library, usually a protocol error","reasons":["执行SSL握手时发生一些错误,错误的特定信息由NativeCrypto组件打印在日志中"],"solutions":["检查服务端接口TLS版本和Android SDK版本的兼容性,参考:https://developer.android.com/reference/javax/net/ssl/SSLSocket.html?hl\u003dzh-cn"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":32,"label":"忽略","contentPattern":"error:%:SSL routines:ssl3_read_bytes:TLSV1_ALERT_INAPPROPRIATE_FALLBACK (external/boringssl/src/ssl/%)","reasons":["执行SSL握手时发生一些错误,错误的特定信息由NativeCrypto组件打印在日志中"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":33,"label":"域名解析失败","contentPattern":"getaddrinfo: % get result from proxy gai_error \u003d %","reasons":["1. Android系统的libc-netbsd代码问题(和特定设备xiangg)","2. 网络连接问题"],"solutions":["1. 检查设备网络连接状态","2. 将问题报告给特定设备操作系统开发人员"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":34,"label":"忽略","contentPattern":"---- read threw an exception","reasons":["调试日志,System.err记录了详细的异常堆栈信息"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":35,"label":"Socket超时异常","contentPattern":"java.net.SocketTimeoutException: timeout\\n\\tat com.android.okhttp.okio.Okio$3.newTimeoutException(Okio.java:%)\\n\\tat com.android.okhttp.okio.AsyncTimeout.exit(AsyncTimeout.java:%)\\n\\tat com.android.okhttp.okio.AsyncTimeout$2.read(AsyncTimeout.java:%)%","reasons":["1. 在OkHttp处理 HTTP/2 的逻辑 (okhttp3.internal.http2.Http2Stream) 中,会由于读超时、写超时而抛出该异常","2. 在 Android 中,java.net.PlainSocketImpl 的 accept(SocketImpl newImpl) 执行失败,如果 errno 为 EAGAIN 将抛出该异常,如果使用 nio 的 ServerSocketChannelImpl,异常将不会被实际抛出","3. 在阻塞 Socket 上读取长度为 0 的数据时抛出此异常","4. libcore.io.IoBridge 中,TCP 连接建立超时,将抛出该异常。libcore.io.IoBridge 中,接收数据失败,会由于 errno 为 EAGAIN 抛出该异常","5. 在 external/conscrypt/src/main/native/org_conscrypt_NativeCrypto.cpp 中执行 SSL/TLS 握手动作、数据读操作或数据写操作超时,会抛出该异常"],"solutions":["查看Socket相关操作"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":36,"label":"WebView载入失败","contentPattern":"validate_display:255 error 3008 (EGL_BAD_DISPLAY)","reasons":["WebView载入失败,可能导致应用崩溃"],"solutions":["在应用程序源代码中,尝试使用WebChromeClient(导入android.webkit.WebChromeClient","),而不是WebViewClient\n"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":37,"label":"WebView载入失败","contentPattern":"Rejecting re-init on previously-failed class java.lang.Class\u003ccom.android.webview.chromium.WebViewContentsClientAdapter$WebResourceErrorImpl\u003e","reasons":["WebView载入失败,可能导致应用崩溃"],"solutions":["不要在Activity的onCreate方法中直接实例化WebView,尝试去使用在Layout文件中指定的WebView"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":38,"label":"WebView错误","contentPattern":"No DRP key due to exception:java.lang.ClassNotFoundException: com.android.webview.chromium.Drp","reasons":["缺少DRP Key由于找不到类:com.android.webview.chromium.Drp"],"solutions":["1. 检查webview的url是否正确,是否带有http://","2. 若使用的是模拟器将模拟器配置中的use host gpu开启"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":39,"label":"JavaScript错误","contentPattern":"[ERROR:aw_autofill_client.cc(%)] Not implemented reached in virtual void android_webview::AwAutofillClient::OnFirstUserGestureObserved()","reasons":["特定品牌(如魅族)系统版本内核问题导致WebView的JS出错"],"solutions":["1. 打开日志JsBridgeConfig.debugMode(true),搜索JsBridgeDebug 查看错误日志","2. 在不同系统版本手机上测试"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":40,"label":"JavaScript错误","contentPattern":"[ERROR:gl_context.cc(%)] Not implemented reached in virtual void gfx::GLContext::SetUnbindFboOnMakeCurrent()","reasons":["特定品牌(如魅族)系统版本内核问题导致WebView的JS出错"],"solutions":["1. 打开日志JsBridgeConfig.debugMode(true),搜索JsBridgeDebug 查看错误日志","2. 在不同系统版本手机上测试"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":41,"label":"WebView错误","contentPattern":"[ERROR:shared_renderer_state.cc(%)] Failed to request GL process. Deadlock likely","reasons":["特定机型(如小米)WebView在加载h5音视频时,若在播放状态退出,下次进入WebView时无法渲染,不显示内容"],"solutions":["在h5的video和audio标签中添加preload \u003d \"none\" 参数"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":42,"label":"WebView错误","contentPattern":"[ERROR:unix_domain_server_socket_posix.cc(%)] Not implemented reached in virtual int net::UnixDomainServerSocket::GetLocalAddress(net::IPEndPoint*) const","reasons":["特定品牌(如魅族)系统版本内核问题导致WebView的JS出错"],"solutions":["1. 在不同系统版本手机上测试","2. 在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":43,"label":"文件未找到","contentPattern":"Error while loading asset assets/%: java.io.FileNotFoundException: assets/%","reasons":["加载过程中找不到指定资源,通常和特定品牌设备WebView错误相关"],"solutions":["确认是否为设备品牌问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":44,"label":"WebView错误","contentPattern":"onReceivedError% errorCode:%","reasons":["WebView错误码,通常和特定品牌设备WebView错误相关"],"solutions":["确认是否为设备品牌问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":45,"label":"文件未找到","contentPattern":"java.io.FileNotFoundException: %\\n\\tat com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:%)\\n\\tat com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromNetwork(BaseImageDownloader.java:%)%","reasons":["根据指定URL找不到对应图片"],"solutions":["检查相应的图片URL能否正常访问"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":46,"label":"OPenGL图形库错误","contentPattern":"GL error from OpenGLRenderer: %","reasons":["Android硬件加速不完全支持所有绘图"],"solutions":["Turn off hardware acceleration in the custom view\u0027s constructor."],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":47,"label":"忽略","contentPattern":"%Crashlytics Exception Handler%","reasons":["应用中引用的第三方SDK Crashlytics的输出(Crashlytics 用于崩溃报告,应用程序日志记录,在线审查和应用程序日志统计分析)"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":48,"label":"URL格式异常","contentPattern":"java.net.MalformedURLException%\\n\\tat java.net.URL.\u003cinit\u003e(URL.java:%)\\n\\tat java.net.URL.\u003cinit\u003e(URL.java:%)","reasons":["错误的URL格式"],"solutions":["检查URL格式"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":49,"label":"EventBus事件框架错误","contentPattern":"No subscribers registered for event class %","reasons":["EventBus框架中事件发布得过早或过晚了,导致订阅时出现了空指针异常"],"solutions":["确保在启动“ ACT_HandleEvent” Activity 时(在onStart()之后和onStop()之前)发布该事件"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":50,"label":"空指针异常","contentPattern":"java.lang.NullPointerException: Attempt to invoke virtual method \\\u0027boolean java.lang.String.equals(java.lang.Object)\\\u0027 on a null object reference%at org.greenrobot.eventbus.EventBus.invokeSubscriber(EventBus.java:%)%","reasons":["EventBus框架中事件发布得过早或过晚了,导致订阅时出现了空指针异常"],"solutions":["确保在启动“ ACT_HandleEvent” Activity 时(在onStart()之后和onStop()之前)发布该事件"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":51,"label":"空指针异常","contentPattern":"getCellLocation returning null due to NullPointerException java.lang.NullPointerException: Attempt to invoke virtual method \\\u0027boolean android.os.Bundle.isEmpty()\\\u0027 on a null object reference","reasons":["从Bundle中获取数据时Bundle为空"],"solutions":["在获取数据前先检查Bundle是否为空"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":52,"label":"Socket超时异常","contentPattern":"%Caused by: java.net.SocketTimeoutException: failed to connect to%","reasons":["1. 在OkHttp处理 HTTP/2 的逻辑 (okhttp3.internal.http2.Http2Stream) 中,会由于读超时、写超时而抛出该异常","2. 在 Android 中,java.net.PlainSocketImpl 的 accept(SocketImpl newImpl) 执行失败,如果 errno 为 EAGAIN 将抛出该异常,如果使用 nio 的 ServerSocketChannelImpl,异常将不会被实际抛出","3. 在阻塞 Socket 上读取长度为 0 的数据时抛出此异常","4. libcore.io.IoBridge 中,TCP 连接建立超时,将抛出该异常。libcore.io.IoBridge 中,接收数据失败,会由于 errno 为 EAGAIN 抛出该异常","5. 在 external/conscrypt/src/main/native/org_conscrypt_NativeCrypto.cpp 中执行 SSL/TLS 握手动作、数据读操作或数据写操作超时,会抛出该异常"],"solutions":["查看Socket相关操作及请求连接的URL是否正确"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":53,"label":"运行时异常","contentPattern":"(%.java:%) java.lang.RuntimeException:%","reasons":["通常为Acticity运行时异常,常见为代码逻辑的错误"],"solutions":["检查异常堆栈中的应用源代码错误代码行数并修复"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":54,"label":"权限获取错误","contentPattern":"%java.io.IOException: Couldn\\\u0027t open file:%Caused by: java.io.FileNotFoundException: /storage/emulated/0/.UTSystemConfig/Global/Alvin2.xml: open failed: EACCES (Permission denied)%","reasons":["打开指定文件的权限被拒绝,通常和特定品牌设备相关"],"solutions":["确认是否为设备品牌问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":55,"label":"空指针异常","contentPattern":"java.lang.NullPointerException\\n\\tat android.telephony.TelephonyManager.getCellLocation(TelephonyManager.java:%)%","reasons":["无法获取到设备的定位,通常为特定设备问题"],"solutions":["确认是否为设备问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":56,"label":"忽略","contentPattern":"png_error,msg:Read Error!","reasons":["非异常"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":57,"label":"设置传感器失败","contentPattern":"java.lang.Exception\\n\\tat android.hardware.SystemSensorManager.registerListenerImpl(SystemSensorManager.java:%)%","reasons":["1. 通常为特定设备问题","2. 注册监听时Activity已经finish掉了"],"solutions":["确认是否为设备问题,在品牌官方论坛寻求技术支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":58,"label":"线程中断异常","contentPattern":"java.lang.InterruptedException\\n\\tat java.lang.%.sleep%","reasons":["后台线程在Sleep状态下被中断且未捕获处理该中断异常"],"solutions":["在工作线程的逻辑中正确的处理该中断异常"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":59,"label":"文件未找到","contentPattern":"java.io.FileNotFoundException%open failed%","reasons":["未在指定路径找到文件,文件不存在"],"solutions":["查看相应的文件是否存在,若存在查看是否具有访问的权限"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":60,"label":"索引越界","contentPattern":"java.lang.ArrayIndexOutOfBoundsException: length\u003d%; index\u003d%","reasons":["数组索引越界"],"solutions":["根据报错代码进行修复"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":61,"label":"SSL异常","contentPattern":"%[ERROR:ssl_client_socket_openssl.cc(%)] next protocol: %","reasons":["WebView客户端和服务器SSL连接出错"],"solutions":["确认TLS协议版本和设备安卓系统版本WebView的兼容关系,参考https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":62,"label":"SSL异常","contentPattern":"%[ERROR:ssl_client_socket_openssl.cc(%)] Encoded connection status:%","reasons":["WebView客户端和服务器SSL连接出错"],"solutions":["确认TLS协议版本和设备安卓系统版本WebView的兼容关系,参考https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":63,"label":"SSL异常","contentPattern":"%[ERROR:ssl_client_socket_openssl.cc(%)] Found cipher to remove: %","reasons":["WebView客户端和服务器SSL连接出错"],"solutions":["确认TLS协议版本和设备安卓系统版本WebView的兼容关系,参考https://en.wikipedia.org/wiki/Transport_Layer_Security#Web_browsers"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":64,"label":"JavaScript错误","contentPattern":"%[INFO:CONSOLE(%)] \"Uncaught TypeError: Cannot read property % of undefined\", source:%","reasons":["JavaScript 错误,属性键值未定义"],"solutions":["1. 处理该异常","2. 为对应JavaScript属性附上初值"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":65,"label":"忽略","contentPattern":"RuntimeException","reasons":["非异常"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":66,"label":"DeadObjectException异常","contentPattern":"android.os.DeadObjectException\\n\\tat android.os.BinderProxy.transactNative(Native Method)\\n\\tat android.os.BinderProxy.transact(Binder.java:%)\\n\\tat android.print.IPrintDocumentAdapterObserver$Stub$Proxy.onDestroy(IPrintDocumentAdapterObserver.java:%)\\n\\tat android.print.PrintManager$PrintDocumentAdapterDelegate.onActivityDestroyed(PrintManager.java:%)\\n\\tat android.app.Application.dispatchActivityDestroyed(Application.java:%)\\n\\tat android.app.Activity.onDestroy(Activity.java:%)%","reasons":["1. 通常是当前程序异常崩溃,进程直接被杀死","2. 部分原因是由于操作系统考虑到内存、cpu、优先级等指标,选择杀死一个进程得到资源"],"solutions":["在调用对象之前,建议检查是否存在此进程"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":67,"label":"数字格式异常","contentPattern":"java.lang.NumberFormatException%","reasons":["1. 超出转换数值类型范围","2. 转换值类型没有考虑空值","3. 转换值和目标类型进制不同"],"solutions":["检查字符串的格式,根据报错代码进行修复"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":68,"label":"运行时异常","contentPattern":"java.lang.RuntimeException: Performing stop of activity that is not resumed: {%}%","reasons":["Activity终止失败,在Activity A 中在oncreate中启动了另一个Activity B,而这个Activity A没有走完Activity的生命流程(oncreate-\u003eonstart-\u003eonstop)所以会报错"],"solutions":["选择使用handler机制在oncreate中发送个message给handler启动另外一个Activity"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":69,"label":"运行时异常","contentPattern":"java.lang.RuntimeException: Unable to resume activity%Caused by: java.lang.NoSuchFieldException:%","reasons":["Activity恢复失败,使用ProGuard进行了代码混淆导致的"],"solutions":["查看ProGuard代码混淆配置或关闭"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":70,"label":"权限获取错误","contentPattern":"java.lang.SecurityException: Permission Denial: opening provider com.android.providers.calendar.CalendarProvider2 from ProcessRecord%requires android.permission.READ_CALENDAR or android.permission.WRITE_CALENDAR%","reasons":["获取设备日历权限失败"],"solutions":["在Manifest文件中对日历权限进行申请,并确保兼容不同Android版本下的权限获取机制"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":71,"label":"忽略","contentPattern":"FATAL EXCEPTION: main","reasons":["非异常"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":72,"label":"WebView加载本地资源失败","contentPattern":"[INFO:CONSOLE(%)] \"Not allowed to load local resource: %","reasons":["WebView加载服务器资源被拒绝,如通过file://xxx形式加载服务器资源"],"solutions":["模拟HTTP请求,通过重写shouldInterceptRequest方法拦截请求,重新构造WebResourceResponse,通过流的方式将数据传递给前端,返回自己构造的WebResourceResponse"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":73,"label":"文件读取失败","contentPattern":"java.io.IOException: read failed: EISDIR (Is a directory)%","reasons":["文件打开路径是一个目录"],"solutions":["根据报错代码进行修复"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":74,"label":"状态错误","contentPattern":"java.lang.RuntimeException: Failure delivering result %Caused by: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState%","reasons":["在Activity的onResume之前调用了onRequestPermissionresult所引起"],"solutions":["修复Activity的onResume和onRequestPermissionresult的调用顺序"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":75,"label":"WebView错误","contentPattern":"[ERROR:browser_gpu_channel_host_factory.cc(%)] Failed to init browser shader disk cache.","reasons":["通常为WebView加载资源出错"],"solutions":["检查WebView加载资源的URL和方式"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":76,"label":"忽略","contentPattern":"[ERROR:interface_registry.cc(%)] Failed to locate a binder for interface: autofill::mojom::PasswordManagerDriver","reasons":["A bug in the Android OS and its Chrome-backed WebView implementation, which has since been fixed."],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":77,"label":"忽略","contentPattern":"[INFO:resource_loader.cc(%)] EUI_ResourceLoader:%","reasons":["非异常"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":78,"label":"忽略","contentPattern":"[Net_Error] onReceivedError :","reasons":["非异常"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":79,"label":"WebView错误","contentPattern":"[ERROR:synchronous_input_event_filter.cc(%)] SynchronousInputEventFilter::DidRemoveInputHandler routing_id%","reasons":["WebView中SynchronousInput处理手势事件出错"],"solutions":["-"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":80,"label":"文件创建失败","contentPattern":"MM_File_Create failed .Efs Error No -1%","reasons":["媒体解码器MediaExtractor和MediaCodec创建文件时失败"],"solutions":["检查MediaExtractor和MediaCodec用法,并确认应用申请了必要的权限"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":81,"label":"ANR错误","contentPattern":"%Input dispatching timed out%","reasons":["INPUT事件在5S内没有处理完成发生了ANR\n"],"solutions":["查看设备/data/anr/traces.txt日志确认具体报错并排查相应代码是否在主线程中执行了耗时操作"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":82,"label":"ANR错误","contentPattern":"%Timeout of broadcast BroadcastRecord%","reasons":["1.前台Broadcast:onReceiver在10S内没有处理完成发生ANR","2. 后台Broadcast:onReceiver在60s内没有处理完成发生ANR"],"solutions":["查看设备/data/anr/traces.txt日志确认具体报错并排查相应代码是否在主线程中执行了耗时操作"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":83,"label":"ANR错误","contentPattern":"%Timeout executing service%","reasons":["1. 前台Service:onCreate,onStart,onBind等生命周期在20s内没有处理完成发生ANR","2. 后台Service:onCreate,onStart,onBind等生命周期在200s内没有处理完成发生ANR"],"solutions":["查看设备/data/anr/traces.txt日志确认具体报错并排查相应代码是否在主线程中执行了耗时操作"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":84,"label":"ANR错误","contentPattern":"%timeout publishing content providers%","reasons":["ContentProvider 在10S内没有处理完成发生ANR"],"solutions":["查看设备/data/anr/traces.txt日志确认具体报错并排查相应代码是否在主线程中执行了耗时操作"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":85,"label":"Socket绑定失败","contentPattern":"java.net.BindException: bind failed: EADDRNOTAVAIL (Cannot assign requested address)%","reasons":["1. 绑定Socket的IP错误","2. 设备本地Socket配置在IP配置里被移除了"],"solutions":["1. 检查Socket绑定的IP地址是否为设备IP","2. 确认设备网络连接状态"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":86,"label":"空指针异常","contentPattern":"java.lang.NullPointerException: Attempt to invoke virtual method \\\u0027java.net.InetAddress java.net.DatagramSocket.getLocalAddress()\\\u0027%","reasons":["由于Socket没绑定成功,导致在空对象上调用了相应方法所致,通常和Socket异常先后出现,此异常可能和特定设备品牌有关"],"solutions":["检查代码中对于Socket绑定失败后异常情况的处理"],"inconsistenciesList":["brand"],"bugTypeList":[]},{"id":87,"label":"权限获取错误","contentPattern":"java.lang.SecurityException: Requires FLASHLIGHT or HARDWARE_TEST permission%","reasons":["调用摄像头时未取得相应的设备权限"],"solutions":["在Android在AndroidManifest.xml中添加权限:\u003cuses-permission android:name\u003d\"android.permission.FLASHLIGHT\" /\u003e"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":88,"label":"运行时异常","contentPattern":"java.lang.RuntimeException: Can\\\u0027t create handler inside thread that has not called Looper.prepare()%","reasons":["在子线程中执行了UI操作,且并没有放到手动创建的Handler对象中执行"],"solutions":["1. 去子线程中检查相应代码,手动创建Handler对象执行UI操作"," 2. 将子线程UI操作交给主线程执行"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":89,"label":"运行时异常","contentPattern":"java.lang.RuntimeException: start failed%","reasons":["MediaRecorder录制视频失败"],"solutions":["1. 分辨率设置有问题","2. 音频输入源设置有问题","3. 音频编码或视频输出格式不支持"],"inconsistenciesList":["brand","model","androidVersion"],"bugTypeList":[]},{"id":90,"label":"索引越界","contentPattern":"%java.lang.IndexOutOfBoundsException: Invalid index %, size is %","reasons":["可排序集合索引越界,如数组、字符串、Vector、List等"],"solutions":["根据报错代码进行修复"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":91,"label":"类型转换异常","contentPattern":"java.lang.ClassCastException:%","reasons":["试图将一个对象转换为一个并不是其实例的子类,可能和特定设备相关"],"solutions":["根据报错代码进行修复,确认代码中引入了相应的类别"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":92,"label":"XML解析出错","contentPattern":"%XmlPullParserException: Binary XML file line%","reasons":["解析XML文件时出错,多发于解析Activity对应XML布局文件时"],"solutions":["检查相应报错XML文件,确认XML格式是否正确,以及是否使用了低版本SDK不兼容的标签"],"inconsistenciesList":["androidVersion"],"bugTypeList":[]},{"id":93,"label":"空指针异常","contentPattern":"%java.lang.NullPointerException%","reasons":["使用了空对象导致抛出了空指针异常"],"solutions":["根据报错代码进行修复"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":94,"label":"运行时异常","contentPattern":"java.lang.RuntimeException: Failed to resolve attribute at index %","reasons":["应用布局XML文件中使用了无法解析的标签"],"solutions":["检查相应报错XML文件,确认XML格式是否正确,以及是否使用了低版本SDK不兼容的标签"],"inconsistenciesList":["androidVersion"],"bugTypeList":[]},{"id":95,"label":"状态错误","contentPattern":"java.lang.IllegalStateException: permission denied%","reasons":["未获取相应操作权限"],"solutions":["根据报错代码进行修复,在AndroidManifest.xml中添加权限:\u003cuses-permission android:name\u003d\"android.permission.RECORD_AUDIO\"/\u003e"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":96,"label":"状态错误","contentPattern":"java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord%","reasons":["AudioRecord未进行初始化,通常是由于未正确获取录音权限所致"],"solutions":["根据报错代码进行修复,在AndroidManifest.xml中添加权限:\u003cuses-permission android:name\u003d\"android.permission.RECORD_AUDIO\"/\u003e"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":97,"label":"状态错误","contentPattern":"java.lang.IllegalStateException: Fragment % is not currently in the FragmentManager%","reasons":["FragmentManager中找不到对应的Fragment"],"solutions":["在使onSaveInstanceState方法保存Fragment前,先检查是否已添加到FragmentManager中"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":98,"label":"不支持的操作","contentPattern":"java.lang.UnsupportedOperationException: Can\\\u0027t convert to color%","reasons":["设备API Level \u003c 21时,在XML的Drawable对象中使用attribute作为对颜色的引用所致"],"solutions":["不能使用attribute为XML Drawable对象指定颜色,只能修改为对颜色资源的引用"],"inconsistenciesList":["androidVersion"],"bugTypeList":[]},{"id":99,"label":"找不到Activity","contentPattern":"android.content.ActivityNotFoundException: No Activity found to handle Intent%","reasons":["设备没有安装可以打开相关文件格式的软件"],"solutions":["处理设备无法打开相应文件的特殊情况,给予合理的用户提示"],"inconsistenciesList":["model","preAction","currentActivity"],"bugTypeList":[]},{"id":100,"label":"权限获取错误","contentPattern":"java.lang.SecurityException: Permission Denial%","reasons":["获取设备指定权限失败"],"solutions":["在Manifest文件中对指定权限进行申请,并确保兼容不同Android版本下的权限获取机制"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":101,"label":"找不到指定Package","contentPattern":"android.content.pm.PackageManager$NameNotFoundException%","reasons":["应用使用了无法找到的包名、application和组件名(Activity、Service、BroadcastReceiver)"],"solutions":["检查指定包是否已定义,并在AndroidMainfest.xml中注册"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":102,"label":"Binder异常","contentPattern":"android.os.RemoteException%","reasons":["Activity使用了其他线程的服务,但在请求过程中异常终结"],"solutions":["检查AndroidMainfest.xml,确保服务运行在自身线程中"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":103,"label":"数据库查询异常","contentPattern":"android.database.StaleDataException: Attempted to access a cursor after it has been closed%","reasons":["使用Content.managedQuery()方式查询数据时,在Android 4.0以上版本中不能显示关闭Cursor"],"solutions":["1. 判断设备SDK版本,4.0以下才显示关闭Cursor","2. 使用ContentResolver.query()的方式来查询数据"],"inconsistenciesList":["androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":104,"label":"忽略","contentPattern":"Unexpected error while invoking % throws %Exception","reasons":["异常抛出先行语句,真实的错误堆栈在后续日志输出被捕获"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":105,"label":"权限获取错误","contentPattern":"Failed to chmod%: android.system.ErrnoException: chmod failed: %","reasons":["应用修改设备上指定文件的属性(读、写、执行)失败,应用自身权限不够"],"solutions":["在Manifest文件中对指定权限进行申请,并确保Android系统支持该权限操作"],"inconsistenciesList":["currentActivity"],"bugTypeList":[]},{"id":106,"label":"找不到指定方法","contentPattern":"VFY: unable to resolve virtual method%","reasons":["应用源码中引用了高于当前设备SDK版本的方法"],"solutions":["确保应用源码中有对设备SDK进行判断,以决定调用的方法"],"inconsistenciesList":["androidVersion","currentActivity"],"bugTypeList":[]},{"id":107,"label":"找不到指定方法","contentPattern":"Could not find method % referenced from %","reasons":["应用源码中引用了高于当前设备SDK版本的方法"],"solutions":["确保应用源码中有对设备SDK进行判断,以决定调用的方法"],"inconsistenciesList":["androidVersion","currentActivity"],"bugTypeList":[]},{"id":108,"label":"文件创建失败","contentPattern":"%ERROR in % - Failed to create %","reasons":["创建指定文件失败"],"solutions":["1.检查文件路径是否正确","2. 确认是否获取了相应权限"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":109,"label":"文件未找到","contentPattern":"%ERROR in % - openFile%open failed%","reasons":["打开指定文件失败"],"solutions":["1.检查文件路径是否正确","2. 打开文件前判断文件是否存在"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":110,"label":"开发者自定义错误","contentPattern":"Got error from FormatChooserActivity","reasons":["开发者自定义错误输出"],"solutions":["根据源代码中相应输出定位应用Bug和产生原因"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":111,"label":"开发者自定义错误","contentPattern":"Returning error, no entry found","reasons":["开发者自定义错误输出"],"solutions":["根据源代码中相应输出定位应用Bug和产生原因"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":112,"label":"开发者自定义错误","contentPattern":"error parsing header: -6","reasons":["开发者自定义错误输出"],"solutions":["根据源代码中相应输出定位应用Bug和产生原因"],"inconsistenciesList":["brand","model","androidVersion","preAction","currentActivity"],"bugTypeList":[]},{"id":113,"label":"忽略","contentPattern":"Error announcing destroyed state","reasons":["DeadObjectException异常先行语句,真正的Stacktrace日志已经被正确分类"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":114,"label":"忽略","contentPattern":"Exception thrown during handling EVENT_ARG_QUERY","reasons":["java.lang.SecurityException 先行语句,真正的Stacktrace日志已经被正确分类"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":115,"label":"忽略","contentPattern":"threadid\u003d1: %","reasons":["未捕获异常(UncaughtExceptionHandler)抛出时的先行和后置语句,真实异常已被捕获"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":116,"label":"忽略","contentPattern":"+++ calling Ljava/lang/ThreadGroup;.uncaughtException","reasons":["未捕获异常(UncaughtExceptionHandler)抛出时的先行和后置语句,真实异常已被捕获"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":117,"label":"忽略","contentPattern":"Scanning %","reasons":["包含了Error字段的正常日志输出"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":118,"label":"忽略","contentPattern":"/dev/block/%","reasons":["包含了Error字段的正常日志输出"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":119,"label":"忽略","contentPattern":"%INFO in ch.qos.logback.classic%","reasons":["包含了Error字段的正常日志输出"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":120,"label":"找不到Activity","contentPattern":"android.content.ActivityNotFoundException: Unable to find explicit activity class%","reasons":["找不到指定Package下的Activity,路径错误或Activity不存在"],"solutions":["1. 确认Activity是否存在","2. 检查AndroidManifest.xml文件中Activity路径"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":121,"label":"Socket超时异常","contentPattern":"java.net.SocketTimeoutException: failed to connect to%","reasons":["1. 在OkHttp处理 HTTP/2 的逻辑 (okhttp3.internal.http2.Http2Stream) 中,会由于读超时、写超时而抛出该异常","2. 在 Android 中,java.net.PlainSocketImpl 的 accept(SocketImpl newImpl) 执行失败,如果 errno 为 EAGAIN 将抛出该异常,如果使用 nio 的 ServerSocketChannelImpl,异常将不会被实际抛出","3. 在阻塞 Socket 上读取长度为 0 的数据时抛出此异常","4. libcore.io.IoBridge 中,TCP 连接建立超时,将抛出该异常。libcore.io.IoBridge 中,接收数据失败,会由于 errno 为 EAGAIN 抛出该异常","5. 在 external/conscrypt/src/main/native/org_conscrypt_NativeCrypto.cpp 中执行 SSL/TLS 握手动作、数据读操作或数据写操作超时,会抛出该异常"],"solutions":["查看Socket相关操作及请求连接的URL是否正确"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":122,"label":"参数不合法","contentPattern":"java.lang.IllegalArgumentException: % too long%","reasons":["方法中相应类型参数超过了最大长度"],"solutions":["根据报错详情检查所调用方法的参数是否合法"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":123,"label":"忽略","contentPattern":"Exception dispatching input event.","reasons":["Bug先行语句"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":124,"label":"忽略","contentPattern":"Exception in MessageQueue callback: handleReceiveCallback","reasons":["Bug先行语句"],"solutions":["非异常"],"inconsistenciesList":[],"bugTypeList":[]},{"id":125,"label":"权限获取错误","contentPattern":"java.lang.SecurityException: Need % permission%","reasons":["获取设备指定权限失败"],"solutions":["在Manifest文件中对指定权限进行申请,并确保兼容不同Android版本下的权限获取机制"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]},{"id":126,"label":"文件未找到","contentPattern":"java.io.FileNotFoundException%","reasons":["打开指定文件失败"],"solutions":["1.检查文件路径是否正确","2. 打开文件前判断文件是否存在"],"inconsistenciesList":["preAction","currentActivity"],"bugTypeList":[]}]