21 votos

El sistema Android Webview instalado pero no utilizado por las aplicaciones

He descargado e instalado la última versión de Sistema Android WebView de la tienda de aplicaciones en mi tablet Android (que funciona con 5.0.2).

Pero las aplicaciones siguen usando la antigua versión de la webview (39.0.0.0).

¿Cómo puedo hacer que se cambien?

Para información, he intentado deshabilitar la antigua, y se vuelve a habilitar cuando abro una aplicación que usa la vista web.

2 votos

Por curiosidad, ¿cómo se sabe qué versión de Webview utiliza una aplicación?

1 votos

He estado probando con varias aplicaciones, como Droidscript y WebView Browser y he visitado whatsmyuseragent

0 votos

He leído a través de la fuente de Lollipop, y esto no debería estar sucediendo. Debería utilizar la última a menos que el fabricante haya sustituido la clase WebViewFactory por la suya propia. ¿Qué dispositivo/modelo exacto y versión suministrada por el fabricante está ejecutando?

22voto

David Negron Puntos 971

No puedes cambiar esto sin Root.

El marco del sistema es código de barras para usar un paquete específico para las aplicaciones que solicitan un componente de WebView. Por defecto (en AOSP) utiliza el valor com.android.webview que es la versión compilada durante el proceso de construcción de la AOSP. En los dispositivos de los fabricantes que modifican este componente, el nombre del paquete puede ser diferente. Sin embargo, para reemplazar el WebView que se envió con su dispositivo, tiene que modificar este valor para que en su lugar sea com.google.android.webview .

La forma "a mano" de hacer esto sería tirar de la marco-res.apk de su dispositivo, descompilarlo, y cambiar el valor del config_webViewPackageName variable de recursos. Debe estar ubicada en /res/values/strings.xml dentro del .apk. Una vez que hayas hecho esto, necesitarás re-empaquetar todo y empujar el nuevo .apk a tu dispositivo, reemplazando el viejo.

Un método alternativo que se puede intentar es instalar el marco de Xposed y luego usar el Módulo WebViewGoogle . Si utiliza una ROM personalizada, también podrá encontrar un paquete que modificará permanentemente los componentes del marco necesario (o puede estar construido para utilizar el WebView de Google por defecto).

Mi hipótesis sería que esta restricción existe en parte porque el sistema se basa en una implementación de WebView que existe de alguna forma, de modo que si pudiera ser modificada por un usuario podría romper el sistema de maneras extrañas. También habría implicaciones de seguridad al permitir que las aplicaciones anulen el sistema WebView, como por ejemplo un malhechor que intente proporcionar una maliciosa sin que el usuario lo sepa.

Como punto de explicación adicional: la razón por la que el System WebView está disponible en la Play Store para empezar es que los dispositivos Nexus (y posiblemente otros) se envían con él preinstalado, y configurado para usarlo. Por lo tanto, Google puede proporcionar actualizaciones de WebView para estos dispositivos a través de Play Store, de modo que no sea necesario un sistema completo de OTA sólo para actualizar el navegador/WebView. Hay otros componentes que Google ha migrado a la actualización de Play Store de manera similar, con el razonamiento esencial de que es más rápida. Teléfono y contactos fueron dos de los más recientes, y el artículo enlazado proporciona algunos detalles adicionales sobre por qué Google ha adoptado este enfoque.

1 votos

Gracias por esta explicación.. pero, ¿para qué sirve entonces esta aplicación webview del sistema Android?

1 votos

@Clémentine Los dispositivos Nexus (posiblemente otros) lo traen preinstalado y configurado para usarlo. De este modo, Google puede proporcionar actualizaciones de WebView para estos dispositivos a través de Play Store, de modo que no es necesario realizar OTAs completas del sistema para actualizar el navegador/WebView. Hay otros componentes que Google ha migrado a la actualización de Play Store de manera similar, con el razonamiento esencialmente de que es más rápido.

1 votos

¡por qué todas las tabletas que ejecutan lollipop o un sistema operativo más reciente no utilizan esto como su sistema predeterminado WebView, suena como un desperdicio!

3voto

Nelson Yeung Puntos 16

He seguido la respuesta de @eldarerathis y he hecho una guía paso a paso de 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 sirva de ayuda a quien desee utilizar una webview más reciente en dispositivos Android antiguos.

https://gist.github.com/ppoffice/9ce9790708eeabbec1281467e25139e4

Herramientas

  1. emulador (30.3.5) (vía Android SDK)
  2. adb (30.0.5) (vía Android SDK)
  3. apktool (2.5.0) y Java runtime
  4. zip (3.0)
  5. descomprimir (6.0)

Asegúrese de tener JAVA_HOME y ANDROID_HOME las variables de entorno están correctamente configuradas.

