Skip to content

Instantly share code, notes, and snippets.

@tw-Frey
Last active November 1, 2019 20:59
Show Gist options
  • Select an option

  • Save tw-Frey/e1dd61b2ba73ccad0eb58a86ef709048 to your computer and use it in GitHub Desktop.

Select an option

Save tw-Frey/e1dd61b2ba73ccad0eb58a86ef709048 to your computer and use it in GitHub Desktop.
更新 或 替換 Android System WebView 克服 AndroidX.Appcompat:1.1.0 引此 部分 Android L 會 crash 的情況

androidx.appcompat:appcompat:1.1.0 引此 部分 Android L 使用 WebView 會 crash

android.content.res.Resources$NotFoundException: String resource ID #0x2040002
        at android.content.res.Resources.getText(Resources.java:274)
        at android.content.res.Resources.getString(Resources.java:360)
        at com.android.org.chromium.content.browser.ContentViewCore.setContainerView(ContentViewCore.java:702)
        at com.android.org.chromium.content.browser.ContentViewCore.initialize(ContentViewCore.java:608)
        at com.android.org.chromium.android_webview.AwContents.createAndInitializeContentViewCore(AwContents.java:619)
        at com.android.org.chromium.android_webview.AwContents.setNewAwContents(AwContents.java:758)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:608)
        at com.android.org.chromium.android_webview.AwContents.<init>(AwContents.java:546)
        at com.android.webview.chromium.WebViewChromium.initForReal(WebViewChromium.java:312)
        at com.android.webview.chromium.WebViewChromium.access$100(WebViewChromium.java:97)
        at com.android.webview.chromium.WebViewChromium$1.run(WebViewChromium.java:264)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.drainQueue(WebViewChromium.java:124)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue$1.run(WebViewChromium.java:111)
        at com.android.org.chromium.base.ThreadUtils.runOnUiThread(ThreadUtils.java:144)
        at com.android.webview.chromium.WebViewChromium$WebViewChromiumRunQueue.addTask(WebViewChromium.java:108)
        at com.android.webview.chromium.WebViewChromium.init(WebViewChromium.java:261)
        at android.webkit.WebView.<init>(WebView.java:548)
        at android.webkit.WebView.<init>(WebView.java:483)
        at android.webkit.WebView.<init>(WebView.java:466)
        at android.webkit.WebView.<init>(WebView.java:453)
        at android.webkit.WebView.<init>(WebView.java:443)


有些人認為是 AOSP 沒有 Google System WebView (com.google.android.webview) 導致呼叫錯誤
但有注意到
在 Android M+ Emulator 是可以正常 work
個人認為是 String resource ID #0x2040002 在打包時不知為何漏掉 Android L
所以報錯

@tw-Frey
Copy link
Copy Markdown
Author

tw-Frey commented Nov 1, 2019

Android version WebView default version
4.4 33
5.0 Preview 36
5.0 37
5.1 39
6.0 44
7.0 >51

不同版本 Android 對應預設 System WebView 版號


AOSP 的 WebView 預設是com.android.webview

Android Emulator 安裝 Google 發布的 Android System WebView (com.google.android.webview)
執行 App 使用 WebView 元件依然是com.android.webview

可以參考 這篇 替換方法
將 WebView 預設 Package Name 由 com.android.webvie 改為 com.google.android.webview


除了替換 WebView 預設 Package Name
更新com.android.webview也是一個方案
上面也說過在 Android M+ Emulator 是可以正常 work

@tw-Frey
Copy link
Copy Markdown
Author

tw-Frey commented Nov 1, 2019

更新 Android Emulator System WebView

那就要先有較新版 System WebView apk (版號至少要>39)

經過兩天的搜尋
Chromium 文件裡看到一篇: WebView for AOSP system integrators

有一節: Prebuilt AOSP WebView

AOSP contains a prebuilt WebView APK for each supported CPU architecture, and the appropriate APK will be included in the system image by default. These APKs can be found in the external/chromium-webview directory in an AOSP checkout.

external/chromium-webview
確實找到 Prebuilt AOSP WebView, 版號從 40 起跳
經過測試
安裝版本 40.0.2214.114 (x86) 可以順利 work

@tw-Frey
Copy link
Copy Markdown
Author

tw-Frey commented Nov 1, 2019

目前找到最久可用的 Google System WebView (com.google.android.webview) 版號是 43.0.2357.121 (x86)
由於初衷: Android L Emulator 的 WebView 不能 work, 所以在不考慮版號 39 以前的 AOSP WebView
而目前找到最久可用 的 AOSP WebView (com.android.webview) 版號是 40.0.2214.114 (x86)

androidx.appcompat:appcompat:1.1.0 依賴下, 使用上述兩個 WebView 是不會 crash

所以 實體機的建議解決方案

請 User 透過 Google Play Store 更新 Android System WebView

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment