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

Sistema de arquivos incremental

O módulo de kernel Incremental File System (IncFS) introduzido no Android 11 permite que o sistema operacional Android receba APKs transmitidos pelo Android Debug Bridge (ADB).

Este módulo de kernel autocontido cria um novo sistema de arquivos virtual que fica no topo do sistema de arquivos Android existente. Isso complementa as mudanças na estrutura e no SDK para permitir que os desenvolvedores de aplicativos e jogos implantem grandes APKs por meio do ADB em um dispositivo com Android 11 ou superior.

A mudança do kernel permite um novo APK Assinatura formato v4 Esquema e suportes mudanças estruturais Android no Android Package Manager, novos serviços do sistema, e muda para o ADB.

Implementação

Para implementar o IncFS, os OEMs e os fabricantes de SoC devem adicionar um novo driver de kernel às compilações de seus dispositivos Android.

Para Android 11 somente, se o driver de kernel é construído como um módulo que é carregado por demanda. Se não houver nenhum aplicativo instalado por meio de uma instalação incremental ADB, o dispositivo não carrega o driver do kernel.

Caso contrário, quando ele é compilado como parte da imagem do kernel, o driver está sempre carregado. Esta implementação é válida para Android 12 e superior, e pode ser usado com o Android 11. Para obter informações sobre como atualizar o driver do kernel para Android 12, consulte atualizar Kernel motorista .

O driver do kernel faz parte de um sistema maior para permitir instalações de APK em fluxo. OEMs e fornecedores 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, você deve garantir a implementação API tem um sistema de arquivo que tem a funcionalidade de leitura de arquivos e diretórios funcionalidade de leitura-escrita, tal como definido na interface de Userspace para Incremental FS documentação.

Além disso, implementações devem ter opções de montagem e arquivos especiais que funcionalmente correspondem aos IncFS implementação de exemplo.

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

  1. Configurar a máquina de desenvolvimento para construir o kernel.
  2. Alvo o kernel comum a partir do common-android-mainline ramo.
    repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
    repo sync
  3. Confirme se as seguintes alterações necessárias para IncFS estão na verificação da filial:
  4. Anexar quer CONFIG_INCREMENTAL_FS=y ou para Android 11 única, CONFIG_INCREMENTAL_FS=m na parte inferior do defconfig arquivo. Para ver um exemplo, clique em um dos links abaixo:
  5. Construa o kernel
  6. Incorporar o kernel na criação de imagem dispositivo Android .
  7. Para o seu dispositivo Android alvo, anexar uma das seguintes linhas do sistema de propriedade específicos do fornecedor para o seu device.mk arquivo (opcional no Android 12 e superior):
  8. Quando você estiver usando CONFIG_INCREMENTAL_FS=y , anexe o arquivo com um destes:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=yes

    Quando você estiver usando CONFIG_INCREMENTAL_FS=m (apenas para Android 11), anexar o arquivo com um destes:

    • PRODUCT_PROPERTY_OVERRIDES += \
    • ro.incremental.enable=module:/vendor/lib/modules/incrementalfs.ko
  9. Veja o exemplo device.mk arquivos para o emulador e Android Pixel 4 .
  10. Para Android 11 apenas: Se você estiver usando CONFIG_INCREMENTAL_FS=m , adicione Regras Linux SE .
  11. Criar e adicionar um vold.te arquivo para o seu dispositivo /system/sepolicy/vendor pasta com o seguinte conteúdo:

    • vold.te

    Permita que carregue 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;

    Acrescentar as seguintes regras SE Linux para o existente file.te arquivo encontrado no seu /system/sepolicy/vendor pasta:

    • file.te arquivo - Para um exemplo veja este file.te arquivo ).
    • Driver incremental do sistema de arquivos
    • type vendor_incremental_module, vendor_file_type, file_type;

    Acrescentar as seguintes regras SE Linux para existentes file_contents arquivo encontrado no seu /system/sepolicy/vendor pasta:

    • file_contents arquivo - Para um exemplo, consulte este file_contents arquivo.
    • # Incremental file system driver
    • /vendor/lib/modules/incrementalfs\.ko
    • u:object_r:vendor_incremental_module:s0

Atualização do driver do kernel

Dispositivos que atualizam para o Android 12 podem incluir uma versão mais antiga do driver IncFS. Para esses dispositivos, o AOSP recomenda que você atualize o driver IncFS para a versão atual (neste caso v2) pelos seguintes motivos:

  • A versão lançada com o Android 11 é a implementação inicial do IncFS, voltada apenas para suporte de instalação ADB.
  • O Android 12 usa o driver IncFS para instalações de streaming de jogos Play, o que requer os novos recursos e otimizações do IncFS v2 para uma melhor experiência do usuário.
  • A V1 oferece suporte para streaming de jogos, mas com penalidades de desempenho e maior uso de bateria, CPU e RAM do que a v2.
  • O V2 fornece UX aprimorado para streaming, com animações de progresso suave, relatórios precisos de uso de espaço em disco e prevenção de interferência de streaming de aplicativos de terceiros.

Para atualizar o driver IncFS em seu kernel, aplique os seguintes patches para o kernel 4.14 ou kernel 4.19:

Para todas as outras versões do kernel personalizado, transporte um dos patchsets. Eles só afetam a fs/incfs diretório e aplicar de forma limpa ao código v1 existente.

Continue usando o driver IncFS da mesma maneira que para o original, mas agora com o Android 11 atualizado, como uma parte integrada da imagem do kernel ou como um módulo separado. Não altere a placa do sistema ou a configuração das propriedades do sistema.

Novos dispositivos usando uma imagem do kernel GKI obtêm o driver IncFS mais recente (v2) automaticamente, configurado como parte da imagem do kernel. Isso não requer etapas adicionais.

A configuração do módulo carregável foi descontinuada no Android 12 e não é compatível com novos dispositivos. Só é permitido para as atualizações ou para o congelamento de imagem de um fornecedor quando o kernel original já o tinha compilado como um módulo.

Implementações de referência

Esta implementação pode ser considerado como parte de uma imagem de kernel, ou (para Android apenas 11) como um módulo carregável.

Módulo carregável (dispositivo Pixel 4) Emulador Android (como parte da imagem do kernel)

Validação e teste

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

CTS

Use CtsIncrementalInstallHostTestCases .

GTS

atest GtsIncrementalInstallTestCases :

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

Teste o IncFS

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

Como testar IncFS com Android SDK (ADB e apksigner)

  • Configurar 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.
  • Criar uma chave de assinatura de depuração .
  • Assinar o APK com formato de assinatura v4 do build-tools pasta.
    ./apksigner sign --ks debug.keystore game.apk
  • Instale o APK no dispositivo do platform-tools pasta.
    ./adb install game.apk
Exemplo de instalação
Figura 1: Exemplo de Instalação

Localize esses testes