近期在项目上遇到了webview崩溃的问题,出现在app版本迭代之后。崩溃log如下:
05-26 13:58:52.961 7085-7085/com.printer.tool E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.printer.tool, PID: 7085
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.printer.tool/com.example.testapplication.MainActivity}: android.view.InflateException: Binary XML file line #103: Error inflating class android.webkit.WebView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)
Caused by: android.view.InflateException: Binary XML file line #103: Error inflating class android.webkit.WebView
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
at com.example.testapplication.MainActivity.onCreate(MainActivity.java:116)
at android.app.Activity.performCreate(Activity.java:6033)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)?
at android.app.ActivityThread.access$800(ActivityThread.java:151)?
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)?
at android.os.Handler.dispatchMessage(Handler.java:102)?
at android.os.Looper.loop(Looper.java:135)?
at android.app.ActivityThread.main(ActivityThread.java:5254)?
at java.lang.reflect.Method.invoke(Native Method)?
at java.lang.reflect.Method.invoke(Method.java:372)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)?
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)?
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:682)?
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:741)?
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)?
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)?
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)?
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)?
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)?
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)?
at com.example.testapplication.MainActivity.onCreate(MainActivity.java:116)?
at android.app.Activity.performCreate(Activity.java:6033)?
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)?
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)?
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)?
at android.app.ActivityThread.access$800(ActivityThread.java:151)?
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)?
at android.os.Handler.dispatchMessage(Handler.java:102)?
at android.os.Looper.loop(Looper.java:135)?
at android.app.ActivityThread.main(ActivityThread.java:5254)?
at java.lang.reflect.Method.invoke(Native Method)?
at java.lang.reflect.Method.invoke(Method.java:372)?
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)?
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)?
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040003
at android.content.res.Resources.getText(Resources.java:299)
at android.content.res.Resources.getString(Resources.java:385)
at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:684)
at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
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)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:123)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:110)
at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:107)
at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:261)
at android.webkit.WebView.<init>(WebView.java:554)
at android.webkit.WebView.
从log看是有webview资源未找到。
1.app调用webview的代码没有变化,说明调用逻辑本身没有问
题,但是webview所在的Activity由继承自Activity变成了继承自AppCompatActivity
2.可能是webview app太老旧,尝试安装新版本,实测问题解决
PS:
有一些文章提供的方法是自定义webview,根据版本返回不同的context,但是这个方法仅限于app层面,从系统层面而言,还是需要修改webview app。
google android源码自带的webview app分别如下:
点这里->7.1
点这里->8.0
点这里->9.0
点这里->10