Module de noyau IncFS (IncFS) introduit dans Android 11 permet à l'OS Android de recevoir des APK diffusés en continu via Android Debug Bridge (ADB).
<ph type="x-smartling-placeholder">Ce module autonome de noyau crée un nouveau système de fichiers virtuel qui repose par-dessus le système de fichiers Android existant. Cela complète les modifications apportées au et le SDK pour permettre aux développeurs d'applications et de jeux de déployer des APK volumineux via ADB vers un appareil équipé d'Android 11 ou version ultérieure.
La modification du noyau permet Format APK Signature Scheme v4 et est compatible avec les modifications apportées au framework Android dans le gestionnaire de packages Android. de nouveaux services système et des modifications apportées à ADB.
Implémentation
Pour implémenter IncFS, les OEM et les fabricants de SoC doivent ajouter un nouveau noyau à leurs builds d'appareils Android.
Pour Android 11 uniquement, si le pilote du noyau est conçu sous la forme d'un module chargé à la demande. Si aucune application n'est installée via une installation incrémentielle ADB, périphérique ne charge pas le pilote du noyau.
Dans le cas contraire, lorsqu'il est compilé le pilote est toujours chargé. Cette implémentation est valable pour Android 12 ou version ultérieure, et peut être utilisé avec Android 11. Pour des 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 d'activer le streaming de l'APK installations. Les OEM et les fournisseurs n'ont pas besoin d'utiliser le code IncFS exact fourni. dans les exemples de mise en œuvre. Toutefois, pour garantir une expérience cohérente vous devez vous assurer que l'implémentation de l'API dispose d'un système de fichiers qui comporte une fonctionnalité de lecture de fichiers et une fonctionnalité de lecture/écriture de répertoire, défini dans la documentation sur l'interface utilisateur pour les flux incrémentiels.
De plus, les implémentations doivent comporter des options d'installation. et des fichiers spéciaux qui correspondent fonctionnellement à l'exemple d'implémentation IncFS.
Voici une liste des modifications que vous devez apporter à l'implémentation:
- Configurer 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-mainline
repo sync
- Vérifiez que les modifications suivantes sont nécessaires pour IncFS paiement en agence:
- 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:+incrémentiel+fs:%2522+branch:android-mainline+status:merg
- Ajoutez
CONFIG_INCREMENTAL_FS=y
ou pour Android 11 uniquement,CONFIG_INCREMENTAL_FS=m
en bas du fichierdefconfig
. Pour voir un exemple, cliquez sur l'un des liens ci-dessous: - Compiler le noyau
- Intégrez le noyau dans le fichier Android device image build. <ph type="x-smartling-placeholder">
- Pour votre appareil Android cible, ajoutez l'un des éléments suivants, spécifiques au fournisseur
à votre fichier
device.mk
(facultatif sur les appareils lancés avec Android 12 ou version ultérieure): 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 Android Emulator et Pixel 4 : - Pour Android 11 uniquement: si vous utilisez
CONFIG_INCREMENTAL_FS=m
, ajoutez des règles Linux SE. 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 obtenir un exemple, consultez ce fichierfile.te
.) - Pilote de système de fichiers incrémentiel
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\.ko
u:object_r:vendor_incremental_module:s0
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=y
, ajoutez au fichier :
l'une des options suivantes:
Lorsque vous utilisez CONFIG_INCREMENTAL_FS=m
(pour Android 11 uniquement), procédez comme suit :
Ajoutez l'un des éléments suivants au fichier:
Créer un fichier vold.te
et l'ajouter à votre appareil
/system/sepolicy/vendor
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
:
Ajouter les règles Linux SE suivantes aux file_contents
existants
fichier présent dans le dossier /system/sepolicy/vendor
:
Mise à niveau du pilote du noyau
Les appareils mis à niveau vers Android 12 peuvent inclure une ancienne version d'IncFS pilote. Pour ces appareils, l'AOSP vous recommande de mettre à jour le pilote IncFS vers la version actuelle (v2, dans le cas présent) pour les raisons suivantes:
- La version publiée avec Android 11 est l'implémentation initiale d'IncFS, ciblé uniquement pour l'installation d'ADB.
- Android 12 utilise le pilote IncFS pour les installations en streaming de jeux Play, qui nécessite les nouvelles fonctionnalités et optimisations d'IncFS v2 pour une meilleure expérience expérience.
- V1 est compatible avec le streaming de jeux, mais avec des conséquences négatives sur les performances et une utilisation plus élevée de la batterie, du CPU et de la RAM que v2.
- V2 améliore l'expérience utilisateur en streaming avec des animations fluides rapports précis sur l'utilisation de l'espace disque et prévention de la diffusion d'applications tierces en streaming des interférences.
Pour mettre à niveau le pilote IncFS dans votre noyau, appliquez les correctifs suivants pour noyau 4.14 ou kernel 4.19:
- Correctif du noyau 4.14
- Correctif du noyau 4.19
Pour toutes les autres versions de noyau personnalisées, veuillez porter le premier des correctifs. Ils
n'affectent que le répertoire fs/incfs
et les appliquent correctement
code v1 existant.
- Correction du noyau 4.14 pour le pilote de la version 1
- Correction du noyau 4.19 pour le pilote v1
- Correction du noyau 5.4 pour le pilote de la version 1
Continuez à utiliser le pilote IncFS de la même manière que pour le pilote d'origine, mais maintenant mise à niveau d'Android 11, que ce soit en tant que partie intégrée de l'image du noyau, ou dans un module distinct. Ne modifiez pas la carte système ni les propriétés du système configuration.
Les nouveaux appareils utilisant une image de noyau GKI obtiennent le pilote IncFS le plus récent (v2) automatiquement, configuré dans le cadre de l'image du noyau. Cela ne nécessite pas étapes supplémentaires.
La configuration du module chargeable a été abandonnée dans Android 12 et n'est pas compatible avec les nouveaux appareils. Elle est autorisée uniquement pour les mises à niveau, l’image se figeait alors que le noyau d’origine l’avait déjà compilé 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) en tant que module chargeable.
Module chargeable (appareil Pixel 4) <ph type="x-smartling-placeholder">- </ph>
- Ajouter des modules kernel prédéfinis
- Ajouter et activer la modification des propriétés système du module Kernel sur l'appareil
- Mettre à jour les règles SE Linux
Validation et test
Valider l'implémentation à l'aide de tests unitaires des 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.java
Tester 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)
- Configurer 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 de
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