Il modulo del kernel Incremental File System (IncFS) introdotto in Android 11 consente al sistema operativo Android di ricevere APK in streaming tramite Android Debug Bridge (ADB).
Questo modulo kernel autonomo crea un nuovo file system virtuale che sul file system Android esistente. Questo integra le modifiche e SDK per consentire agli sviluppatori di app e giochi di implementare APK di grandi dimensioni tramite l'ADB su un dispositivo con Android 11 o versioni successive.
La modifica al kernel abilita una nuova Formato v4 dello schema di firma dell'APK e supporta le modifiche al framework Android in Android Package Manager, nuovi servizi di sistema e modifiche all'ADB.
Implementazione
Per implementare IncFS, gli OEM e i SoC devono aggiungere un nuovo kernel alle build dei loro dispositivi Android.
Solo per Android 11, se il driver del kernel è costruito come modulo e viene caricato on demand. Se non ci sono app installate tramite un'installazione incrementale ADB, dispositivo non carica il driver del kernel.
Altrimenti, quando viene creato come parte del kernel dell'immagine, il driver viene sempre caricato. Questa implementazione è valida per Android 12 e versioni successive; può essere utilizzato con Android 11. Per informazioni sull'upgrade del driver del kernel ad Android 12, vedi Upgrade del driver del kernel.
Il driver del kernel fa parte di un sistema più grande per abilitare l'APK in streaming e le installazioni di app. OEM e fornitori non devono utilizzare l'esatto codice IncFS fornito nelle implementazioni di esempio. Tuttavia, per garantire un'esperienza coerente devi assicurarti che l'implementazione dell'API abbia un file system che ha funzionalità di lettura di file e lettura/scrittura di directory come definita nella documentazione relativa all'interfaccia dello spazio utente per FS incrementali.
Inoltre, le implementazioni devono avere opzioni di montaggio e file speciali che corrispondano dal punto di vista funzionale all'implementazione di esempio IncFS.
Di seguito sono elencate le modifiche necessarie per l'implementazione:
- Configura la macchina di sviluppo per creare il kernel.
- Scegli come target il kernel comune dal ramo
common-android-mainline
.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- Verifica che le seguenti modifiche necessarie per IncFS siano nel pagamento filiale:
- 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:+fs+incrementale:%2522+ramo:android-mainline+status:merg
- Aggiungi
CONFIG_INCREMENTAL_FS=y
o solo per Android 11,CONFIG_INCREMENTAL_FS=m
in fondo al filedefconfig
. Per visualizzare un esempio, fai clic su uno dei link di seguito: - Crea il kernel
- Incorpora il kernel nella build dell'immagine del dispositivo Android.
- Per il dispositivo Android di destinazione, aggiungi una delle seguenti opzioni specifiche del fornitore
righe della proprietà di sistema al file
device.mk
(facoltativo nei dispositivi con Android 12 e versioni successive): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Guarda i file
device.mk
di esempio per l'emulatore Android e Pixel 4. - Solo per Android 11: se utilizzi
CONFIG_INCREMENTAL_FS=m
, aggiungi le regole SE Linux. 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;
-
file.te
: ad esempio, vedi questo filefile.te
.) - Driver del file system incrementale
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
: ad esempio, vedi questo filefile_contents
. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
Se utilizzi CONFIG_INCREMENTAL_FS=y
, aggiungi il file con
uno di questi:
Se utilizzi CONFIG_INCREMENTAL_FS=m
(solo per Android 11),
aggiungi il file con uno dei seguenti elementi:
Crea e aggiungi un file vold.te
al tuo dispositivo
Cartella /system/sepolicy/vendor
con i seguenti contenuti:
Consenti di caricare il driver incrementale del file system:
Aggiungi le seguenti regole SE Linux al file file.te
esistente
trovato nella tua cartella /system/sepolicy/vendor
:
Aggiungi le seguenti regole SE Linux all'elemento file_contents
esistente
file trovato nella tua cartella /system/sepolicy/vendor
:
Upgrade del driver kernel
I dispositivi che eseguono l'upgrade ad Android 12 potrebbero includere una versione precedente di IncFS conducente. Per questi dispositivi, AOSP consiglia di aggiornare il driver IncFS in la versione corrente (in questo caso la v2) per i seguenti motivi:
- La versione rilasciata con Android 11 è l'implementazione iniziale di IncFS, destinato solo al supporto dell'installazione ADB.
- Android 12 utilizza il driver IncFS per le installazioni di streaming di giochi Play, che richiede le nuove funzionalità e ottimizzazioni di IncFS v2 per un utente migliore un'esperienza senza intervento manuale.
- La versione 1 supporta lo streaming dei giochi, ma lo fa con penalità per le prestazioni e l'utilizzo di batteria, CPU e RAM è maggiore rispetto alla versione 2.
- V2 offre un'esperienza utente migliorata per lo streaming, con animazioni di avanzamento fluide, report precisi sull'utilizzo dello spazio su disco e prevenzione dello streaming di app di terze parti delle interferenze.
Per aggiornare il driver IncFS nel kernel, applica le seguenti patch sia kernel 4.14 o kernel 4.19:
- Patch del kernel 4.14
- Patch del kernel 4.19
Per tutte le altre versioni del kernel personalizzate, porta uno dei set di patch. Loro
interessano solo la directory fs/incfs
e si applicano in modo pulito
il codice v1 esistente.
- Correzione del kernel 4.14 al driver v1
- Correzione del kernel 4.19 al drivr v1
- Correzione del kernel 5.4 al driver v1
Continua a utilizzare il driver IncFS come l'originale, ma ora ha eseguito l'upgrade di Android 11, come parte integrata dell'immagine kernel, o come modulo separato. Non modificare la scheda di sistema o la proprietà del sistema configurazione.
I nuovi dispositivi che utilizzano un'immagine del kernel GKI scaricano il driver IncFS più recente (v2) automaticamente, configurato come parte dell'immagine kernel. Questa operazione non richiede passaggi aggiuntivi.
La configurazione del modulo caricabile è stata deprecata in Android 12 e non è supportata per i nuovi dispositivi. È consentito solo per gli upgrade o per un fornitore l'immagine si blocca quando nel kernel originale era già stata creata come modulo.
Implementazioni di riferimenti
Questa implementazione può essere considerata come parte di un'immagine del kernel oppure (per solo Android 11) come modulo caricabile.
Modulo caricabile (dispositivo Pixel 4)- .
- Aggiungi valori predefiniti di moduli del kernel
- Aggiungi e abilita la modifica della proprietà di sistema del modulo del kernel sul dispositivo
- Aggiornare le regole SE Linux
Convalida e test
Convalida l'implementazione utilizzando i test delle unità di funzionalità, CTS e GTS.
CTS
Utilizza
CtsIncrementalInstallHostTestCases
.
GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Testa IncFS
- Configura un ambiente di sviluppo.
- Completa le attività di implementazione descritte nella sezione relativa all'implementazione.
- Esegui i seguenti test manuali:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Testa IncFS con l'SDK per Android (ADB e apksigner)
- Configura un ambiente di sviluppo.
- Completa le attività di implementazione descritte nella sezione relativa all'implementazione.
- Esegui il flashing della build su un emulatore o un dispositivo fisico di destinazione.
- Genera o ottieni un APK esistente.
- Crea una chiave di firma di debug.
- Firma l'APK con formato di firma v4 dalla cartella
build-tools
../apksigner sign --ks debug.keystore game.apk
- Installa l'APK sul dispositivo da
platform-tools
../adb install game.apk
![Esempio di installazione](https://source.android.com/static/docs/core/architecture/images/incfs-incremental-install.png?authuser=0&hl=it)
Individua questi test
- /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