Système de fichiers incrémentiel

Incremental File System (IncFS) est un module de noyau qui permet au système d'exploitation Android de recevoir des APK diffusés sur Android Debug Bridge (ADB). Le module de noyau autonome crée un nouveau système de fichiers virtuel qui se trouve au-dessus du système de fichiers Android existant et complète les modifications apportées au cadre Android 11 et au SDK pour permettre aux développeurs d'applications et de jeux de déployer des fichiers APK volumineux via ADB sur un appareil Android 11.

La modification du noyau active un nouveau format APK Signature Scheme v4 , prend en charge les modifications du cadre Android dans le gestionnaire de packages Android, les nouveaux services système et les modifications apportées au pont de débogage Android.

Mise en œuvre

Les OEM et les fabricants de SoC doivent ajouter un nouveau pilote de noyau à leurs versions d'appareils Android. Si le pilote du noyau est construit en tant que module, il est chargé à la demande. Si aucune application n'est installée via l'installation incrémentielle ADB, le périphérique ne charge pas le pilote du noyau. Lors de la construction en tant que partie de l'image du noyau, le pilote est toujours chargé.

Le pilote du noyau fait partie d'un système plus large pour permettre les installations APK en streaming. Les partenaires n'ont pas besoin d'utiliser le code IncFS exact fourni dans les exemples d'implémentations. Cependant, pour garantir une expérience cohérente sur tous les appareils, les partenaires doivent s'assurer que l'implémentation de l'API dispose d'un système de fichiers doté d'une fonctionnalité de lecture de fichier et d'une fonctionnalité de lecture / écriture de répertoire telles que définies ici .

En outre, les implémentations partenaires doivent avoir des options de montage et des fichiers spéciaux qui correspondent fonctionnellement à l'exemple d'implémentation IncFS.

Ce qui suit décrit les changements nécessaires pour la mise en œuvre:

  • Configurer la machine de développement pour construire le noyau.
  • Ciblez le noyau commun depuis la branche common-android-mainline .
    • $ repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    • $ repo sync
  • Validez les modifications suivantes nécessaires pour IncFS lors du paiement de la succursale:
  • Ajoutez la ligne CONFIG_INCREMENTAL_FS=y ou CONFIG_INCREMENTAL_FS=m au bas du fichier defconfig . Des exemples peuvent être trouvés sur les liens suivants:
  • Construire le noyau
  • Incorporez le noyau dans la construction de l'image de l'appareil Android .
  • Pour votre appareil Android cible, ajoutez l'une des lignes de propriété système spécifiques au fournisseur suivantes à votre fichier device.mk :
    • Dans le cas où vous utilisez CONFIG_INCREMENTAL_FS=y
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes
    • Dans le cas où vous utilisez CONFIG_INCREMENTAL_FS=m
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
    • Il existe des exemples de fichiers device.mk pour l'émulateur Android etPixel 4 .
  • Uniquement si vous utilisez CONFIG_INCREMENTAL_FS=m , ajoutez des règles Linux SE .
    • Créez et ajoutez un fichier vold.te à votre dossier appareil /system/sepolicy/vendor avec le contenu suivant:
      • vold.te
      • Permettre de charger le pilote du système de fichiers incrémentiel
      • allow vold self:capability sys_module;
      • allow vold vendor_incremental_module:file r_file_perms;
      • allow vold vendor_incremental_module:system module_load;
    • Ajoutez les règles SE Linux suivantes au fichier file.te existant file.te trouve dans votre dossier /system/sepolicy/vendor :
      • Exemple de fichier file.te
      • Pilote de système de fichiers incrémentiel
      • type vendor_incremental_module, vendor_file_type, file_type;
    • Ajoutez les règles SE Linux suivantes au fichier file_contents existant dans votre dossier /system/sepolicy/vendor :
      • Exemple de fichier file_contents
      • # Incremental file system driver
  • /vendor/lib/modules/incrementalfs\.ko
  • u:object_r:vendor_incremental_module:s0

Implémentations de référence

Il y a deux façons d'aborder cette implémentation, soit en tant que module chargeable, soit en tant que partie d'une image du noyau.

Validation et test

Validez l'implémentation à l'aide de Feature Unit Tests, CTS et GTS.

CTS

GTS

  • atest GtsIncrementalInstallTestCases
    • /gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

Test des IncF (Incremental FIle System)

  • Mettre en place un environnement de développement.
  • Terminez les tâches de mise en œuvre décrites dans la section de mise en œuvre.
  • Exécutez les tests manuels suivants:
    • $ mmma system/incremental_delivery/incfs/tests
    • $ atest libincfs-test
    • $ atest IncrementalServiceTest
    • $ atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest

Tester IncFS avec Android SDK (ADB et apksigner)

  • Mettre en place un environnement de développement.
  • Terminez les tâches de mise en œuvre décrites dans la section de mise en œuvre.
  • Flashez la compilation sur un périphérique physique ou un émulateur cible.
  • Générez ou obtenez un apk existant.
  • Créez une clé de signature de débogage .
  • Signez l' apk avec le format de signature v4 à partir du dossier build-tools .
    • $ ./apksigner sign --ks debug.keystore game.apk
  • Installez apk sur l'appareil à partir du dossier platform-tools .
    • $ ./adb install game.apk
Exemple d'installation
Figure 1 : Exemple d'installation

Où trouver ces tests?