20 votes

Système Android Webview installé mais non utilisé par les applications

J'ai téléchargé et installé la dernière version de Système Android WebView depuis la boutique d'applications sur ma tablette Android (fonctionnant en 5.0.2).

Mais les applications continuent d'utiliser l'ancienne version de webview (39.0.0.0).

Comment faire pour qu'ils changent ?

Pour info, j'ai essayé de désactiver l'ancienne, et elle est réactivée lorsque j'ouvre une application qui utilise webview.

2 votes

Par curiosité, comment savez-vous quelle version de Webview une application utilise ?

1 votes

J'ai effectué des tests avec plusieurs applications, telles que Droidscript et WebView Browser, et j'ai visité les sites suivants whatsmyuseragent

0 votes

J'ai lu les sources de Lollipop, et ça ne devrait pas arriver. Il devrait utiliser la dernière version, sauf si le fabricant a remplacé la classe WebViewFactory par la sienne. Quel est le modèle exact de votre appareil et la version fournie par le fabricant ?

21voto

David Negron Points 971

Tu ne peux pas changer ça sans Root.

Le cadre du système est codé en dur pour utiliser un paquet spécifique pour les applications qui demandent un composant WebView. Par défaut (dans AOSP), il utilise la valeur com.android.webview qui est la version qui est compilée pendant le processus de construction de l'AOSP. Sur les appareils des fabricants qui modifient ce composant, le nom du paquet peut être différent. Quoi qu'il en soit, pour remplacer la WebView livrée avec votre appareil, vous devez modifier cette valeur pour qu'elle devienne com.google.android.webview .

La méthode "à la main" consisterait à tirer la carte de l'ordinateur. cadre-res.apk de votre appareil, le décompiler, et modifier la valeur de l'élément config_webViewPackageName variable de ressource. Elle doit être située à /res/values/strings.xml dans le fichier .apk. Une fois que vous avez fait cela, vous devez tout ré-emballer et pousser le nouveau .apk sur votre appareil, en remplaçant l'ancien.

Une méthode alternative que vous pouvez essayer est de installer le cadre Xposed et ensuite utiliser le Module WebViewGoogle . Si vous utilisez une ROM personnalisée, vous pourrez peut-être trouver un paquet qui modifiera de façon permanente les composants nécessaires du framework (ou bien il peut être construit pour utiliser la WebView de Google par défaut).

Mon hypothèse est que cette restriction existe en partie parce que le système repose sur l'existence d'une implémentation WebView sous une forme ou une autre, de sorte que si elle pouvait être modifiée par un utilisateur, cela pourrait briser le système de manière étrange. Il y aurait également des implications en matière de sécurité à permettre aux applications de remplacer la WebView du système, par exemple un mauvais acteur qui tenterait d'en fournir une malveillante à l'insu de l'utilisateur.

Pour plus d'explications, la raison pour laquelle la vue Web du système est disponible dans le Play Store est que les appareils Nexus (et peut-être d'autres) sont livrés avec cette vue préinstallée et configurée pour l'utiliser. Ainsi, Google est en mesure de fournir des mises à jour de la WebView pour ces appareils via le Play Store, de sorte que les OTAs du système complet ne sont pas nécessaires pour mettre à jour le navigateur/WebView. Il existe d'autres composants que Google a fait migrer vers la mise à jour du Play Store de manière similaire, le raisonnement étant essentiellement que c'est plus rapide. Téléphone et contacts L'article en question fournit des détails supplémentaires sur les raisons pour lesquelles Google a adopté cette approche.

1 votes

Merci pour cette explication mais, quelle est l'utilité de cette application webview du système Android alors ?

1 votes

