我正在开发一款在Android 6.0上运行时效果非常好的应用。当我尝试在4.2.2上运行它时,它完全与Signal 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) {
...
}
我不知道自己做错了什么。或者这两个错误可能彼此无关?
答案 0 :(得分:2)
@TargetApi
只是一个注释并禁止Lint错误。您需要手动检查构建版本并使用允许的类和方法
例如
@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
实例,或者只是覆盖不推荐使用的方法