Android 9 i nowsze wersje obejmują obsługę tworzenia partycji product
przy użyciu systemu kompilacji Android. Wcześniej system Android 8.x wymuszał oddzielenie komponentów specyficznych dla SoC od partycji system
do partycji vendor
bez przeznaczania miejsca na komponenty specyficzne dla OEM zbudowane z systemu kompilacji Androida. Android 9 i nowsze zapewniają dodatkowe uprawnienia i funkcje białej listy , które mają zastosowanie do aplikacji prywatnych na różnych partycjach.
Informacje o partycjach produktów
Wielu producentów OEM dostosowuje obraz systemu AOSP w celu wdrożenia własnych funkcji, a także wymagań operatora. Jednak takie dostosowania uniemożliwiają użycie jednego obrazu systemu dla wielu jednostek SKU oprogramowania. Każdy obraz musi być inny, aby umożliwić dostosowanie, na przykład w przypadku różnych lokalizacji lub operatorów. Użycie oddzielnej partycji product
do przechowywania dostosowań umożliwia użycie jednego obrazu systemu dla wielu jednostek SKU oprogramowania. (Partycja system
zawiera kod ogólny, który może być współużytkowany przez wiele jednostek SKU oprogramowania). Partycja vendor
nadal przechowuje kod BSP specyficzny dla SoC, który może być współużytkowany przez wiele urządzeń w oparciu o dany SoC.
Używanie oddzielnych partycji ma pewne wady, takie jak zarządzanie miejscem na dysku (należy zachować ograniczoną ilość miejsca na przyszły rozwój) i utrzymywanie stabilnego interfejsu binarnego aplikacji (ABI) pomiędzy partycjami. Zanim zdecydujesz się na użycie partycji product
, poświęć trochę czasu na rozważenie unikalnej implementacji AOSP i możliwych taktyk zaradczych (takich jak ponowne partycjonowanie urządzenia podczas aktualizacji OTA , czego nie robi Google, ale niektórzy producenci OEM) ). Dobrym rozwiązaniem będzie w tym przypadku partycjonowanie dynamiczne .
Partycje i uprawnienia produktu
W systemie Android 9 i nowszych zmianach w procesie uprawnień i białej listy wpływa na sposób przyznawania uprawnień aplikacji prywatnych na partycjach „produktów”. Plik permissions.xml
musi znajdować się na tej samej partycji, co aplikacje priv. Umieszczenie pliku permissions.xml
na partycji system
dla aplikacji priv nie rozszerza tych uprawnień na aplikacje priv na partycji product
, mimo że pierwsza jest rozszerzeniem drugiej. Aby uzyskać szczegółowe informacje na temat uprawnień i procesów umieszczania na białej liście, zobacz Lista dozwolonych uprawnień uprzywilejowanych .
Starsze wersje /oem kontra /produkt
Mamy dwa rodzaje atrybutów podziału product
w zależności od egzekwowania interfejsu produktu . Ponadto partycja product
różni się od starszej partycji oem
:
Przegroda | Atrybuty |
---|---|
oem |
|
product |
|
product (wymuszone interfejsy) |
|
Z tych powodów system Android 9 obsługuje partycję product
, zachowując jednocześnie obsługę starszej partycji oem
dla urządzeń od niej zależnych. Aby oddzielić partycję product
od partycji system
, system Android 11 obsługuje wymuszanie interfejsów product
.
/składniki produktu
Partycja product
zawiera następujące komponenty:
- Właściwości systemowe specyficzne dla produktu (
/product/build.prop
) - RRO specyficzne dla produktu (
/product/overlay/*.apk
) - Aplikacje specyficzne dla produktu (
/product/app/*.apk
) - Aplikacje priv specyficzne dla produktu (
/product/priv-app/*.apk
) - Biblioteki specyficzne dla produktu (
/product/lib/*
) - Biblioteki Java specyficzne dla produktu (
/product/framework/*.jar
) - Konfiguracje systemu Android Framework specyficzne dla produktu (
/product/etc/sysconfig/*
i/product/etc/permissions/*
) - Pliki multimedialne specyficzne dla produktu (
/product/media/audio/*
) - Pliki
bootanimation
specyficzne dla produktu
Brak niestandardowych_obrazów
Nie możesz używać custom_images
. Brakuje im wsparcia w następujących kwestiach:
- Instalowanie modułów w konkretnym miejscu docelowym .
custom_images
obsługują kopiowanie artefaktów do obrazu, ale nie mogą zainstalować modułu na określonej partycji poprzez określenie jej partycji docelowej jako części reguły kompilacji. - Wkrótce wsparcie .
custom_images
nie można zbudować przy użyciu systemu kompilacji Soong. - Obsługa aktualizacji OTA .
custom_images
są używane jako fabryczne obrazy ROM, które nie mogą otrzymywać aktualizacji OTA.
Utrzymywanie ABI pomiędzy partycjami
Partycja product
w systemie Android 9 jest rozszerzeniem partycji system
. Pomiędzy partycjami product
i system
występuje słaby interfejs ABI, dlatego należy zaktualizować obie partycje w tym samym czasie, a interfejs ABI powinien być oparty na systemowym zestawie SDK. Jeśli systemowy zestaw SDK nie obejmuje wszystkich obszarów API między product
a system
, producenci OEM muszą utrzymywać własne interfejsy ABI między dwiema partycjami.
Partycje product
i system
mogą być od siebie zależne. Jednakże testy z Generic System Image (GSI) muszą działać poprawnie bez partycji product
.
Gdy wymuszane są interfejsy product
, partycja product
jest oddzielona od partycji system
. Partycja product
wykorzystuje tylko dozwolone interfejsy z partycji system
.
Partycja product
nie może być zależna od niestabilnych interfejsów na partycji vendor
. Zabroniona jest bezpośrednia interakcja pomiędzy product
i vendor
. (Jest to egzekwowane przez SEpolicy.)
Implementacja partycji produktu
Przed wdrożeniem nowej partycji produktu przejrzyj powiązane zmiany partycji produktu w AOSP . Następnie, aby skonfigurować product
, dołącz następującą tablicę lub flagi budowania produktu:
-
BOARD_USES_PRODUCTIMAGE
-
BOARD_PRODUCTIMAGE_PARTITION_SIZE
-
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
-
PRODUCT_PRODUCT_PROPERTIES
dla/product/build.prop
. Muszą one znajdować się w obrębie$(call inherit-product path/to/device.mk)
, na przykładPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instalowanie modułu na partycji produktu
Użyj następujących flag kompilacji, aby zainstalować moduł na partycji product
.
-
product_specific: true
wAndroid.bp
-
LOCAL_PRODUCT_MODULE := true
wAndroid.mk
Włączanie zweryfikowanego rozruchu
Aby zapobiec manipulowaniu partycją product
przez złośliwe oprogramowanie, włącz Android Verified Boot (AVB) dla tej partycji (tak samo jak w przypadku partycji vendor
i system
). Aby włączyć AVB, dołącz następujące flagi kompilacji: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.