Partições de produtos

O Android 9 e versões mais recentes incluem suporte à criação Partições product usando o sistema de build do Android. Antes, O Android 8.x aplicou a separação de componentes específicos do SoC da partição system para o arquivo vendor sem dedicar espaço para componentes específicos de OEM criados a partir da Sistema de build do Android. O Android 9 e versões mais recentes oferecem permissões e colocar recursos na lista de permissões que se aplicam a apps privados em partições diferentes.

Sobre as partições de produtos

Muitos OEMs personalizam a imagem do sistema AOSP para implementar seus próprios recursos, bem como os requisitos das operadoras. No entanto, essas personalizações impossível usar uma única imagem do sistema para vários SKUs de software. Cada precisa ser diferente para dar suporte às personalizações, como nas em diferentes localidades ou operadoras. Ao usar um a partição product separada para que ela contenha personalizações possível usar uma única imagem do sistema para vários SKUs de software. O A partição system hospeda código genérico que pode ser compartilhado entre muitas SKUs de software). A partição vendor continua hospedando Código BSP específico de SoC que pode ser compartilhado entre vários com base no SoC fornecido.

Usar partições separadas tem algumas desvantagens, como gerenciar espaço em disco (uma quantidade limitada de espaço deve permanecer reservada crescimento) e manter uma interface binária de aplicativo (ABI, na sigla em inglês) estável entre partições Antes decidir usar partições product, pense nas suas implementação exclusiva do AOSP e possíveis táticas de mitigação (como reparticionar um dispositivo durante uma operação over the air (OTA) (OTA), que não é feita pelo Google, mas por alguns OEMs. O particionamento dinâmico é uma boa solução para isso.

Partições e permissões de produtos

No Android 9 e versões mais recentes, uma mudança nas permissões e da lista de permissões afeta a forma como você concede permissões priv-apps em das partições "produto". O arquivo permissions.xml precisam residir na mesma partição que os priv-apps. Colocar um Arquivo permissions.xml na partição system para priv-apps não estende essas permissões aos priv-apps no product partição, mesmo que a primeira seja uma extensão da última. Para obter detalhes sobre as permissões e os processos de colocação de permissões, consulte Lista de permissões privilegiadas.

/Oem legado x /produto

Temos dois tipos de atributos da partição product, dependendo na página aplicação obrigatória de interface. Além disso, a partição product é diferente do que a partição oem legada:

Partição Atributos
oem
  • Não atualizável. geralmente piscavam uma vez na fábrica.
  • Criado para pequenas variações, como branding e cor. Tendo conteúdos diferentes da partição oem não indicam que o produto o software é diferente.
  • A partição system não depende oem. Ele usa a propriedade oem partição somente quando um arquivo específico é encontrado lá).
  • Usa a API pública apenas na partição system.
product
  • Atualizável
  • Em conjunto com a imagem do sistema (eles são atualizados juntos)
  • Criados por produto ou famílias de produtos.
  • A partição do sistema pode depender da partição product.
  • Podem usar APIs não públicas, porque elas são atualizadas simultaneamente.
product (interfaces aplicadas)
  • Atualizável
  • Desacoplada à imagem do sistema.
  • Criados por produto ou famílias de produtos.
  • A partição system não depende de product. partição.
  • Não é possível usar APIs ocultas, mas utiliza apenas APIs públicas e do sistema no system.

Por esses motivos, o Android 9 oferece suporte à partição product, enquanto Mantendo o suporte para a partição oem legada, para dispositivos que dependem de reimplantá-lo. Para separar a partição product de system partição, o Android 11 oferece suporte aplicação de product do Google Cloud.

componentes de /produto

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

  • Propriedades do sistema específicas do produto (/product/build.prop)
  • RROs específicas do produto (/product/overlay/*.apk)
  • Apps específicos do produto (/product/app/*.apk)
  • Priv-apps específicos do produto (/product/priv-app/*.apk)
  • Bibliotecas específicas de produtos (/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

Não é possível usar custom_images. Não há suporte para a seguintes:

  • Instalar módulos em um destino específico. custom_images oferece suporte à cópia de artefatos em uma imagem, mas não consegue instalar um módulo em uma partição específica especificando o valor como parte de uma regra de build.
  • Suporte do Soong. custom_images não pode ser criados usando o sistema de build Soong.
  • Suporte à atualização OTA. custom_images são usados como ROM de fábrica. imagens que não podem receber atualizações OTA.

Manter ABIs entre partições

A partição product no Android 9 é uma extensão da system. Existe uma ABI fraca entre product e system, portanto ambas devem ser atualizados ao mesmo tempo, e a ABI precisa ser baseada no SDK do sistema. Se o O SDK do sistema não abrange todas as plataformas de API entre product e system, os OEMs precisam manter as próprias ABIs entre as duas partições.

As partições product e system podem ter dependem uns dos outros. No entanto, os testes com o Imagem genérica do sistema (GSI) precisa funcionar corretamente sem a partição product.

Quando as interfaces product são aplicadas, o product é separada da partição system. O product usa apenas as interfaces permitidas da partição system.

A partição product não pode ter nenhuma dependência por interfaces instáveis na vendor. A interação direta entre o As partições product e vendor são proibidas. Isso é imposto pela SEpolicy.

Implementar partições de produto

Antes de implementar uma nova partição de produtos, consulte a relacionados mudanças na partição do produto no AOSP. Depois, para configurar o product, inclua as seguintes sinalizações de criação de produto ou placa:

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

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

Use as seguintes flags de build para instalar um módulo na partição product.

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

Ativar a Inicialização verificada

Para evitar que a partição product seja adulterada por softwares maliciosos, ative No Android Inicialização verificada (AVB, na sigla em inglês) para essa partição, da mesma forma que partições vendor e system). Para ativar a AVB, inclua as seguintes flags de build: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS: