最近线上后台发现一个崩溃问题,在Android5.x上,建立webview时会发生carsh,报错信息:java
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003 at android.content.res.Resources.getText(Resources.java:318) at android.content.res.VivoResources.getText(VivoResources.java:123) at android.content.res.Resources.getString(Resources.java:404) at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:694) at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:618) at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:631) at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:780) at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:619) at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:556) at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:312) at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:96) at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:264)
在大部分的vivo 5.x系统下会出现问题,非5.x系统不会出现。android
在Android5.x上经过解决自定义WebView
web
网上大部分都是这种方式解决的。app
public class LollipopFixedWebView extends WebView { public LollipopFixedWebView(Context context) { super(getFixedContext(context)); } public LollipopFixedWebView(Context context, AttributeSet attrs) { super(getFixedContext(context), attrs); } public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr) { super(getFixedContext(context), attrs, defStyleAttr); } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(getFixedContext(context), attrs, defStyleAttr, defStyleRes); } public LollipopFixedWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) { super(getFixedContext(context), attrs, defStyleAttr, privateBrowsing); } public static Context getFixedContext(Context context) { if (Build.VERSION.SDK_INT >= 21 && Build.VERSION.SDK_INT < 23) // Android Lollipop 5.0 & 5.1 return context.createConfigurationContext(new Configuration()); return context; } }
主要核心方法是getFixedContext(context)
,根据版本号配置不一样的context.gradle
若是项目中使用"androidx.appcompat:appcompat:1.1.0"
,替换为"androidx.appcompat:appcompat:1.0.2"
ui
1.1.0版本
webview在Android5.x上有问题,恢复到1.0.2
以后确实解决了此问题,目前没有具体追踪,后续会跟上。google
官方文档:https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=zh-cnspa
"androidx.appcompat:appcompat:1.1.0"
发布时间:2019/09/05,到如今更新一个月时间~code
"androidx.appcompat:appcompat:1.0.2"
发布时间:2018/10/07,到如今更新一年时间~ip
为了保证项目稳定,build gradle
依赖更新时间要适当。