Pasos

  1. Cree un nuevo dispositivo virtual Android (AVD) utilizando Android Studio o avdmanager. Aquí, he creado 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 del AVD es

    $ emulator -list-avds
    Pixel_2_API_21
  2. Arranca el AVD y haz que su partición de sistema sea escribible:

    $ $ANDROID_HOME/tools/emulator @Pixel_2_API_21 -writable-system

    Y el AVD se inicia, vuelve a montar su partición del sistema utilizando adb :

    $ $ANDROID_HOME/platform-tools/adb remount
  3. Descargue de Internet el Android System Webview de la versión que desee. Por ejemplo, puede utilizar Android System WebView 88.0.4324.93 (x86 + x86_64) (Android 5.0+) de apkmirror.com. El ID del paquete es com.google.android.webview que es diferente de la vista web por defecto del sistema ( com.android.webview ). Además, asegúrese de que su paquete tiene el mismo ABI que su AVD.

  4. Extraiga el paquete webview con unzip y empujarla junto con las bibliotecas nativas a la partición del sistema de tu 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/

    Una vez realizado este paso, deberías tener los siguientes archivos nuevos en tu 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
  5. Reinicia los servicios de Android para que el gestor de paquetes recoja 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
  6. Compruebe si el paquete está registrado en el gestor de paquetes. Asegúrese de que codePath , nativeLibraryPath y primaryCpuAbi son 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="...
  7. Como el nombre del paquete webview por defecto utilizado por el sistema operativo Android está codificado en los sistemas operativos Android más antiguos ( https://Android.stackexchange.com/a/139415 ), hay que modificar el framework de Android para utilizar el nuevo nombre del paquete. En primer lugar, tire de framework-res.apk de su AVD y descompilarlo utilizando apktool :

    $ $ANDROID_HOME/platform-tools/adb pull /system/framework/framework-res.apk
    $ apktool d framework-res.apk
  8. Actualizar el <path/to/extracted/framework-res.apk>/res/values/strings.xml para utilizar su nuevo sistema nombre del paquete webview:

    --- 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>
  9. Repack framework-res.apk utilizando 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 reintentar.

  10. El reenvasado framework-res.apk se coloca bajo <path/to/extracted/framework-res.apk>/dist . Extraer el resources.arsc y fusionarlo 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 sacaste de tu AVD está ahora actualizado.

  11. A continuación, sustituya el framework-res.apk en su AVD con nuestro actualizado (fusionado) framework-res.apk desde último paso y reiniciar el dispositivo:

    $ $ANDROID_HOME/platform-tools/adb push <path/to/original/framework-res.apk> /system/framework/framework-res.apk
    $ $ANDROID_HOME/platform-tools/adb reboot
  12. Por último, compruebe si la vista web se cambia a la nueva:

0 votos

Bueno, esto explica por qué es siempre más fácil de usar la tienda para actualizar la Webview .. lástima emulador prohíbe el uso de la Play Store.

1voto

Xetius Puntos 10445

La elección del WebView depende en gran medida del desarrollador de la aplicación.

La explicación larga está disponible en Migrando a WebView en Android 4.4 . También hay una explicación decente en AndroidPolice.com - WebView ahora está desagregado de Android y es gratuito para la auto-actualización de Google Play .

Explicación

La versión corta es que desde Android 4.4, el WebView puede ser actualizado a través de la Play Store fuera del ciclo de lanzamiento de Android. Sin embargo, la antigua versión incorporada se mantiene para soportar aplicaciones más antiguas para que no se rompa la compatibilidad.

El desarrollador de la aplicación debe apuntar a SDK 19 (Android 4.4) o más reciente, y usar el estándar SDK suministrado por WebView.class. Si el desarrollador hace eso, y el dispositivo que ejecuta la aplicación es 4.4 o más reciente, se debe usar la versión APK (Google Play) del WebView y se actualizará automáticamente con la versión Play Store.

Pero si alguna de las condiciones anteriores no se aplica, o el fabricante modificó los archivos del núcleo, o el desarrollador utiliza una biblioteca de apoyo, es posible que todavía pueda utilizar el antiguo WebView incorporado en su lugar.

Cómo resolver

Para que Clémentine resuelva su problema particular, contactar con el contacto de soporte de la aplicación en cuestión y solicitar que actualice su aplicación para que sea compatible con el posterior WebView basado en cromo (estableciendo su SDK objetivo en 19 o superior) es la forma más fácil de solucionar el problema. Aunque depende del desarrollador de la aplicación, que todos sabemos que no siempre funciona. (Soy uno de esos desarrolladores de aplicaciones. Lo intentamos, pero no siempre tenemos tiempo para mantener todas nuestras aplicaciones actualizadas constantemente).

0voto

sheepdog Puntos 106

Continuando con la respuesta anterior. Para Android 7 y superior: saca el archivo framework-res.apk de tu dispositivo, descompílalo y cambia el archivo /res/xml/config_webview_packages.xml y añadirle 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 entonces usted puede omitir este atributo. Si la firma no es correcta, el proveedor de webview no aparecerá en la lista disponible a través de los ajustes de desarrollo del dispositivo. No cambie la firma original de webviewProvider.apk - no será capaz de instalar las actualizaciones.

Poner framework-res.apk al dispositivo (necesita Root).

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X