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