Le module de noyau Incremental File System (IncFS) introduit dans Android 11 permet au système d'exploitation 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 repose sur le système de fichiers Android existant. Cela complète les modifications apportées au cadre et au SDK pour permettre aux développeurs d'applications et de jeux de déployer de grands APK via l'ADB sur un appareil fonctionnant sous Android 11 ou supérieur.
Le changement de noyau active un nouveau format APK Signature Scheme v4 et prend en charge les modifications du cadre Android dans le gestionnaire de packages Android, les nouveaux services système et les modifications apportées à l'ADB.
Mise en œuvre
Pour implémenter IncFS, les OEM et les fabricants de SoC doivent ajouter un nouveau pilote de noyau à leurs versions d'appareils Android.
Pour Android 11 uniquement , si le pilote du noyau est construit en tant que module, il est chargé à la demande. Si aucune application n'est installée via une installation incrémentielle ADB, l'appareil ne charge pas le pilote du noyau.
Sinon, lorsqu'il est construit en tant que partie de l'image du noyau, le pilote est toujours chargé. Cette implémentation est valable pour Android 12 et versions ultérieures, et peut être utilisée avec Android 11 . Pour plus d'informations sur la mise à niveau du pilote du noyau vers Android 12, consultez Mise à niveau du pilote du noyau .
Le pilote du noyau fait partie d'un système plus vaste permettant les installations APK en streaming. Les OEM et les fournisseurs n'ont pas besoin d'utiliser le code IncFS exact fourni dans les exemples d'implémentation. 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 l' interface Userspace pour la documentation Incremental FS .
De plus, les implémentations doivent disposer d'options de montage et de fichiers spéciaux qui correspondent fonctionnellement à l'exemple d'implémentation IncFS.
La liste suivante répertorie les modifications nécessaires à la mise en œuvre :
- Configurez la machine de développement pour construire 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-mainline
repo sync
- Vérifiez que les modifications suivantes nécessaires pour IncFS se trouvent dans l'extraction de 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 soit
CONFIG_INCREMENTAL_FS=y
, soit pour Android 11 uniquement ,CONFIG_INCREMENTAL_FS=m
au bas du fichierdefconfig
. Pour voir un exemple, cliquez sur l'un des liens ci-dessous : - Construire le noyau
- Intégrez 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és 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=yes
-
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Consultez les exemples de fichiers
device.mk
pour l'émulateur Android et le Pixel 4 . - Pour Android 11 uniquement : si vous utilisez
CONFIG_INCREMENTAL_FS=m
, ajoutez SE Linux Rules . -
vold.te
-
allow vold self:capability sys_module;
-
allow vold vendor_incremental_module:file r_file_perms;
-
allow vold vendor_incremental_module:system module_load;
- fichier
file.te
- Pour un exemple, voir ce fichierfile.te
.) - Pilote de système de fichiers incrémentiel
-
type vendor_incremental_module, vendor_file_type, file_type;
- fichier
file_contents
- Pour un exemple, consultez ce fichierfile_contents
. -
# Incremental file system driver
-
/vendor/lib/modules/incrementalfs\.ko
-
u:object_r:vendor_incremental_module:s0
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=y
, ajoutez au fichier l'un des éléments suivants :
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=m
(pour Android 11 uniquement ), ajoutez au fichier 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émentiel :
Ajoutez les règles SE Linux suivantes au fichier file.te
existant trouvé dans votre dossier /system/sepolicy/vendor
:
Ajoutez les règles SE Linux suivantes au fichier file_contents
existant trouvé dans votre dossier /system/sepolicy/vendor
:
Mise à niveau du pilote du noyau
Les appareils mis à niveau vers 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, v2) pour les raisons suivantes :
- La version publiée avec Android 11 est la mise en œuvre initiale d'IncFS, destinée 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 V1 prend en charge le streaming de jeux, mais le fait avec des pénalités de performances et une utilisation plus élevée de la batterie, du processeur et de la RAM que la v2.
- La V2 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 d'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 :
- Correctif du noyau 4.14
- Patch du noyau 4.19
Pour toutes les autres versions de noyau personnalisées, veuillez porter l'un des ensembles de correctifs. Ils n'affectent que le répertoire fs/incfs
et s'appliquent proprement 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 Android 11 d'origine mais désormais mis à niveau, soit en tant que partie intégrée de l'image du noyau, soit en tant que module distinct. Ne modifiez pas la configuration de la carte système ou des propriétés du système.
Les nouveaux appareils utilisant une image de noyau GKI obtiennent automatiquement le dernier pilote IncFS (v2), configuré dans le cadre de l'image du noyau. Cela ne nécessite aucune étape supplémentaire.
La configuration du module chargeable est obsolète dans Android 12 et n'est pas prise en charge pour les nouveaux appareils. Cela n'est autorisé que pour les mises à niveau ou pour le gel de l'image du fournisseur lorsque le noyau d'origine l'avait déjà construit en tant que module.
Implémentations de référence
Cette implémentation peut être considérée soit comme faisant partie d'une image du noyau, soit ( pour Android 11 uniquement ) comme un module chargeable.
Module chargeable (appareil Pixel 4)- Ajouter des pré-construits de modules de noyau
- Ajouter et activer la modification de la propriété système du module de noyau sur le périphérique
- Mettre à jour les règles SE Linux
Validation et tests
Validez la mise en œuvre à l’aide des tests unitaires de fonctionnalités, CTS et GTS.
CTS
UtilisezCtsIncrementalInstallHostTestCases
.GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Testez l'IncFS
- Mettre en place un environnement de développement.
- Effectuer 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
Comment tester IncFS avec le SDK Android (ADB et apksigner)
- Mettre en place un environnement de développement.
- Effectuer les tâches de mise en œuvre décrites dans la section de mise en œuvre.
- Flashez la version sur un périphérique physique cible ou un émulateur.
- 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

Localisez 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