El módulo de kernel del sistema de archivos incrementales (IncFS) se introdujo en Android 11. Permite que el SO Android reciba APKs transmitidos a través de Android Debug Bridge (ADB).
Este módulo de kernel independiente crea un nuevo sistema de archivos virtuales que se ubica además del sistema de archivos existente de Android. Esto complementa los cambios y un SDK para permitir que los desarrolladores de apps y juegos implementen APK grandes a través de el adb a un dispositivo que ejecute Android 11 o una versión posterior.
El cambio de kernel habilita un nuevo Formato del esquema de firma de APK v4 y admite cambios en el framework de Android en Android Package Manager, los nuevos servicios del sistema y los cambios en ADB.
Implementación
Para implementar IncFS, los OEM y los fabricantes de SoC deben agregar un nuevo kernel para las compilaciones de sus dispositivos Android.
Solo para Android 11, si el controlador de kernel se compila como un módulo que se carga a pedido. Si no hay apps instaladas a través de una instalación incremental de ADB, el el dispositivo no carga el controlador de kernel.
De lo contrario, cuando se compila como parte del kernel el controlador siempre está cargado. Esta implementación es válida para Android 12 y versiones posteriores, y se puede usar con Android 11 Para para obtener más información sobre la actualización del controlador de kernel a Android 12, consulta Actualización del controlador de kernel.
El controlador de kernel es parte de un sistema más grande para permitir la transmisión de APK instalaciones. Los OEM y los proveedores no necesitan usar el código IncFS exacto que se proporciona en las implementaciones de muestra. Sin embargo, para garantizar una experiencia coherente en debe asegurarse de que la implementación de la API tenga un sistema de archivos que tiene la funcionalidad de lectura de archivos y de lectura y escritura de directorios, como definido en la documentación Interfaz de espacio de usuario para FS incremental.
Además, las implementaciones deben tener opciones de activación y archivos especiales que coinciden funcionalmente con la implementación de muestra de IncFS.
A continuación, se enumeran los cambios necesarios para la implementación:
- Configura la máquina de desarrollo para compilar el kernel.
- Orienta el kernel común desde la rama
common-android-mainline
.repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
repo sync
- Valida que los siguientes cambios necesarios para IncFS se encuentren en confirmación de la compra en 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
- Agrega
CONFIG_INCREMENTAL_FS=y
o para Android 11 únicamente yCONFIG_INCREMENTAL_FS=m
en la parte inferior del archivodefconfig
. Para ver un ejemplo, haz clic en uno de los siguientes vínculos: - Cómo compilar el kernel
- Incorpora el kernel a la compilación de imágenes de dispositivos Android.
- En tu dispositivo Android de destino, agrega uno de los siguientes servicios específicos del proveedor:
líneas de propiedad del sistema a tu archivo
device.mk
(opcional en dispositivos que se lanzan con Android 12 y versiones posteriores): PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=yes
PRODUCT_PROPERTY_OVERRIDES += \
ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
- Consulta los archivos
device.mk
de ejemplo para Android Emulator y Pixel 4: - Solo para Android 11: Si usas
CONFIG_INCREMENTAL_FS=m
, agrega reglas de 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
(para ver un ejemplo, consulta este archivofile.te
). - Controlador del sistema de archivos incremental
type vendor_incremental_module, vendor_file_type, file_type;
-
Archivo
file_contents
: Para ver un ejemplo, consulta este archivofile_contents
. # Incremental file system driver
/vendor/lib/modules/incrementalfs\.ko
u:object_r:vendor_incremental_module:s0
Cuando uses CONFIG_INCREMENTAL_FS=y
, agrega el archivo con
una de las siguientes:
Cuando usas CONFIG_INCREMENTAL_FS=m
(solo para Android 11),
adjunta al archivo una de las siguientes opciones:
Crea un archivo vold.te
y agrégalo a tu dispositivo
Carpeta /system/sepolicy/vendor
con el siguiente contenido:
Permite que cargue el controlador incremental del sistema de archivos:
Agrega las siguientes reglas de SE Linux al archivo file.te
existente.
encontrados en tu carpeta /system/sepolicy/vendor
:
Agrega las siguientes reglas de SE Linux a los file_contents
existentes
que se encuentra en la carpeta /system/sepolicy/vendor
:
Actualización del controlador de kernel
Los dispositivos que se actualizan a Android 12 pueden incluir una versión anterior de IncFS controlador. Para esos dispositivos, AOSP recomienda que actualices el controlador IncFS a la versión actual (en este caso, v2) por los siguientes motivos:
- La versión lanzada con Android 11 es la implementación inicial de IncFS, destinado solo a la asistencia para la instalación de ADB.
- Android 12 usa el controlador IncFS para transmitir instalaciones de Play Juegos. lo que requiere las nuevas funciones y optimizaciones de IncFS v2 para un mejor usuario una experiencia fluida a los desarrolladores.
- V1 admite la transmisión de juegos, pero lo hace con penalizaciones de rendimiento y más uso de batería, CPU y RAM que en la versión v2.
- V2 ofrece una UX mejorada para la transmisión, con animaciones de progreso fluidas, informes precisos sobre el uso del espacio en el disco y prevención de transmisiones de apps de terceros para evitar interferencias.
Para actualizar el controlador IncFS en tu kernel, aplica los siguientes parches para kernel 4.14 o kernel 4.19:
- Parche de kernel 4.14
- Parche de kernel 4.19
Para todas las demás versiones personalizadas de kernel, realiza la portabilidad de uno de los conjuntos de parches. Ellas
solo afectan el directorio fs/incfs
y se aplican de forma clara al directorio
código de la v1 existente.
- Corrección del kernel 4.14 en el controlador de la versión 1
- Corrección del kernel 4.19 en el controlador de v1
- Corrección del kernel 5.4 en el controlador de la versión 1
Seguir usando el controlador IncFS de la misma manera que en el original, pero ahora actualizó Android 11, ya sea como parte integrada de la imagen del kernel, o como un módulo independiente. No cambies la placa del sistema ni la propiedad del sistema. configuración.
Los dispositivos nuevos que usan una imagen de kernel de GKI obtienen el controlador IncFS más reciente (v2). automáticamente y se configura como parte de la imagen del kernel. Esto no requiere pasos adicionales.
La configuración del módulo cargable dejó de estar disponible en Android 12 y no se admite compatible con dispositivos nuevos. Solo se permite para actualizaciones o para proveedores se bloquea la imagen cuando el kernel original ya la tenía compilado como módulo.
Implementaciones de referencia
Esta implementación puede considerarse como parte de una imagen de kernel o (para (solo Android 11)) como módulo cargable.
Módulo cargable (dispositivo Pixel 4)- Cómo agregar compilaciones previas del módulo de kernel
- Cómo agregar y habilitar el cambio de propiedad del sistema del módulo de kernel en el dispositivo
- Actualiza las reglas de SE de Linux
Validación y prueba
Valida la implementación con pruebas de unidades de funciones, CTS y GTS.
CTS
Utiliza
CtsIncrementalInstallHostTestCases
.
GTS
atest GtsIncrementalInstallTestCases
:
/gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java
Prueba el IncFS
- Configura un entorno de desarrollo.
- Completa las tareas de implementación que se describen en la sección correspondiente.
- Ejecuta las siguientes pruebas manuales:
mmma system/incremental_delivery/incfs/tests
atest libincfs-test
atest IncrementalServiceTest
atest PackageManagerShellCommandTest
PackageManagerShellCommandIncrementalTest
Prueba IncFS con el SDK de Android (ADB y apksigner)
- Configurar un entorno de desarrollo.
- Completa las tareas de implementación que se describen en la sección correspondiente.
- Escribe la compilación en la memoria flash de un emulador o dispositivo físico de destino.
- Obtén un APK existente o genera uno.
- Crea una clave de firma de depuración.
- Firma el APK con el formato de firma v4 de la carpeta
build-tools
../apksigner sign --ks debug.keystore game.apk
- Instala el APK en el dispositivo desde la
platform-tools
. carpeta../adb install game.apk
Ubica 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