Partições do produto

O Android 9 e superior inclui suporte para criar partições de product usando o sistema de compilação do Android. Anteriormente, o Android 8.x impunha a separação de componentes específicos do SoC da partição do system para a partição do vendor sem dedicar espaço para componentes específicos do OEM criados a partir do sistema de compilação do Android. O Android 9 e superior fornece permissões adicionais e recursos de lista de permissões que se aplicam a priv-apps em diferentes partições.

Sobre as partições do produto

Muitos OEMs personalizam a imagem do sistema AOSP para implementar seus próprios recursos, bem como os requisitos da operadora. No entanto, essas personalizações impossibilitam o uso de uma única imagem do sistema para vários SKUs de software. Cada imagem deve ser diferente para dar suporte às personalizações, como com diferentes localidades ou operadoras. O uso de uma partição de product separada para conter personalizações possibilita o uso de uma única imagem do sistema para vários SKUs de software. (A partição do system hospeda código genérico que pode ser compartilhado entre muitos SKUs de software). A partição do vendor continua a hospedar o código BSP específico do SoC que pode ser compartilhado entre vários dispositivos com base no SoC fornecido.

O uso de partições separadas tem algumas desvantagens, como gerenciar o espaço em disco (uma quantidade limitada de espaço deve permanecer reservada para crescimento futuro) e manter uma interface binária de aplicativo (ABI) estável entre as partições. Antes de decidir usar partições de product , considere sua implementação AOSP exclusiva e possíveis táticas de mitigação (como reparticionar um dispositivo durante uma atualização OTA) , o que não é feito pelo Google, mas é feito por alguns OEMs ). O particionamento dinâmico será uma boa solução para isso.

Partições e permissões do produto

No Android 9 e superior, uma alteração nas permissões e no processo de lista de permissões afeta a forma como você concede permissões de priv-apps em suas partições `product`. O arquivo permissions.xml deve residir na mesma partição que os priv-apps. Colocar um arquivo permissions.xml na partição do system para priv-apps não estende essas permissões para priv-apps na partição do product , mesmo que o primeiro seja uma extensão do último. Para obter detalhes sobre as permissões e os processos de lista de permissões, consulte Lista de permissões de permissões privilegiadas .

Legado /oem vs /produto

Temos dois tipos de atributos da partição do product , dependendo da aplicação da interface do produto . Além disso, a partição do product é diferente da partição oem herdada:

Partição Atributos
oem
  • Não atualizável; geralmente piscava uma vez na fábrica.
  • Construído por pequenas variações, como marca e cor. Ter diferentes conteúdos de partição oem não significa que o software do produto seja diferente.
  • A partição do system não depende da partição oem . (Ele usa a partição oem apenas quando um arquivo específico é encontrado lá).
  • Usa apenas a API pública na partição do system .
product
  • Atualizável
  • Juntamente com a imagem do sistema (eles são atualizados juntos)
  • Construído por produto ou famílias de produtos.
  • A partição do sistema pode depender da partição do product .
  • Pode usar APIs não públicas, pois são atualizadas simultaneamente.
product (interfaces impostas)
  • Atualizável
  • Desacoplado com a imagem do sistema.
  • Construído por produto ou famílias de produtos.
  • A partição do system não depende da partição do product .
  • Não pode usar APIs ocultas, mas usa apenas APIs públicas e de sistema na partição do system .

Por esses motivos, o Android 9 oferece suporte à partição do product , mantendo o suporte à partição oem herdada, para dispositivos que dependem dela. Para dissociar a partição do product da partição do system , o Android 11 é compatível com a aplicação de interfaces do product .

/componentes do produto

A partição do product contém os seguintes componentes:

  • Propriedades do sistema específicas do produto ( /product/build.prop )
  • RROs específicos do produto ( /product/overlay/*.apk )
  • Aplicativos específicos do produto ( /product/app/*.apk )
  • priv-apps específicos do produto ( /product/priv-app/*.apk )
  • Bibliotecas específicas do produto ( /product/lib/* )
  • Bibliotecas java específicas do produto ( /product/framework/*.jar )
  • Configurações do sistema Android Framework específicas do produto ( /product/etc/sysconfig/* e /product/etc/permissions/* )
  • Arquivos de mídia específicos do produto ( /product/media/audio/* )
  • Arquivos de bootanimation específicos do produto

Nenhuma imagem_personalizada

Você não pode usar custom_images . Eles não têm suporte para o seguinte:

  • Instalando módulos em um destino específico . custom_images suporte à cópia de artefatos em uma imagem, mas não pode instalar um módulo em uma partição específica especificando sua partição de destino como parte de uma regra de compilação.
  • Suporte logo . custom_images não pode ser compilado usando o sistema de compilação Soong.
  • Suporte de atualização OTA . custom_images são usadas como imagens de ROM de fábrica que não podem receber atualizações OTA.

Mantendo ABIs entre partições

A partição do product no Android 9 é uma extensão da partição do system . Há uma ABI fraca entre as partições do product e system , portanto, ambas devem ser atualizadas ao mesmo tempo, e a ABI deve ser baseada no SDK do sistema. Se o SDK do sistema não cobrir todas as superfícies de API entre product e o system , os OEMs deverão manter suas próprias ABIs entre as duas partições.

As partições do product e system podem ter dependência uma da outra. No entanto, os testes com a imagem genérica do sistema (GSI) devem funcionar corretamente sem a partição do product .

Quando as interfaces do product são impostas, a partição do product é desacoplada da partição do system . A partição do product usa apenas as interfaces permitidas da partição do system .

A partição do product não deve ter nenhuma dependência da partição do vendor . A interação direta entre as partições do product e do vendor é proibida. (Isso é imposto pela SEpolicy.)

Implementando partições de produtos

Antes de implementar uma nova partição de produto, revise as alterações de partição de produto relacionadas no AOSP . Em seguida, para configurar o product , inclua o seguinte quadro ou sinalizadores de compilação do produto:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES para /product/build.prop . Eles devem estar dentro de um $(call inherit-product path/to/device.mk) , como em PRODUCT_PRODUCT_PROPERTIES += product.abc=ok .

Instalando um módulo na partição do produto

Use os seguintes sinalizadores de compilação para instalar um módulo na partição do product .

  • product_specific: true em Android.bp
  • LOCAL_PRODUCT_MODULE := true em Android.mk

Ativando a inicialização verificada

Para evitar que a partição do product seja adulterada por software malicioso, ative o Android Verified Boot (AVB) para essa partição (assim como você faz para o vendor e as partições do system ). Para habilitar o AVB, inclua os seguintes sinalizadores de compilação: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .