Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Sistema de archivos incremental

Incremental File System (IncFS) es un módulo del kernel que permite al sistema operativo Android recibir APK transmitidos a través de Android Debug Bridge (ADB). El módulo de kernel autónomo crea un nuevo sistema de archivos virtual que se asienta sobre el sistema de archivos Android existente y complementa los cambios en el marco y SDK de Android 11 para permitir que los desarrolladores de aplicaciones y juegos implementen APK grandes a través de ADB en un dispositivo con Android 11.

El cambio de kernel habilita un nuevo formato APK Signature Scheme v4 , admite cambios en el marco de Android en Android Package Manager, nuevos servicios del sistema y cambios en Android Debug Bridge.

Implementación

Los fabricantes de OEM y SoC deben agregar un nuevo controlador de kernel a las compilaciones de sus dispositivos Android. Si el controlador del kernel está construido como un módulo, se carga a pedido. Si no se instala ninguna aplicación mediante la instalación incremental de ADB, el dispositivo no carga el controlador del kernel. Al compilar como parte de la imagen del núcleo, el controlador siempre se carga.

El controlador del kernel es parte de un sistema más grande para permitir instalaciones de APK transmitidas. Los socios no necesitan utilizar el código IncFS exacto proporcionado en las implementaciones de muestra. Sin embargo, para garantizar una experiencia consistente en todos los dispositivos, los socios deben asegurarse de que la implementación de la API tenga un sistema de archivos que tenga la funcionalidad de lectura de archivos y la funcionalidad de lectura / escritura de directorios como se define aquí .

Además, las implementaciones de socios deben tener opciones de montaje y archivos especiales que coincidan funcionalmente con la implementación de muestra de IncFS.

A continuación se describen los cambios necesarios para la implementación:

  • Configure la máquina de desarrollo para compilar el kernel.
  • Apunte al kernel común de la rama common-android-mainline .
    • $ 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:
  • CONFIG_INCREMENTAL_FS=y línea CONFIG_INCREMENTAL_FS=m al final del archivo defconfig . Se pueden encontrar ejemplos en los siguientes enlaces:
  • Construir kernel
  • Incruste el kernel en la compilación de la imagen del dispositivo Android .
  • Para su dispositivo Android de destino, agregue una de las siguientes líneas de propiedad del sistema específicas del proveedor a su archivo device.mk :
    • En caso de que esté usando CONFIG_INCREMENTAL_FS=y
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes
    • En caso de que esté usando CONFIG_INCREMENTAL_FS=m
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
    • Hay archivos device.mk de ejemplo para el emulador de Android yPixel 4 .
  • Solo si usa CONFIG_INCREMENTAL_FS=m , agregue reglas de SE Linux .
    • Cree y agregue un archivo vold.te carpeta de su dispositivo /system/sepolicy/vendor con el siguiente contenido:
      • vold.te
      • Permitir cargar el controlador del sistema de archivos incremental
      • allow vold self:capability sys_module;
      • allow vold vendor_incremental_module:file r_file_perms;
      • allow vold vendor_incremental_module:system module_load;
    • Agregue las siguientes reglas de SE Linux al archivo file.te existente que se encuentra en su carpeta /system/sepolicy/vendor :
      • Ejemplo de archivo file.te
      • Controlador del sistema de archivos incremental
      • type vendor_incremental_module, vendor_file_type, file_type;
    • Agregue las siguientes reglas de SE Linux al archivo file_contents existente que se encuentra en su carpeta /system/sepolicy/vendor :
      • Ejemplo de archivo file_contents
      • # Incremental file system driver
  • /vendor/lib/modules/incrementalfs\.ko
  • u:object_r:vendor_incremental_module:s0

Implementaciones de referencia

Hay dos formas de abordar esta implementación, ya sea como un módulo cargable o como parte de una imagen del kernel.

Validación y prueba

Valide la implementación utilizando Feature Unit Tests, CTS y GTS.

CTS

GTS

  • atest GtsIncrementalInstallTestCases
    • /gts-tests/tests/packageinstaller/incremental/src/com/google/android/packageinstaller/incremental/gts/IncrementalInstallerTest.java

Prueba de los IncF (sistema de archivos incrementales)

  • Configura un entorno de desarrollo.
  • Complete las tareas de implementación descritas en la sección de implementación.
  • Ejecute las siguientes pruebas manuales:
    • $ mmma system/incremental_delivery/incfs/tests
    • $ atest libincfs-test
    • $ atest IncrementalServiceTest
    • $ atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest

Prueba de IncFS con Android SDK (ADB y apksigner)

  • Configura 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 una apk existente.
  • Cree una clave de firma de depuración .
  • Firme apk con formato de firma v4 desde la carpeta build-tools .
    • $ ./apksigner sign --ks debug.keystore game.apk
  • Instale apk en el dispositivo desde la carpeta de platform-tools de la platform-tools .
    • $ ./adb install game.apk
Ejemplo de instalación
Figura 1 : Ejemplo de instalación

¿Dónde se pueden encontrar estas pruebas?