Android rom開發:webview崩潰問題Binary XML file line #103: Error inflating class android.webkit.WebView

近期在項目上遇到了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.<init

從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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章