El módulo de kernel Incremental File System (IncFS) introducido en Android 11 permite que el sistema operativo Android reciba APK transmitidos a través de Android Debug Bridge (ADB).
Este módulo de kernel autónomo crea un nuevo sistema de archivos virtual que se ubica en la parte superior del sistema de archivos de Android existente. Esto complementa los cambios en el marco y el SDK para permitir que los desarrolladores de aplicaciones y juegos implementen APK grandes a través del ADB en un dispositivo que se ejecute en Android 11 o superior.
El cambio del núcleo permite un nuevo APK Firma Esquema formato v4 y soportes cambios estructurales Android en el Gestor de paquetes de Android, servicios nuevos sistemas, y cambia a la ADB.
Implementación
Para implementar IncFS, los fabricantes de OEM y SoC deben agregar un nuevo controlador de kernel a las compilaciones de sus dispositivos Android.
Para Android 11 solamente, si el controlador del núcleo está construido como un módulo que se carga bajo demanda. Si no hay ninguna aplicación instalada a través de una instalación incremental de ADB, el dispositivo no carga el controlador del kernel.
De lo contrario, cuando se compila como parte de la imagen del kernel, el controlador siempre se carga. Esta aplicación es válida para Android 12 y más alto, y se puede utilizar con Android 11. Para obtener información acerca de la actualización del controlador del núcleo de Android 12, ver actualización del núcleo conductor .
El controlador del kernel es parte de un sistema más grande para permitir instalaciones de APK transmitidas. Los fabricantes de equipos originales y los proveedores no necesitan utilizar el código IncFS exacto que se proporciona en las implementaciones de muestra. Sin embargo, para garantizar una experiencia consistente a través de los dispositivos, se debe asegurar la implementación de la API tiene un sistema de archivo que tiene la funcionalidad y el directorio de leer el archivo-funcionalidad de lectura y escritura como se define en la interfaz de espacio de usuario para incremental FS documentación.
Además, las implementaciones deben tener opciones de montaje y archivos especiales que responden funcionalmente los IncFS implementación de ejemplo.
A continuación, se enumeran los cambios necesarios para la implementación:
- Configurar el equipo de desarrollo para construir el núcleo.
- Objetivo para el núcleo común de la
common-android-mainline
rama.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- Valide que los siguientes cambios necesarios para IncFS estén en la caja de la sucursal:
- 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
- Anexar ya sea
CONFIG_INCREMENTAL_FS=y
o para Android 11 solamente,CONFIG_INCREMENTAL_FS=m
en la parte inferior de ladefconfig
archivo. Para ver un ejemplo, haga clic en uno de los enlaces siguientes: - Construye el kernel
- Incrustar el núcleo en el Android generación de imagen de dispositivo .
- Para su objetivo dispositivo Android, anexar una de las siguientes líneas sistema de propiedad específicos del proveedor a su
device.mk
archivo (opcional en Android 12 y superior): -
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=yes
-
PRODUCT_PROPERTY_OVERRIDES += \
-
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Vea el ejemplo
device.mk
archivos para el emulador y Android Pixel 4 . - Para Android 11 solamente: Si está utilizando
CONFIG_INCREMENTAL_FS=m
, añadir reglas 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;
-
file.te
archivo - Véase un ejemplo en estefile.te
archivo ). - Controlador del sistema de archivos incremental
-
type vendor_incremental_module, vendor_file_type, file_type;
-
file_contents
archivo - Para un ejemplo, vea estefile_contents
archivo. -
# Incremental file system driver
-
/vendor/lib/modules/incrementalfs\.ko
-
u:object_r:vendor_incremental_module:s0
Cuando se está usando CONFIG_INCREMENTAL_FS=y
, añada el archivo con uno de estos:
Cuando se está usando CONFIG_INCREMENTAL_FS=m
(para Android 11 solamente), anexar el archivo con uno de estos:
Crear y añadir un vold.te
archivo al dispositivo /system/sepolicy/vendor
carpeta con el siguiente contenido:
Permita que cargue el controlador del sistema de archivos incremental:
Anexar las siguientes reglas SE Linux para el vigente file.te
archivo encontrado en su /system/sepolicy/vendor
carpeta:
Anexar las siguientes reglas SE Linux existentes a file_contents
archivo encontrado en su /system/sepolicy/vendor
carpeta:
Actualización del controlador del kernel
Los dispositivos que se actualizan a Android 12 pueden incluir una versión anterior del controlador IncFS. Para esos dispositivos, AOSP recomienda que actualice el controlador IncFS a la versión actual (en este caso v2) por estas razones:
- La versión lanzada con Android 11 es la implementación inicial de IncFS, dirigida solo para el soporte de instalación de ADB.
- Android 12 usa el controlador IncFS para las instalaciones de transmisión de juegos de Play, lo que requiere las nuevas funciones y optimizaciones de IncFS v2 para una mejor experiencia de usuario.
- V1 admite la transmisión de juegos, pero lo hace con penalizaciones de rendimiento y mayor uso de batería, CPU y RAM que v2.
- V2 proporciona una experiencia de usuario mejorada para la transmisión, con animaciones de progreso fluidas, informes precisos sobre el uso del espacio en disco y prevención de interferencias de transmisión de aplicaciones de terceros.
Para actualizar el controlador IncFS en su kernel, aplique los siguientes parches para kernel 4.14 o kernel 4.19:
- Kernel 4,14 parche
- Kernel 4,19 parche
Para todas las demás versiones de kernel personalizadas, transfiera uno de los conjuntos de parches. Ellos sólo afectan a la fs/incfs
directorio y se aplican limpiamente al código v1 existente.
- Kernel 4.14 se corrige al controlador v1
- Kernel 4.19 arreglado para v1 drivr
- Kernel 5.4 arreglo al controlador v1
Continúe usando el controlador IncFS de la misma manera que para el Android 11 original pero ahora actualizado, ya sea como una parte integrada de la imagen del kernel o como un módulo separado. No cambie la placa del sistema ni la configuración de las propiedades del sistema.
Los dispositivos nuevos que utilizan una imagen del kernel de GKI obtienen automáticamente el controlador IncFS más reciente (v2), configurado como parte de la imagen del kernel. Esto no requiere pasos adicionales.
La configuración del módulo cargable quedó obsoleta en Android 12 y no es compatible con dispositivos nuevos. Solo está permitido para las actualizaciones o para la congelación de la imagen de un proveedor cuando el kernel original ya lo tenía construido como módulo.
Implementaciones de referencia
Esta aplicación puede ser considerada ya sea como parte de una imagen del núcleo, o (para Android 11 solamente) como módulo.
Módulo cargable (dispositivo Pixel 4)- Agregar precompilaciones de módulos de kernel
- Agregar y habilitar el cambio de propiedad del sistema del módulo del kernel en el dispositivo
- Actualizar las reglas de SE Linux
Validación y prueba
Valide la implementación utilizando Feature Unit Tests, CTS y GTS.
CTS
UsoCtsIncrementalInstallHostTestCases
.GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Prueba el IncFS
- Configurar un entorno de desarrollo.
- Complete las tareas de implementación descritas en la sección de implementación.
- Ejecutar las siguientes pruebas manuales:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Cómo probar IncFS con Android SDK (ADB y apksigner)
- Configurar un entorno de desarrollo.
- Complete las tareas de implementación descritas en la sección de implementación.
- Actualice la compilación en un dispositivo físico o emulador de destino.
- Genere u obtenga un APK existente.
- Crear una clave de firma de depuración .
- Firmar el archivo APK con formato de firma v4 del
build-tools
carpeta../apksigner sign --ks debug.keystore game.apk
- Instalar el APK en el dispositivo de la
platform-tools
la carpeta../adb install game.apk

Ubique estas pruebas
- / 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