Derrière les mises à jour système dynamiques sous Android Q: Comment Google utilise Project Treble pour améliorer les futures versions d'Android

Parallèlement à la sortie d'Android 8.0 Oreo, Google a dévoilé Project Treble: une nouvelle architecture majeure dans la manière dont le système d'exploitation Android et les HAL du fournisseur et le noyau Linux communiquent. Treble est une initiative majeure conçue pour réduire la fragmentation des correctifs de sécurité et de la version de la plate-forme Android. De plus, tous les appareils de marque Android lancés avec Android Pie doivent prendre en charge Project Treble. Les fabricants et les fabricants testent la compatibilité de Treble en démarrant une image système générique (GSI), une version de stock pure d'Android à partir d'AOSP, et en passant de la suite de tests fournisseur (VTS) et de la suite de tests de compatibilité (CTS sur GSI). ). GSI s'est avéré utile non seulement en permettant aux ingénieurs en logiciel travaillant pour des OEM de tester la compatibilité Treble, mais également en ouvrant la voie à une grande communauté de ROM personnalisée. Pour la version Android Q, Google veut rendre les GSI utiles pour un autre groupe: les développeurs d'applications.

Depuis que la première version stable et la suppression du code source de toute version de plate-forme Android sont généralement disponibles en août, les développeurs qui souhaitent tester la prochaine version d'Android sur un appareil réel ont généralement besoin d'un accès à un smartphone Google s'ils ne souhaitent pas attendre. la mise à jour pour atteindre leur propre matériel. Cependant, Google a collaboré avec des constructeurs OEM pour intégrer un Android P bêta à plusieurs appareils l'année dernière. Cette année encore, ils ont mis au point un bêta Android Q. Parallèlement à la version bêta officielle d'Android Q, Google a également publié cette année une version bêta officielle de GSI. Ainsi, tout développeur disposant d'un appareil compatible avec Project Treble peut installer la dernière version de Q sans avoir à attendre des mois avant que la version finale atteigne ses appareils. Cette nouvelle méthode de test de la prochaine version d'Android offre aux développeurs plus de possibilités, et donc plus de temps, pour tester leurs applications par rapport aux modifications majeures apportées à Android.

