Partições do produto

O Android 9 e versões posteriores incluem suporte para a criação de partições 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 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 aplicativos privados em diferentes partições.

Sobre partições de 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 suportar as personalizações, como em diferentes localidades ou operadoras. O uso de uma partição product separada para conter personalizações possibilita o uso de uma única imagem do sistema para vários SKUs de software. (A partição system hospeda código genérico que pode ser compartilhado entre vários SKUs de software). A partição vendor continua a hospedar 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 o gerenciamento do espaço em disco (uma quantidade limitada de espaço deve permanecer reservada para crescimento futuro) e a manutenção de uma interface binária de aplicativo (ABI) estável entre as partições. Antes de decidir usar partições product , reserve um tempo para considerar sua implementação exclusiva de AOSP e possíveis táticas de mitigação (como reparticionar um dispositivo durante uma atualização over-the-air (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 versões posteriores, uma alteração nas permissões e no processo de lista de permissões afeta a maneira como você concede permissões de aplicativos privados nas partições de "produtos". O arquivo permissions.xml deve residir na mesma partição que priv-apps. Colocar um arquivo permissions.xml na partição system para priv-apps não estende essas permissões para priv-apps na partição 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 de partição do product , dependendo da aplicação da interface do produto . Além disso, a partição product é diferente da partição oem herdada:

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

Por esses motivos, o Android 9 oferece suporte à partição product , mantendo o suporte à partição oem legada, para dispositivos que dependem dela. Para dissociar a partição product da partição system , o Android 11 oferece suporte à aplicação de interfaces product .

/componentes do produto

A partição 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 )
  • Aplicativos privados 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 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 suportam a cópia de artefatos em uma imagem, mas não podem instalar um módulo em uma partição específica especificando sua partição de destino como parte de uma regra de construção.
  • Muito suporte . custom_images não pode ser criado usando o sistema de compilação Soong.
  • Suporte para atualização OTA . custom_images são usadas como imagens ROM de fábrica que não podem receber atualizações OTA.

Mantendo ABIs entre partições

A partição product no Android 9 é uma extensão da partição system . Há uma ABI fraca entre as partições 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 system , os OEMs deverão manter suas próprias ABIs entre as duas partições.

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

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

A partição product não deve ter nenhuma dependência através de interfaces instáveis ​​na partição vendor . A interação direta entre as partições product e vendor é proibida. (Isso é aplicado pela SEpolicy.)

Implementando partições de produto

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 product , inclua os seguintes sinalizadores de placa ou de criação de 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 $(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 sinalizadores de construção a seguir para instalar um módulo na partição product .

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

Habilitando inicialização verificada

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