Android 9 i nowsze wersje obsługują tworzenie
product
partycje korzystające z systemu kompilacji Androida. Wcześniej,
W Androidzie 8.x wymuszane jest rozdzielenie komponentów związanych z układem SOC
z partycji system
do sekcji vendor
partycjonowanie bez poświęcania miejsca na komponenty OEM utworzone na podstawie
system kompilacji Androida. Android 9 i nowszy zapewnia dodatkowe
uprawnienia
i białej listy, które dotyczą aplikacji priv-apps na różnych partycjach.
Podziały produktów
Wielu producentów OEM dostosowuje obraz systemu AOSP pod kątem własnych funkcji.
oraz wymagania operatora. Takie dostosowania sprawiają jednak,
nie da się wykorzystać jednego obrazu systemu na potrzeby wielu kodów SKU oprogramowania. Każdy
Obraz musi być inny, aby obsługiwały dostosowania, na przykład w
w różnych regionach lub przez różnych operatorów. Za pomocą
oddzielająca partycje product
z dostosowaniami,
dzięki jednemu obrazowi systemu na potrzeby wielu kodów SKU oprogramowania. (Parametr
Partycja system
hostuje ogólny kod, który można współdzielić między
wielu kodów SKU oprogramowania). Partycja vendor
nadal hostuje
Kod BSP specyficzny dla SOC, który może być współużytkowany przez wiele
na podstawie danego układu SOC.
Stosowanie osobnych partycji ma pewne wady, takie jak:
zarządzanie miejscem na dysku (ograniczona ilość miejsca musi pozostać zarezerwowana na przyszłość,
rozwoju działalności) i utrzymaniem
stabilny interfejs binarny aplikacji (ABI) między partycjami. Przed
decydujesz się na użycie partycji product
, zastanów się
unikalne wdrożenie AOSP oraz możliwe taktyki ograniczania ryzyka (np.
partycjonowanie urządzenia bezprzewodowo
(OTA) – nie jest wykonywana przez Google, ale jest przeprowadzana przez niektórych producentów OEM.
Obecne partycjonowanie dynamiczne:
jest to dobre rozwiązanie.
Podziały produktów i uprawnienia
W Androidzie 9 i nowszych zmiana uprawnień
procesu dodawania do białej listy wpływa na sposób przyznawania uprawnień aplikacji
partycji produktu. Plik permissions.xml
muszą znajdować się na tej samej partycji co aplikacje priv-apps. Umieszczenie znaku
Plik permissions.xml
w partycji system
w przypadku aplikacji podstawowych nie rozszerza tych uprawnień na aplikacje prywatne w interfejsie product
nawet jeśli pierwszy z nich jest rozszerzeniem drugiego.
Szczegółowe informacje o uprawnieniach i procesach dodawania do białej listy znajdziesz w artykule
Lista dozwolonych uprawnień z podwyższonymi uprawnieniami.
Starsze wersje /oem i /product
W zależności od partycji product
dostępne są 2 rodzaje atrybutów.
w produkcie
wymuszanie korzystania z interfejsu. Ponadto partycja product
jest inna.
niż w przypadku starszej partycji oem
:
Partycja | Atrybuty |
---|---|
oem |
|
product |
|
product (wymuszane interfejsy) |
|
Z tego powodu Android 9 obsługuje partycję product
, a
zachowywanie obsługi starszej partycji oem
w przypadku urządzeń, które zależą od
. Aby odłączyć partycję product
od partycji: system
partycji, Android 11 obsługuje
wymuszanie product
/komponenty produktu
Partycja product
zawiera te komponenty:
- Właściwości systemu związane z konkretnym produktem (
/product/build.prop
) - RRO dla konkretnego produktu (
/product/overlay/*.apk
) - Aplikacje związane z konkretnymi usługami (
/product/app/*.apk
) - Prywatne aplikacje poszczególnych usług (
/product/priv-app/*.apk
) - Biblioteki związane z konkretnymi usługami (
/product/lib/*
) - Biblioteki Javy dla poszczególnych produktów (
/product/framework/*.jar
) - Konfiguracje systemu Android Framework w poszczególnych usługach
(
/product/etc/sysconfig/*
i/product/etc/permissions/*
). - Pliki multimedialne dotyczące poszczególnych usług (
/product/media/audio/*
) - Pliki
bootanimation
dotyczące konkretnego produktu
Brak własnych obrazów
Nie możesz korzystać z custom_images
. Nie mają one poparcia dla
:
- Instalowanie modułów w określonych miejscach docelowych.
custom_images
obsługują kopiowanie artefaktów do obrazu, ale nie można zainstalować modułu na określonej partycji przez określenie jego elementu docelowego jako część reguły kompilacji. - Zespół pomocy Soong.
custom_images
nie może być za pomocą systemu kompilacji Soong. - Aktualizacje OTA. Urządzenia
custom_images
są używane jako fabryczna pamięć ROM które nie mogą otrzymywać aktualizacji OTA.
Utrzymywanie interfejsów ABI między partycjami
Partycja product
w Androidzie 9 jest rozszerzeniem
system
partycja. Słaby wynik ABI pomiędzy
product
i system
, więc obie muszą być
i aktualizowane w tym samym czasie, więc interfejs ABI powinien być oparty na pakiecie SDK systemu. Jeśli
pakiet SDK systemu nie obejmuje wszystkich platform interfejsu API w okresie od product
do
system
, OEM musi utrzymywać własne interfejsy ABI w okresie
tych dwóch partycji.
Partycje product
i system
mogą mieć
od siebie nawzajem. Jednak testy
Ogólny obraz systemu (GSI)
musi działać prawidłowo bez partycji product
.
Gdy interfejsy product
są egzekwowane, interfejs product
partycja jest odłączona z partycją system
. product
korzysta wyłącznie z dozwolonych interfejsów partycji system
.
Partycja product
nie może być uzależniona od niestabilnych interfejsów
vendor
partycja. Bezpośrednia interakcja między
Partycje product
i vendor
są zabronione.
Jest to egzekwowane przez zasadę SEpolicy.
Wdrażanie podziałów produktów
Zanim zaimplementujesz nowy podział produktu, zapoznaj się z
powiązane
zmiany partycji produktu w AOSP. Następnie, aby skonfigurować usługę product
,
zawierają te flagi tablicy lub tworzenia produktu:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
–/product/build.prop
. Muszą one znajdować się w zakresie:$(call inherit-product path/to/device.mk)
, na przykładPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instalowanie modułu na partycji produktu
Użyj poniższych flag kompilacji, aby zainstalować moduł na partycji product
.
product_specific: true
w:Android.bp
LOCAL_PRODUCT_MODULE := true
w:Android.mk
Włącz weryfikację podczas uruchamiania
Aby uniemożliwić modyfikację partycji product
przez:
złośliwe oprogramowanie, włączyć
Android
weryfikacja podczas uruchamiania (AVB) tej partycji (tak samo jak w przypadku
vendor
i system
partycji). Aby włączyć AVB:
dodaj te flagi kompilacji:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS