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 |
|
product |
|
product (interfaces aplicadas) |
|
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)
, emPRODUCT_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
emAndroid.bp
LOCAL_PRODUCT_MODULE := true
emAndroid.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
: