O Android 9 e superior inclui suporte para criar partições de 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 do 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 priv-apps em diferentes partições.
Sobre as partições do 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 dar suporte às personalizações, como com diferentes localidades ou operadoras. O uso de uma partição de product separada para conter personalizações possibilita o uso de uma única imagem do sistema para vários SKUs de software. (A partição do system hospeda código genérico que pode ser compartilhado entre muitos SKUs de software). A partição do vendor continua a hospedar o 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 gerenciar o espaço em disco (uma quantidade limitada de espaço deve permanecer reservada para crescimento futuro) e manter uma interface binária de aplicativo (ABI) estável entre as partições. Antes de decidir usar partições de product , considere sua implementação AOSP exclusiva e possíveis táticas de mitigação (como reparticionar um dispositivo durante uma atualização 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 superior, uma alteração nas permissões e no processo de lista de permissões afeta a forma como você concede permissões de priv-apps em suas partições `product`. O arquivo permissions.xml deve residir na mesma partição que os priv-apps. Colocar um arquivo permissions.xml na partição do system para priv-apps não estende essas permissões para priv-apps na partição do 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 da partição do product , dependendo da aplicação da interface do produto . Além disso, a partição do 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 do product , mantendo o suporte à partição oem herdada, para dispositivos que dependem dela. Para dissociar a partição do product da partição do system , o Android 11 é compatível com a aplicação de interfaces do product .
/componentes do produto
A partição do 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) - 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 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 de
bootanimationespecí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_imagessuporte à cópia de artefatos em uma imagem, mas não pode instalar um módulo em uma partição específica especificando sua partição de destino como parte de uma regra de compilação. - Suporte logo .
custom_imagesnão pode ser compilado usando o sistema de compilação Soong. - Suporte de atualização OTA .
custom_imagessão usadas como imagens de ROM de fábrica que não podem receber atualizações OTA.
Mantendo ABIs entre partições
A partição do product no Android 9 é uma extensão da partição do system . Há uma ABI fraca entre as partições do 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 o system , os OEMs deverão manter suas próprias ABIs entre as duas partições.
As partições do product e system podem ter dependência uma da outra. No entanto, os testes com a imagem genérica do sistema (GSI) devem funcionar corretamente sem a partição do product .
Quando as interfaces do product são impostas, a partição do product é desacoplada da partição do system . A partição do product usa apenas as interfaces permitidas da partição do system .
A partição do product não deve ter nenhuma dependência da partição do vendor . A interação direta entre as partições do product e do vendor é proibida. (Isso é imposto pela SEpolicy.)
Implementando partições de produtos
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 o product , inclua o seguinte quadro ou sinalizadores de compilação do produto:
-
BOARD_USES_PRODUCTIMAGE -
BOARD_PRODUCTIMAGE_PARTITION_SIZE -
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE -
PRODUCT_PRODUCT_PROPERTIESpara/product/build.prop. Eles devem estar dentro de um$(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 seguintes sinalizadores de compilação para instalar um módulo na partição do product .
-
product_specific: trueemAndroid.bp -
LOCAL_PRODUCT_MODULE := trueemAndroid.mk
Ativando a inicialização verificada
Para evitar que a partição do product seja adulterada por software malicioso, ative o Android Verified Boot (AVB) para essa partição (assim como você faz para o vendor e as partições do system ). Para habilitar o AVB, inclua os seguintes sinalizadores de compilação: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS .