Descargué e instalé la última versión del sistema Android WebView de la tienda de aplicaciones en mi tableta Android (ejecutando 5.0.2).
Pero las aplicaciones siguen usando la versión anterior de webview (39.0.0.0).
¿Cómo puedo hacer que cambien?
Para obtener información, he intentado deshabilitar el anterior y se vuelve a habilitar cuando abro una aplicación que usa webview.
No puedes cambiar esto sin root.
El marco del sistema está codificado para usar un paquete específico para aplicaciones que solicitan un componente WebView. De forma predeterminada (en AOSP) utiliza el valor com.android.webview
, que es la versión que se compila durante el proceso de compilación de AOSP. En dispositivos de fabricantes que modifican este componente, el nombre del paquete puede diferir. Independientemente, para reemplazar el WebView que se envió con su dispositivo, debe modificar este valor para que sea com.google.android.webview
.
La forma "a mano" de hacer esto sería extraer el archivo framework-res.apk de su dispositivo, descompilarlo y cambiar el valor de la config_webViewPackageName
variable de recurso. Debe estar ubicado /res/values/strings.xml
dentro del .apk. Una vez que haya hecho esto, deberá volver a empaquetar todo y enviar el nuevo .apk a su dispositivo, reemplazando el anterior.
Un método alternativo que puede intentar es instalar el marco Xposed y luego usar el módulo WebViewGoogle . Si usa una ROM personalizada, también puede encontrar un paquete que modificará permanentemente los componentes necesarios del marco (o puede estar diseñado para usar WebView de Google de forma predeterminada).
Mi hipótesis sería que esta restricción existe en parte porque el sistema se basa en una implementación de WebView existente de alguna forma, por lo que si un usuario pudiera modificarlo, podría romper el sistema de formas extrañas. También habría implicaciones de seguridad al permitir que las aplicaciones anulen el WebView del sistema, como que un mal actor intente proporcionar uno malicioso sin que el usuario lo sepa.
Como punto de explicación adicional: la razón por la que System WebView está disponible en Play Store para comenzar es que los dispositivos Nexus (y posiblemente otros) se envían con él preinstalado y configurado para usarlo. Es, en efecto, el WebView del sistema para esos dispositivos. Por lo tanto, Google puede proporcionar actualizaciones de WebView para estos dispositivos a través de Play Store, de modo que las OTA del sistema completo no son necesarias solo para actualizar el navegador/WebView. Hay otros componentes que Google ha migrado a Play Store actualizando de manera similar, con el razonamiento esencial de que es más rápido. Teléfono y Contactos fueron dos de los más recientes, y el artículo vinculado proporciona algunos detalles adicionales sobre por qué Google ha adoptado este enfoque.
Seguí la respuesta de @eldarerathis e hice una guía paso a paso sobre cómo actualizar webview en un emulador de Android 5.0. Probablemente también funcione en Android 5.1 a Android 6.0. Espero que ayude a cualquiera que desee usar una vista web más reciente en dispositivos Android antiguos.
https://gist.github.com/ppoffice/9ce9790708eeabbec1281467e25139e4
Asegúrese de tener las variables JAVA_HOME
de ANDROID_HOME
entorno configuradas correctamente.
Cree un nuevo dispositivo virtual de Android (AVD) con Android Studio o avdmanager. Aquí, creé un dispositivo Android 5.0 con la siguiente imagen del sistema:
Path | Version | Description | Location
system-images;android-21;google_apis;x86_64 | 32 | Google APIs Intel x86 Atom_64 System Image | system-images/android-21/google_apis/x86_64/
El nombre AVD es
$ emulator -list-avds
Pixel_2_API_21
Inicie el AVD y haga que su partición del sistema sea escribible:
$ $ANDROID_HOME/tools/emulator @Pixel_2_API_21 -writable-system
Y se inicia el AVD, vuelva a montar su partición del sistema usando adb
:
$ $ANDROID_HOME/platform-tools/adb remount
Descargue la vista web del sistema Android de su versión deseada de Internet. Por ejemplo, puede usar Android System WebView 88.0.4324.93 (x86 + x86_64) (Android 5.0+)
desde apkmirror.com. El ID del paquete es com.google.android.webview
, que es diferente de la vista web predeterminada del sistema ( com.android.webview
). Además, asegúrese de que su paquete tenga el mismo ABI que su AVD.
Extraiga el paquete webview usando unzip
y empújelo y las bibliotecas nativas a la partición del sistema de su AVD:
$ unzip <path/to/your/webview.apk>
$ $ANDROID_HOME/platform-tools/adb shell mkdir /system/app/ChromiumWebview
$ $ANDROID_HOME/platform-tools/adb push <path/to/your/webview.apk> /system/app/ChromiumWebview/webview.apk
$ $ANDROID_HOME/platform-tools/adb push <path/to/your/extracted/webview.apk>/lib /system/app/ChromiumWebview/
Después de realizar este paso, debería tener los siguientes archivos nuevos en su AVD:
$ANDROID_HOME/platform-tools/adb shell ls -lR /system/app/ChromiumWebview/lib ✔
/system/app/ChromiumWebview/lib:
drwxr-xr-x root root 2021-01-27 00:36 x86
drwxr-xr-x root root 2021-01-27 00:36 x86_64
/system/app/ChromiumWebview/lib/x86:
-rw-r--r-- root root 43360 1979-12-31 00:00 libchromium_android_linker.so
-rw-r--r-- root root 3680 1979-12-31 00:00 libcrashpad_handler_trampoline.so
-rw-r--r-- root root 78167008 1979-12-31 00:00 libwebviewchromium.so
/system/app/ChromiumWebview/lib/x86_64:
-rw-r--r-- root root 44896 1979-12-31 00:00 libchromium_android_linker.so
-rw-r--r-- root root 5104 1979-12-31 00:00 libcrashpad_handler_trampoline.so
-rw-r--r-- root root 78545528 1979-12-31 00:00 libwebviewchromium.so
Reinicie los servicios de Android para permitir que el Administrador de paquetes seleccione nuestro nuevo paquete webview:
$ $ANDROID_HOME/platform-tools/adb shell stop
$ $ANDROID_HOME/platform-tools/adb shell start
$ $ANDROID_HOME/platform-tools/adb shell pm list packages | grep webview
package:com.android.webview --> the built-in and outdated webview
package:com.google.android.webview --> our new webview
Compruebe si el paquete está registrado con el Administrador de paquetes. Asegúrese codePath
de que , nativeLibraryPath
y primaryCpuAbi
sean correctos:
$ $ANDROID_HOME/platform-tools/adb shell cat /data/system/packages.xml | grep com.google.android.webview
<package name="com.google.android.webview" codePath="/system/app/ChromiumWebview" nativeLibraryPath="/system/app/ChromiumWebview/lib" primaryCpuAbi="x86_64" secondaryCpuAbi="x86" flags="...
Como el nombre del paquete webview predeterminado que usa el sistema operativo Android está codificado en los sistemas operativos Android más antiguos ( https://android.stackexchange.com/a/139415 ), debe modificar el marco de trabajo de Android para usar el nuevo nombre del paquete. Primero, extraiga framework-res.apk
de su AVD y descompílelo usando apktool
:
$ $ANDROID_HOME/platform-tools/adb pull /system/framework/framework-res.apk
$ apktool d framework-res.apk
Actualice el <path/to/extracted/framework-res.apk>/res/values/strings.xml
archivo para usar su nuevo nombre de paquete webview del sistema:
--- res/values/strings.xml 2021-01-27 00:53:05.000000000 -0500
+++ res/values/strings.xml 2021-01-27 00:54:38.000000000 -0500
@@ -70,7 +70,7 @@
<string name="config_appsAuthorizedForSharedAccounts">;com.android.settings;</string>
<string name="config_defaultNetworkScorerPackageName" />
<string name="config_persistentDataPackageName" />
- <string name="config_webViewPackageName">com.android.webview</string>
+ <string name="config_webViewPackageName">com.google.android.webview</string>
<item type="string" name="timepicker_circle_radius_multiplier">0.82</item>
<item type="string" name="timepicker_circle_radius_multiplier_24HourMode">0.85</item>
<item type="string" name="timepicker_selection_radius_multiplier">0.16</item>
Vuelva a empaquetar framework-res.apk
usando apktool
.
$ apktool b <path/to/extracted/framework-res.apk>
Es posible que haya algunos errores que deba corregir antes de poder volver a empaquetar el paquete. Por ejemplo, si te encuentras con el siguiente error:
Error: String types not allowed (at 'APKTOOL_DUMMY_34e' with value '').
debe reemplazar <drawable name="APKTOOL_DUMMY_..." />
con <item type="drawable" name="APKTOOL_DUMMY_..." />
en el <path/to/extracted/framework-res.apk>/res/values-nodpi-v4/drawables.xml
archivo y volver a intentarlo.
El reenvasado framework-res.apk
se coloca debajo de <path/to/extracted/framework-res.apk>/dist
. Extraiga el resources.arsc
archivo de él y combínelo con el original framework-res.apk
:
$ unzip <path/to/extracted/framework-res.apk>/dist/framework-res.apk resources.arsc -d .
$ zip -0 <path/to/original/framework-res.apk> resources.arsc
El original framework-res.apk
que extrajo de su AVD ahora está actualizado.
A continuación, reemplace framework-res.apk
en su AVD con nuestro framework-res.apk
dispositivo actualizado (combinado) del último paso y reinicie:
$ $ANDROID_HOME/platform-tools/adb push <path/to/original/framework-res.apk> /system/framework/framework-res.apk
$ $ANDROID_HOME/platform-tools/adb reboot
Finalmente, verifique si la vista web se cambia a la nueva:
Continuando con la respuesta anterior. Para Android 7 y versiones posteriores: extraiga el archivo framework-res.apk de su dispositivo, descompílelo y cambie el archivo /res/xml/config_webview_packages.xml
, agréguele un nuevo webviewprovider.
Ejemplo config_webview_packages.xml
:
<webviewproviders>
<webviewprovider description="Android WebView" packageName="com.android.webview" availableByDefault="true" />
<webviewprovider description="Google WebView" packageName="com.google.android.webview" availableByDefault="true">
<signature>MIIDuzCCAqOgAwIBAgIJANi6DgBQG4ZTMA0GCSqGSIb3DQEBBQUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzAeFw0xNDA4MDgyMzIwMjBaFw00MTEyMjQyMzIwMjBaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgSW5jLjEQMA4GA1UECwwHQW5kcm9pZDEQMA4GA1UEAwwHd2VidmlldzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbtaFX0r5aZJMAbPVMAgK1ZZ29dTn91VsGxXv2hqrQo7IpqEy2JmPvPnoMsSiuTAe+UcQy8oKDQ2aYVSAd1DGIy+nSRyFTt3LSIAdwSBkB1qT4a+OqkpsR6bSNXQXQ18lCQu9gREY3h3QlYBQAyzRxw4hRGlrXAzuSz1Ec4W+6x4nLG5DG61MAMR8ClF9XSqbmGB3kyZ70A0X9OPYYxiMWP1ExaYvpaVqjyZZcrPwr+vtW8oCuGBUtHpBUH3OoG+9s2YMcgLG7vCK9awKDqlPcJSpIAAj6uGs4gORmkqxZRMskLSTWbhP4p+3Ap8jYzTVB6Y1/DMVmYTWRMcPW0macCAwEAAaNQME4wHQYDVR0OBBYEFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMB8GA1UdIwQYMBaAFJ6bAR6/QVm4w9LRSGQiaR5Rhp3TMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAEQu8QiVxax7/diEiJrgKE1LwdXsIygJK/KnaKdnYEkAQpeu/QmrLiycm+OFbL1qHJIB7OuI/PQBUtcaNSiJSCVgtwtEbZWWIdsynqG/Nf4aGOndXegSQNRH54M05sRHLoeRycPrY7xQlEwGikNFR76+5UdwFBQI3Gn22g6puJnVukQm/wXQ+ajoiS4QclrNlixoDQsZ4STLH4+Wju2wIWKFFArIhVEIlbamq+p6BghuzH3aIz/Fy0YTQKi7SA+0fuNeCaqlSm5pYSt6p5CH89y1Fr+wFc5r3iLRnUwRcy08ESC7bZJnxV3d/YQ5valTxBbzku/dQbXVj/xg69H8l8M</signature>
</webviewprovider>
</webviewproviders>
Sobre la firma. Si webviewprovider.apk firmó la firma del sistema, puede omitir este atributo. Si la firma no es correcta, el proveedor de vista web no aparecerá en la lista disponible a través de la configuración de desarrollo del dispositivo. No cambie la firma original de webviewProvider.apk; no podrá instalar actualizaciones.
Coloque framework-res.apk en el dispositivo (necesita root).
DukeSilversJazz
clementina
Mufasa
clementina
clementina