Android Q - Сбой WebView на Android 5-5.1 (API 21-22) Ресурсы $ NotFoundException: строковый идентификатор ресурса # 0x2040002 - PullRequest
3 голосов
/ 20 сентября 2019

Я нахожусь в процессе обновления приложения Android с API 27 на API 29, и я заметил, что у меня происходит сбой при попытке визуализации WebView на эмуляторе на основе 5.0 и / или 5.1.Эта проблема не возникает на эмуляторе 6.0 или выше (API 23-29).

Кажется, я не могу найти какую-либо документацию о поведении WebView, которая бы влияла на 5.0 или 5.1, но я могу подтвердить, что проблема не возникает, когда я запускаю приложение с использованием API 27. Я в растерянности, так как не могуЯ не знаю, является ли это проблемой эмулятора или реальной проблемой API / устройства (я думаю, что последнее).

Проблема в том, что Activity и Fragment не будут раздуваться вообще из-за отсутствующего ресурса String.Вот часть трассировки стека (кажется, что он не может найти ресурс String):

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.MyActivity}: android.view.InflateException: Binary XML file line #15: Error inflating class com.example.MyWebView
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class com.example.MyWebView...
Caused by: java.lang.reflect.InvocationTargetException...
Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x2040002

Перед тем, как происходит сбой, в журналах есть несколько связанных предупреждений, связанных с ресурсом:

W/chromium: [WARNING:resource_bundle.cc(315)] locale_file_path.empty()
E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008cdf
E/eglCodecCommon: glUtilsParamSize: unknow param 0x00008824
W/chromium: [WARNING:proxy_service.cc(901)] PAC support disabled because there is no system implementation
W/chromium: [WARNING:data_reduction_proxy_settings.cc(403)] SPDY proxy OFF at startup
W/ResourceType: No known package when getting value for resource number 0x02040002

WebView:

public class MyWebView extends WebView {

    public MyWebView (Context context) {
        super(context);
        initialize();
    }

    public MyWebView (Context context, AttributeSet attrs) {
        super(context, attrs);
        initialize();
    }

    public MyWebView (Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initialize();
    }

    public MyWebView (Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        initialize();
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
        super(context, attrs, defStyleAttr, privateBrowsing);
        initialize();
    }

    private void initialize() {
        this.clearCache(true);
        this.clearHistory();
        this.getSettings().setJavaScriptEnabled(true);
        this.getSettings().setLoadsImagesAutomatically(true);
        this.getSettings().setUseWideViewPort(true);
        this.getSettings().setAllowContentAccess(false);
        this.getSettings().setAllowFileAccess(false);
        this.getSettings().setAllowFileAccessFromFileURLs(false);
        this.getSettings().setAllowUniversalAccessFromFileURLs(false);
        this.getSettings().setDomStorageEnabled(false);
        this.getSettings().setAppCacheEnabled(false);
        this.getSettings().setDatabaseEnabled(false);
        this.getSettings().setGeolocationEnabled(false);
        this.getSettings().setSaveFormData(false);
        this.getSettings().setSupportMultipleWindows(false);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            this.getSettings().setSafeBrowsingEnabled(false);
        }
    }
}

Макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <com.example.MyWebView
        android:id="@+id/my_web_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

Любые идеи, что я делаю неправильно или что может бытьизменилось в API 28 или 29, что может сломать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...