我正在处理一个在Android 6.0上运行时正常工作的应用程序。当我尝试在4.2.2上运行它时,它会完全使用信号11 sigsegv。
完全崩溃。就在此崩溃之前,逻辑显示了此错误:
dalvikvm: Unable to match class for part: Landroid/webkit/WebResourceRequest;Landroid/webkit/WebResourceError
这告诉我,我正在使用4.2.2中不可用的两个类。除了任何工具都没有抓到的事实外,我还确保不会发生这种情况,因为在使用这些类的方法之前,我使用这些类的每个地方都会在使用这些类的方法之前放置正确的@targetapi注释。例如:
@RequiresApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
...
}
和
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
...
}
我不知道我在做什么错。也许这两个错误彼此没有关系?
@TargetApi
只是一个注释并抑制棉布错误。您需要手动检查构建版本并使用允许的类和方法
例如
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
return super.shouldInterceptRequest(view, request);
}
在API级别21中添加,但在API级别11
中添加了不建议的方法@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
return super.shouldInterceptRequest(view, url);
}
您可以根据构建版本创建WebViewClient
的几个实例