Android WebView Resources$NotFoundException

jeepc發表於2019-01-16

這是今天一個朋友問我的問題(解決方案在最後一段)。因為沒有遇到過,第一反應就是藉助搜尋引擎。也確實搜到一些解決方案,但是原始碼不在我這裡沒辦法嘗試。其實這個問題的原因很容易就能想到,WebView在不同的系統版本有不同的實現,而這個問題出現在7.0以上(8.0也會出現,9.0沒有實測就不清楚了),說明這是系統的bug。解決系統的bug思路也很簡單:無非兩種方案,1、另起爐灶;2、彌補系統的bug。

對於第一種解決方案,就是棄用WebView,通常我們會使用X5WebView。這個方案我沒有實測,不過理論上應該行得通的。

而第二種方案,我們要分析出現問題的原因:Resources$NotFoundException,資源找不到,極有可能是載入資源時就出現問題了。要解決這個問題要對不同版本的WebView的原始碼比較熟悉,網上也有對此進行分析的文章(Android7.0中的ResourceNotFoundException),讀者們可以自行去研究一下。

最後我貼出一個解決方案:github.com/Qihoo360/Re…github.com/Qihoo360/Re… ,可以看出360團隊的對WebView的原始碼是非常熟悉的,點個贊!

W/ResourceType: No known package when getting value for resource number 0x02080005
W/System.err: android.content.res.Resources$NotFoundException: Resource ID #0x2080005
W/System.err:     at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:216)
        at android.content.res.Resources.getInteger(Resources.java:1097)
        at org.chromium.ui.base.DeviceFormFactor.a(PG:4)
        at IT.onCreateActionMode(PG:5)
        at com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onCreateActionMode(DecorView.java:3040)
        at com.android.internal.policy.DecorView.startActionMode(DecorView.java:1160)
        at com.android.internal.policy.DecorView.startActionModeForChild(DecorView.java:1116)
        at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:916)
I/chatty: uid=10489(u0_a489) com.hwsdk.sdk identical 1 line
W/System.err:     at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:916)
        at android.view.View.startActionMode(View.java:7101)
        at IS.a(PG:15)
        at org.chromium.content.browser.selection.SelectionPopupControllerImpl.s(PG:148)
        at org.chromium.content.browser.selection.SelectionPopupControllerImpl.showSelectionMenu(PG:125)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:325)
        at android.os.Looper.loop(Looper.java:142)
        at android.app.ActivityThread.main(ActivityThread.java:6938)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
複製程式碼

相關文章