Le module de noyau Incremental File System (IncFS) introduit dans Android 11 permet à l'OS Android de recevoir des APK en streaming via Android Debug Bridge (ADB).
Ce 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. Il complète les modifications apportées au framework et au SDK pour permettre aux développeurs d'applications et de jeux de déployer des APK volumineux via l'ADB sur un appareil exécutant Android 11 ou version ultérieure.
La modification du noyau permet un nouveau format APK Signature Scheme v4 et prend en charge les modifications du framework Android dans Android Package Manager, les nouveaux services système et les modifications apportées à l'ADB.
Implémentation
Pour implémenter IncFS, les OEM et les fabricants de SoC doivent ajouter un nouveau pilote de noyau à leurs builds d'appareils Android.
Pour Android 11 uniquement, si le pilote de noyau est créé en tant que module, il est chargé à la demande. Si aucune application n'est installée via une installation incrémentale ADB, l' appareil ne charge pas le pilote de noyau.
Sinon, lorsqu'il est intégré à l'image du noyau, le pilote est toujours chargé. Cette implémentation est valide pour Android 12 et versions ultérieures, et peut être utilisée avec Android 11. Pour en savoir plus sur la mise à niveau du pilote de noyau vers Android 12, consultez Mise à niveau du pilote de noyau.
Le pilote de noyau fait partie d'un système plus vaste permettant les installations d'APK en streaming. Les OEM et les fournisseurs n'ont pas besoin d'utiliser le code IncFS exact fourni dans les implémentations d'exemple. Toutefois, pour garantir une expérience cohérente sur tous les appareils, vous devez vous assurer que l'implémentation de l'API dispose d'un système de fichiers doté d'une fonctionnalité de lecture de fichiers et d'une fonctionnalité de lecture/écriture de répertoire, comme défini dans la documentation Interface Userspace pour Incremental FS.
De plus, les implémentations doivent comporter des options de montage et des fichiers spéciaux qui correspondent fonctionnellement à l'implémentation d'exemple IncFS.
Voici la liste des modifications nécessaires à l'implémentation :
- Configurez l'ordinateur de développement pour créer le noyau.
- Ciblez le noyau commun à partir de la branche
common-android-mainline.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainlinerepo sync - Vérifiez que les modifications suivantes nécessaires à IncFS se trouvent dans l' extraction de la branche :
- https://android-review.googlesource.com/c/kernel/common/+/1222869/
- https://android-review.googlesource.com/c/kernel/common/+/1222870
- https://android-review.googlesource.com/c/kernel/common/+/1222871
- https://android-review.googlesource.com/q/%2522ANDROID:+Incremental+fs:%2522+branch:android-mainline+status:merg
- Ajoutez
CONFIG_INCREMENTAL_FS=you pour Android 11 uniquement,CONFIG_INCREMENTAL_FS=mau bas du fichierdefconfig. Pour voir un exemple, cliquez sur l'un des liens ci-dessous : - Créez le noyau.
- Intégrez le noyau dans la création 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(facultatif sur les appareils lancés avec Android 12 et versions ultérieures) : PRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=yesPRODUCT_PROPERTY_OVERRIDES += \ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko- Consultez les exemples de fichiers
device.mkpour l'émulateur Android et Pixel 4. - Pour Android 11 uniquement : si vous utilisez
CONFIG_INCREMENTAL_FS=m, ajoutez des règles SE Linux. vold.teallow vold self:capability sys_module;allow vold vendor_incremental_module:file r_file_perms;allow vold vendor_incremental_module:system module_load;-
file.tefichier - Pour obtenir un exemple, consultez cefile.tefichier) - Pilote du système de fichiers incrémental
type vendor_incremental_module, vendor_file_type, file_type;-
Fichier
file_contents(pour obtenir un exemple, consultez ce fichierfile_contents) # Incremental file system driver/vendor/lib/modules/incrementalfs\.kou:object_r:vendor_incremental_module:s0
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=y, ajoutez le fichier avec
l'un des éléments suivants :
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=m (_pour Android 11 uniquement_),
ajoutez le fichier avec l'un des éléments suivants :
Créez et ajoutez un fichier vold.te au dossier
/system/sepolicy/vendor de votre appareil avec le contenu suivant :
Autorisez-le à charger le pilote du système de fichiers incrémental :
Ajoutez les règles SE Linux suivantes au fichier file.te existant
situé dans votre dossier /system/sepolicy/vendor :
Ajoutez les règles SE Linux suivantes au fichier file_contents
existant situé dans votre dossier /system/sepolicy/vendor :
Mise à niveau du pilote de noyau
Les appareils passant à Android 12 peuvent inclure une ancienne version du pilote IncFS. Pour ces appareils, AOSP vous recommande de mettre à jour le pilote IncFS vers la version actuelle (dans ce cas, la version 2) pour les raisons suivantes :
- La version publiée avec Android 11 est l'implémentation initiale de IncFS, ciblant uniquement la prise en charge de l'installation ADB.
- Android 12 utilise le pilote IncFS pour les installations en streaming de jeux Play, ce qui nécessite les nouvelles fonctionnalités et optimisations d'IncFS v2 pour une meilleure expérience utilisateur.
- La version 1 est compatible avec le streaming de jeux, mais avec des pénalités de performances et une utilisation plus élevée de la batterie, du processeur et de la RAM que la version 2.
- La version 2 offre une expérience utilisateur améliorée pour le streaming, avec des animations de progression fluides, des rapports précis sur l'utilisation de l'espace disque et la prévention des interférences de streaming des applications tierces.
Pour mettre à niveau le pilote IncFS dans votre noyau, appliquez les correctifs suivants pour le noyau 4.14 ou le noyau 4.19 :
Pour toutes les autres versions de noyau personnalisées, veuillez transférer l'un des ensembles de correctifs. Ils
n'affectent que le répertoire fs/incfs et s'appliquent correctement au
code v1 existant.
- Correctif du noyau 4.14 pour le pilote v1
- Correctif du noyau 4.19 pour le pilote v1
- Correctif du noyau 5.4 pour le pilote v1
Continuez à utiliser le pilote IncFS de la même manière que pour la version Android 11 d'origine, mais désormais mise à niveau, soit en tant que partie intégrée de l'image du noyau, soit en tant que module distinct. Ne modifiez pas la carte mère ni la configuration des propriétés système.
Les nouveaux appareils utilisant une image de noyau GKI obtiennent automatiquement le dernier pilote IncFS (v2) , configuré dans l'image du noyau. Aucune étape supplémentaire n'est requise.
La configuration du module chargeable a été abandonnée dans Android 12 et n'est compatible avec les nouveaux appareils. Elle n'est autorisée que pour les mises à niveau ou pour le gel d'une image de fournisseur lorsque le noyau d'origine l'avait déjà intégré en tant que module.
Implémentations de référence
Cette implémentation peut être considérée comme faisant partie d'une image de noyau ou (pour Android 11 uniquement) comme un module chargeable.
Module chargeable (appareil Pixel 4)- Ajouter des précompilations de modules de noyau
- Ajouter et activer la modification de la propriété système du module de noyau sur l'appareil
- Mettre à jour les règles SE Linux
Validation et test
Validez l'implémentation à l'aide de tests unitaires de fonctionnalités, de CTS et de GTS.
CTS
Utilisez
CtsIncrementalInstallHostTestCases.
GTS
atest GtsIncrementalInstallTestCases:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.javaTester IncFS
- Configurez un environnement de développement.
- Effectuez les tâches d'implémentation décrites dans la section Implémentation.
- Exécutez les tests manuels suivants :
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Tester IncFS avec le SDK Android (ADB et apksigner)
- Configurez un environnement de développement.
- Effectuez les tâches d'implémentation décrites dans la section Implémentation.
- Flashez le build sur un appareil 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 au format de signature v4 à partir du dossier
build-tools../apksigner sign --ks debug.keystore game.apk
- Installez l'APK sur l'appareil à partir du dossier
platform-tools../adb install game.apk
Localiser ces tests
- /android/kernel/common/tools/testing/selftests/filesystems/incfs/
- /android/system/incremental_delivery/incfs/tests/incfs_test.cpp
- /android/cts/tests/tests/content/src/android/content/pm/cts/PackageManagerShellCommandIncrementalTest.java