@Clémentine Les appareils Nexus (et peut-être d'autres) sont livrés avec le logiciel préinstallé et configuré pour l'utiliser. Ainsi, Google est en mesure de fournir des mises à jour de WebView pour ces appareils via le Play Store de sorte que le système complet OTAs ne sont pas nécessaires juste pour mettre à jour le navigateur / WebView. Il existe d'autres composants que Google a fait migrer vers la mise à jour du Play Store de manière similaire, le raisonnement étant essentiellement que c'est plus rapide.

1 votes

Pourquoi toutes les tablettes fonctionnant sous lollipop ou un système d'exploitation plus récent n'utilisent-elles pas cette fonction comme WebView par défaut, c'est du gaspillage !

3voto

ppoffice Points 51

J'ai suivi la réponse de @eldarerathis et fait un guide étape par étape sur la façon de mettre à jour webview sur un émulateur Android 5.0. Cela fonctionne probablement aussi sur Android 5.1 à Android 6.0. J'espère que cela aidera tous ceux qui souhaitent utiliser une webview plus récente sur de vieux appareils Android.

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

Outils

  1. émulateur (30.3.5) (via Android SDK)
  2. adb (30.0.5) (via Android SDK)
  3. apktool (2.5.0) et runtime Java
  4. zip (3.0)
  5. unzip (6.0)

Assurez-vous que vous avez JAVA_HOME y ANDROID_HOME les variables d'environnement sont correctement définies.

Étapes

  1. Créez un nouveau dispositif virtuel Android (AVD) en utilisant Android Studio ou avdmanager. Ici, j'ai créé un appareil Android 5.0 avec l'image système suivante :

    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/

    Le nom de l'AVD est

    $ emulator -list-avds
    Pixel_2_API_21
  2. Démarrez l'AVD et rendez sa partition système accessible en écriture :

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

    Et l'AVD démarre, remontez sa partition système en utilisant adb :

    $ $ANDROID_HOME/platform-tools/adb remount
  3. Téléchargez sur Internet la vue Web du système Android de la version souhaitée. Par exemple, vous pouvez utiliser Android System WebView 88.0.4324.93 (x86 + x86_64) (Android 5.0+) depuis apkmirror.com. L'ID du paquet est com.google.android.webview qui est différente de la vue web du système par défaut. ( com.android.webview ). Assurez-vous également que votre paquet a la même ABI que votre AVD.

  4. Extraire le paquet webview en utilisant unzip et le pousser, ainsi que les bibliothèques natives, vers la partition système de votre 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/

    Une fois cette étape terminée, vous devriez avoir les nouveaux fichiers suivants dans votre 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. Redémarrez les services Android pour permettre au gestionnaire de paquets de récupérer notre nouveau paquet 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. Vérifiez si le paquet est enregistré dans le gestionnaire de paquets. Assurez-vous que codePath , nativeLibraryPath et primaryCpuAbi sont correctes :

    $ $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. Étant donné que le nom par défaut du paquet webview utilisé par le système d'exploitation Android est codé en dur dans les anciens systèmes d'exploitation Android. ( https://Android.stackexchange.com/a/139415 ), vous devez modifier le framework Android pour utiliser le nouveau nom de paquet. Tout d'abord, tirez framework-res.apk de votre AVD et le décompiler en utilisant apktool :

    $ $ANDROID_HOME/platform-tools/adb pull /system/framework/framework-res.apk
    $ apktool d framework-res.apk
  8. Mettre à jour le <path/to/extracted/framework-res.apk>/res/values/strings.xml pour utiliser votre nouveau système nom du paquet 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 en utilisant apktool .

    $ apktool b <path/to/extracted/framework-res.apk>

    Il se peut qu'il y ait quelques erreurs à corriger avant que le paquet puisse être reconditionné. Par exemple, si vous avez rencontré l'erreur suivante :

    Error: String types not allowed (at 'APKTOOL_DUMMY_34e' with value '').

    vous devez remplacer <drawable name="APKTOOL_DUMMY_..." /> con <item type="drawable" name="APKTOOL_DUMMY_..." /> dans le <path/to/extracted/framework-res.apk>/res/values-nodpi-v4/drawables.xml et réessayer.

  10. Le reconditionnement framework-res.apk est placé sous <path/to/extracted/framework-res.apk>/dist . Extraire le resources.arsc et de le fusionner avec le fichier 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

    L'original framework-res.apk que vous avez tiré de votre AVD est maintenant mis à jour.

  11. Ensuite, remplacez le framework-res.apk dans votre AVD avec notre mise à jour (fusionnée) framework-res.apk de dernière étape et redémarrez l'appareil :

    $ $ANDROID_HOME/platform-tools/adb push <path/to/original/framework-res.apk> /system/framework/framework-res.apk
    $ $ANDROID_HOME/platform-tools/adb reboot
  12. Enfin, vérifiez si la vue web est passée à la nouvelle :

0 votes

Eh bien, cela explique pourquoi il est toujours plus facile d'utiliser le Store pour mettre à jour la Webview dommage que l'émulateur interdit l'utilisation du Play Store.

0voto

ArkadiBernov Points 101

Dans la continuité de la réponse précédente. Pour Android 7 et plus : récupérez le fichier framework-res.apk de votre appareil, décompilez-le et modifiez le fichier /res/xml/config_webview_packages.xml et ajoutez-y un nouveau fournisseur de vues Web.

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>

A propos de la signature. Si webviewprovider.apk a signé la signature du système, vous pouvez ignorer cet attribut. Si la signature n'est pas correcte, le fournisseur de webview n'apparaîtra pas dans la liste disponible via les paramètres de développement de l'appareil. Ne modifiez pas la signature originale de webviewProvider.apk - vous ne pourrez pas installer les mises à jour.

Mettez framework-res.apk à l'appareil (besoin de Root).

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X