2017-08-31 29 views
0

我正在研究在Android 6.0上运行时完美运行的应用程序。当我尝试在4.2.2上运行它时,它完全用Signal 11 SIGSEGV崩溃。Android 4.2.2 signal 11 SIGSEGV:无法匹配类WebResourceRequest和WebResourceError

就在飞机坠毁前,逻辑显示了这个错误:

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) { 
    ... 
} 

我不知道我做错了。或者,也许这两个错误是不相关的?

回答

2

@TargetApi只是一个注释和压制Lint错误。你需要manualy检查内部版本和使用的允许类和方法

例如

@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的几个实例,或者简单地覆盖弃用的方法

+0

但是,这两个函数是回调函数。围绕方法声明如何“手动检查构建版本”?我无法将它们包装在if(android.os.Build.VERSION.SDK_INT> = android.os.Build.VERSION_CODES.M)中。我尝试使用@RequiresApi来代替,但我得到了相同的结果。 – Emmanuel

+0

@Emmanuel我在编辑答案和解释 –

+0

太棒了!有效!!谢谢! – Emmanuel

相关问题