O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Sistema de arquivos incremental

Incremental File System (IncFS) é um módulo de kernel que permite que o sistema operacional Android receba APKs transmitidos pelo Android Debug Bridge (ADB). O módulo de kernel independente cria um novo sistema de arquivos virtual que fica em cima do sistema de arquivos Android existente e complementa as mudanças na estrutura e SDK do Android 11 para permitir que desenvolvedores de aplicativos e jogos implantem grandes APKs por meio de ADB em um dispositivo Android 11.

A mudança do kernel habilita um novo formato APK Signature Scheme v4 , suporta mudanças de estrutura Android no Android Package Manager, novos serviços de sistema e mudanças no Android Debug Bridge.

Implementação

Os fabricantes de OEMs e SoC precisam adicionar um novo driver de kernel às compilações de seus dispositivos Android. Se o driver do kernel for construído como um módulo, ele será carregado sob demanda. Se nenhum aplicativo for instalado por meio da instalação incremental ADB, o dispositivo não carregará o driver do kernel. Ao compilar como parte da imagem do kernel, o driver está sempre carregado.

O driver do kernel faz parte de um sistema maior para permitir instalações de APK em fluxo. Os parceiros não precisam usar o código IncFS exato fornecido nas implementações de exemplo. No entanto, para garantir uma experiência consistente em todos os dispositivos, os parceiros devem garantir que a implementação da API tenha um sistema de arquivos que tenha funcionalidade de leitura de arquivo e funcionalidade de leitura / gravação de diretório conforme definido aqui .

Além disso, as implementações de parceiros devem ter opções de montagem e arquivos especiais que correspondam funcionalmente à implementação de amostra IncFS.

O seguinte descreve as mudanças necessárias para implementação:

  • Configure a máquina de desenvolvimento para construir o kernel.
  • Almeje o kernel comum a partir do branch common-android-mainline .
    • $ repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    • $ repo sync
  • Valide se as seguintes alterações necessárias para IncFS estão no checkout da filial:
  • Anexe CONFIG_INCREMENTAL_FS=y ou CONFIG_INCREMENTAL_FS=m linha ao final do arquivo defconfig . Os exemplos podem ser encontrados nos seguintes links:
  • Kernel de construção
  • Integre o kernel na construção da imagem do dispositivo Android .
  • Para o seu dispositivo Android de destino, anexe uma das seguintes linhas de propriedade do sistema específicas do fornecedor ao arquivo device.mk :
    • Caso você esteja usando CONFIG_INCREMENTAL_FS=y
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes
    • Caso você esteja usando CONFIG_INCREMENTAL_FS=m
    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
    • Existem exemplos de arquivos device.mk para o emulador do Android ePixel 4 .
  • Apenas se estiver usando CONFIG_INCREMENTAL_FS=m , Adicionar Regras SE Linux .
    • Crie e adicione um arquivo vold.te à pasta device /system/sepolicy/vendor com o seguinte conteúdo:
      • vold.te
      • Permitir carregar o driver do sistema de arquivos incremental
      • allow vold self:capability sys_module;
      • allow vold vendor_incremental_module:file r_file_perms;
      • allow vold vendor_incremental_module:system module_load;
    • Anexe as seguintes regras do SE Linux ao arquivo file.te existente encontrado em sua pasta /system/sepolicy/vendor :
      • Exemplo de arquivo file.te
      • Driver incremental do sistema de arquivos
      • type vendor_incremental_module, vendor_file_type, file_type;
    • Anexe as seguintes regras do SE Linux ao arquivo file_contents existente encontrado em sua pasta /system/sepolicy/vendor :
      • Exemplo de arquivo file_contents
      • # Incremental file system driver
  • /vendor/lib/modules/incrementalfs\.ko
  • u:object_r:vendor_incremental_module:s0

Implementações de referência

Existem duas maneiras de abordar essa implementação, como um módulo carregável ou como parte de uma imagem do kernel.

Validação e teste

Valide a implementação usando testes de unidade de recurso, CTS e GTS.

CTS

GTS

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

Testando os IncFs (Sistema de Arquivos Incremental)

  • Configure um ambiente de desenvolvimento.
  • Conclua as tarefas de implementação descritas na seção de implementação.
  • Execute os seguintes testes manuais:
    • $ mmma system/incremental_delivery/incfs/tests
    • $ atest libincfs-test
    • $ atest IncrementalServiceTest
    • $ atest PackageManagerShellCommandTest PackageManagerShellCommandIncrementalTest

Testando IncFS com Android SDK (ADB e apksigner)

  • Configure um ambiente de desenvolvimento.
  • Conclua as tarefas de implementação descritas na seção de implementação.
  • Atualize a compilação em um dispositivo físico ou emulador de destino.
  • Gere ou obtenha um apk existente.
  • Crie uma chave de assinatura de depuração .
  • Assine o apk com formato de assinatura v4 da pasta de build-tools .
    • $ ./apksigner sign --ks debug.keystore game.apk
  • Instale o apk no dispositivo a partir platform-tools pasta de platform-tools da platform-tools .
    • $ ./adb install game.apk
Exemplo de instalação
Figura 1 : Exemplo de instalação

Onde esses testes podem ser encontrados?