Malheureusement, la méthode actuelle d'installation d'un GSI peut être difficile. Pour cela, il faut déverrouiller le chargeur de démarrage (ce qui signifie effacer toutes les données de l'utilisateur et / ou annuler la garantie) et faire clignoter une image via le protocole fastboot. Ce n'est pas un processus simple et rapide pour un développeur d'applications, si son appareil permet même de déverrouiller le chargeur de démarrage. C'est pourquoi Google travaille depuis plusieurs mois sur une nouvelle façon de démarrer GSI. Entrez une nouvelle fonctionnalité appelée Mise à jour dynamique du système ou DSU.

(Cette fonctionnalité était auparavant développée sous les noms «Image en direct», «Android dynamique» et «Android à la tapette». Ne soyez donc pas surpris si Google l'appelle autrement dans quelques semaines ou quelques mois.)

Mises à jour système dynamiques dans Android Q

L'objectif de la fonctionnalité DSU est de permettre à un développeur de démarrer dans un GSI sans interférer avec l'installation en cours. Cela signifie que le chargeur de démarrage n'a pas besoin d'être déverrouillé ni que les données utilisateur doivent être effacées. Le processus d'installation est également grandement simplifié, car Google a fourni une interface de ligne de commande via ADB et une application contrôlable via des intentions. Voici à quoi ressemble le démarrage d'un GSI à l'aide de DSU:

Dans cette vidéo *, un Google Pixel 3 XL sous Android Q bêta 3 redémarre dans un GSI. Dans cet environnement, un développeur d'applications peut installer et tester la compatibilité de l'API Q de son application. Une fois les tests terminés, ils peuvent simplement redémarrer dans le logiciel Q beta 3 standard de l’appareil. En gros, vous double-amorcez un GSI pour pouvoir tester votre application en toute sécurité!

* Nous avons enregistré cette vidéo sur Google I / O 2019 alors que DSU n'était pas encore accessible au public. La version Q beta 3 basée sur le Pixel 3 XL filmé a été légèrement modifiée par Google pour intégrer la prise en charge de DSU. Les appareils exécutant Q beta 4 et versions ultérieures sont éligibles pour prendre en charge DSU s'ils répondent aux exigences ci-dessous.

Conditions requises pour les mises à jour système dynamiques

Obtenir ce qui est essentiellement le double démarrage n’a pas été une tâche facile pour Google. Des changements majeurs ont dû être apportés à la gestion des partitions sur le Pixel 3, le banc d'essai de Google pour DSU. Ainsi, la première exigence majeure pour la prise en charge de DSU est que le périphérique prenne en charge les partitions dynamiques . Les partitions dynamiques impliquent une partition de stockage réelle divisée en partitions logiques redimensionnables telles que système, fournisseur, logiciel, fournisseur, produit, etc. Au cours de l'installation d'un GSI, l'espace est réservé aux nouvelles partitions système et userdata en prenant des blocs inutilisés dans les blocs existants. partition userdata. Étant donné que ces nouvelles partitions peuvent avoir une taille de plusieurs gigaoctets, la prise en charge de DSU n'a de sens que pour les partitions logiques, sinon un périphérique devrait réserver en permanence plusieurs gigaoctets d'espace de stockage pour les installations GSI.

Les autres exigences incluent un disque virtuel, qui décide de démarrer en récupération, un système ou une partition logique, et une partition de métadonnées pour stocker les métadonnées du GSI. En général, les blocs de construction pour la prise en charge de DSU sont les exigences de lancement d'Android Q, selon le responsable du projet Treble, Iliyan Malchev. Nous ne savons pas si tout ce qui est nécessaire pour prendre en charge DSU est une condition requise pour le lancement d'Android Q, mais nous pouvons présumer que la plupart, sinon tous les appareils lancant avec Android Q peuvent prendre en charge DSU même si Google ne les y oblige pas actuellement. Jusqu'à présent, seuls les Pixel 3, Pixel 3 XL, Pixel 3a et Pixel 3a XL ont des partitions dynamiques, et parmi ces périphériques, seuls Pixel 3 et Pixel 3 XL prennent en charge DSU dans Android Q bêta 4. Bien que la prise en charge des DSU ne le soit pas Si nécessaire, Google espère néanmoins que les constructeurs OEM activeront cette fonctionnalité, car elle simplifie en toute sécurité les tests de compatibilité Treble. Par exemple, un ingénieur en logiciel OEM peut installer un GSI sur une carte SD afin d’amorcer rapidement plusieurs périphériques afin de tester la compatibilité de Treble.

Sécurité pour les mises à jour système dynamiques

Étant donné que DSU introduit essentiellement un second système d'exploitation dans le mix, Google doit s'assurer que cette nouvelle installation ne peut pas être altérée pour altérer l'intégrité du périphérique. Ainsi, les mêmes protections de sécurité de base pour l'installation d'origine sont en place pour l'installation de GSI : stratégies Android Verified Boot et SELinux. En outre, seules les applications avec l'autorisation privilégiée signature INSTALL_DYNAMIC_SYSTEM peuvent lancer une installation GSI, tandis que les applications disposant de l'autorisation de signature MANAGE_DYNAMIC_SYSTEM peuvent activer / désactiver ou effacer une installation GSI. Cela signifie que seules les applications approuvées au niveau système peuvent fonctionner avec DSU.

Pour garantir la protection des données utilisateur d'origine, Google a ajouté un mécanisme de protection supplémentaire dans Android Q. Appelé « Checkpoint », cette fonctionnalité protège contre la destruction des données utilisateur en restaurant les partitions à point de contrôle dans leur état d'origine. Les points de contrôle sont utiles non seulement pour les DSU. Ils sont également utilisés pour se protéger contre les modules bâclés du projet Mainline APEX et les mises à jour A / B OTA. (Les périphériques avec des partitions A / B disposent déjà d'une protection d'annulation, mais ces restaurations nécessitent des réinitialisations des données d'usine, contrairement aux points de contrôle des données utilisateur.)

Installer un GSI

Si votre appareil prend en charge les unités DSU telles que la série Pixel 3, il est facile d’installer un GSI. Vous devez d'abord vous assurer que l'indicateur de fonctionnalité Système dynamique est activé de l'une des deux manières suivantes:

  1. Si vous utilisez une version de userdebug, activez l'indicateur settings_dynamic_android dans Paramètres> Système> Options pour les développeurs> Indicateurs de fonctionnalité.
  2. Si vous utilisez une version utilisateur, exécutez la commande adb shell suivante:
     setprop persist.sys.fflag.override.settings_dynamic_system 1 

Ensuite, téléchargez la dernière version d'Android Q beta GSI de Google ou du fabricant de votre appareil. (DSU n'autorise que l'installation de fichiers GSI signés par Google ou par un OEM.) Une fois téléchargé, utilisez simg2img pour convertir l'image fragmentée en image brute. Utilisez gzip pour compresser l’image brute, puis copiez l’archive résultante dans un emplacement du stockage externe de votre appareil (par exemple, / data / media / 0 / Download) ou sur un support de stockage externe réel (comme une carte SD physique). Enfin, lancez l'application DynamicSystemInstallationService avec l'intention voulue pour commencer l'installation:

 adb shell am start-activity \ -n com.android.dynsystem/com.android.dynsystem.VerificationActivity \ -a android.os.image.action.START_INSTALL \ -d file:///storage/emulated/0/Download/system_raw.gz \ --el KEY_SYSTEM_SIZE $(du -b system_raw.img|cut -f1) \ --el KEY_USERDATA_SIZE 8589934592 

Installation de GSI en cours. Source: Google

Notification de DSU. Source: Google

Une fois que vous avez cliqué sur Redémarrer, vous démarrez dans GSI. La convivialité du périphérique dans le GSI dépend de la manière dont le fabricant de votre périphérique a implémenté Treble (ou plutôt, du fait qu’ils ont peu violé la compatibilité avec Treble.) Certains périphériques fonctionneront mieux avec des GSI que d’autres, mais en général, ne vous attendez pas à utiliser ce installation en tant que pilote quotidien. Vous êtes censé tester votre application puis sortir en redémarrant. Si vous souhaitez rester dans l'installation GSI pour des tests supplémentaires, vous pouvez utiliser la commande shell gsi_tool.

Les instructions complètes d'installation GSI pour DSU sont disponibles ici. Les bogues peuvent être archivés dans Google Issue Tracker, Reddit ou Stack Overflow.

La raison derrière les mises à jour système dynamiques

Lorsque j'ai parlé à Iliyan Malchev à Google I / O, il a répété ce que Hung-ying Tyan de l'équipe Treble avait déclaré à propos du premier accès à GSI lors du sommet Android Dev de novembre. Google a créé DSU pour solliciter les commentaires d’un public aussi large que possible . L'objectif est d'améliorer la qualité du GSI, ce qui à son tour améliore la qualité de la future version d'Android puisqu'un GSI est la forme la plus pure d'Android. À l'heure actuelle, Google est la seule société à tester la compatibilité de la prochaine version de GSI (par exemple, l'efficacité de l'image système Android Q par rapport à l'implémentation du fournisseur Android P), mais à mesure que de plus en plus de personnes flasheront GSI et donneront leur avis, les OEM pourront corriger la compatibilité de Treble. violations afin que GSI fonctionnera encore mieux à l'avenir. Iliyan a déclaré que les OEM et les fournisseurs tels que Qualcomm souhaitaient vivement réutiliser les images des fournisseurs de la version précédente d'Android avec l'image système de la prochaine version. Des initiatives telles que DSU aident Google et les équipementiers à combler les lacunes en matière de couverture grâce aux tests automatisés tels que VTS et CTS-on-GSI. Ainsi, Google demande à davantage de bêta-testeurs de donner leur avis sur la prochaine version d'Android, tout en entendant parler des violations de la compatibilité avec Treble afin que les OEM puissent améliorer leur travail.

L'ajout de mises à jour système dynamiques dans Android Q est le bienvenu, mais ce ne sera pas la solution à double démarrage que certains d'entre vous espèrent. Comme indiqué précédemment, seules les images système signées par Google ou par les constructeurs OEM peuvent être installées. Quand j'ai interrogé Iliyan sur la possibilité d'étendre DSU pour prendre en charge un écosystème de systèmes Android alternatifs, il a déclaré qu'il était techniquement possible de le faire, étant donné que DSU est simplement un canal permettant de fournir des images système. N'importe quel OEM peut l'utiliser comme bon lui semble , à condition que le résultat final soit conforme à Android . Google n'a pas créé d'alternative au système OTA, et DSU n'est pas destiné à être utilisé pour un véritable double démarrage. Quoi qu'il en soit, le travail effectué par Google sur Treble rend Android plus modulaire. Je ne serais donc pas surpris que le double démarrage natif devienne une réalité.