O Android 9 e versões mais recentes oferecem suporte à criação
de partições product
usando o sistema de build do Android. Anteriormente,
o Android 8.x aplicava a separação de componentes específicos do SoC
da partição system
para a partição vendor
sem dedicar espaço para componentes específicos de OEM criados com base no
sistema de criação do Android. O Android 9 e versões mais recentes oferecem
permissões
e recursos de inclusão na lista de permissões adicionais que se aplicam a apps privados em diferentes partições.
Sobre as partições de produtos
Muitos OEMs personalizam a imagem do sistema AOSP para implementar os próprios recursos
e os requisitos da operadora. No entanto, essas personalizações tornam
impossível usar uma única imagem do sistema para vários SKUs de software. Cada
imagem precisa ser diferente para oferecer suporte às personalizações, como com
diferentes localidades ou operadoras. O uso de uma
partição product
separada para conter personalizações permite
usar uma única imagem do sistema para vários SKUs de software. A
partição system
hospeda um código genérico que pode ser compartilhado entre
muitos SKUs de software. A partição vendor
continua hospedando
o código BSP específico do SoC, que pode ser compartilhado entre vários
dispositivos com base no SoC.
O uso de partições separadas tem algumas desvantagens, como
o gerenciamento de espaço em disco (uma quantidade limitada de espaço precisa permanecer reservada para o crescimento
futuro) e a manutenção
de uma interface binária de aplicativo estável (ABI, na sigla em inglês) entre as partições. Antes
de decidir usar partições product
, considere sua
implementação exclusiva do AOSP e possíveis táticas de mitigação, como
particionar um dispositivo durante uma atualização
over-the-air (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 no processo de inclusão na lista de permissões afeta a forma como você concede permissões de apps privados nas
partições "product". O arquivo permissions.xml
precisa residir na mesma partição que o priv-apps. Colocar um
arquivo permissions.xml
na partição system
para apps privados não estende essas permissões para apps privados na partição
product
, mesmo que o primeiro seja uma extensão do segundo.
Para saber mais sobre as permissões e os processos de inclusão na lista de permissões privilegiadas, consulte
Lista de permissões privilegiadas.
/oem legado x /product
Há dois tipos de atributos da partição product
, dependendo
da aplicação de interface
do produto. Além disso, a partição product
é diferente
da partição oem
legada:
Partição | Atributos |
---|---|
oem |
|
product |
|
product (interfaces aplicadas) |
|
Por esses motivos, o Android 9 oferece suporte à partição product
, mantendo o suporte à partição oem
legada para dispositivos que dependem
dela. Para desvincular 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
) - Apps 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 do 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 custom_images
Não é possível usar custom_images
. Eles não têm suporte para o
seguinte:
- Instalar módulos em um destino específico.
O
custom_images
oferece suporte à cópia de artefatos para uma imagem, mas não é possível instalar um módulo em uma partição específica especificando a partição de destino como parte de uma regra de build. - Suporte da Soong. O
custom_images
não pode ser criado usando o sistema de build do Soong. - Suporte a atualizações OTA.
custom_images
são usadas como imagens ROM de fábrica que não podem receber atualizações OTA.
Manter 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 precisam ser
atualizadas ao mesmo tempo, e a ABI precisa ser baseada no SDK do sistema. Se o
SDK do sistema não abranger todas as plataformas de API entre product
e
system
, os OEMs precisarão manter as próprias ABIs entre
as duas partições.
As partições product
e system
podem ter
dependências umas das outras. No entanto, os testes com a
imagem genérica do sistema (GSI)
precisam funcionar corretamente sem a partição product
.
Quando as interfaces product
são aplicadas, a partição product
é desassociada da partição system
. A partição product
usa apenas as interfaces permitidas da partição system
.
A partição product
não pode ter dependências por interfaces instáveis na
partição vendor
. A interação direta entre as
partições product
e vendor
é proibida.
Isso é aplicado pelo SEpolicy.
Implementar partições de produtos
Antes de implementar uma nova partição de produto, revise as
mudanças
relacionadas à partição de produto no AOSP. Em seguida, para configurar product
,
inclua as seguintes flags de build do produto ou da placa:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
para/product/build.prop
. Elas precisam estar dentro de um$(call inherit-product path/to/device.mk)
, como emPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instalar um módulo na partição do produto
Use os flags de build a seguir para instalar um módulo na partição product
.
product_specific: true
emAndroid.bp
LOCAL_PRODUCT_MODULE := true
emAndroid.mk
Ativar a inicialização verificada
Para evitar que a partição product
seja adulterada por
software malicioso, ative a
Inicialização
verificada do Android (AVB) para essa partição, assim como você faz com as
partições vendor
e system
. Para ativar o AVB,
inclua as seguintes flags de build:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.