WebView API 28 не работает

103
06 апреля 2021, 21:50

Есть WebView который подгружает локальный (хранящийся в память приложения) файл index.html

web.loadUrl("file://" + getApplicationContext().getFilesDir().getAbsolutePath() + "/index.html");

внутри этого html подключается обычные js скрипты, которые тянут данные из интернета.

на API 26 все работает отлично. НО! когда я меняю targetSdkVersion на 28 ничего не происходит. данные из интернета просто не подключаются.

в чем проблема?

Answer 1

Современный Android WebView как и многие другие VebWiew во всяких фреймворках вроде JavaFx или Qt используют в качестве движка chromium.

Вот ссылки на официальную документацию, как можно удаленно при помощи десктопного хрома отлаживать такие штуковины :)

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/

PS: уж простите но я не стал это переводить и писать в тексте сообщения. В двух словах - надо включить RemoteDebugging в десктопном хроме, USB отладку на андроиде и соединить устройства кабелем. После этого в десктопном хроме можно будет увидеть в отладчике то, что происходит на девайсе.

Answer 2

Огромное спасибо Stranger in the Q за помощь и вот, что нашлось:

https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews

с помощью этого метода я выяснил что у меня в WebView вылетает ошибка Failed to load resource: net::ERR_CLEARTEXT_NOT_PERMITTED

а она в свою очередь решается через AndroidManifest.xml добавлением строки:

<application
    ....
    android:usesCleartextTraffic="true"
    ....>

Погуглив я нашел следующую информацию (поправьте меня, если я понял что-то не так!):

В Android 8 и выше эту функцию отключили (т.е. раньше она всегда была true, а теперь по умолчанию false)

Эта функция отвечает за подключение к HTTP ресурсам. Значит, чтобы получать данные или просто отобразить сайт в WebView надо просто прописать это в Манифесте. (странно, что это не permission)

для HTTPS сайтов этого не требуется.

все верно?

READ ALSO
Использование разных targetNamespace для одного Wsdl

Использование разных targetNamespace для одного Wsdl

Я использую Spring-ws для написания SOAP-клиентаПри этом на сервере используются две wsdl для тестовой и продакшн сред, одинаковые по содержанию,...

102
Room Entity Annotation

Room Entity Annotation

В чем проблема? Comple error : Compilation failed; see the compiler error output for details

89