Android 9 i nowsze wersje obsługują tworzenie partycji product
za pomocą systemu kompilacji Androida. Wcześniej Android 8.x wymuszał oddzielenie komponentów związanych z procesorem SoC z partycji system
na partycję vendor
bez przeznaczania miejsca na komponenty związane z OEM-em utworzone przez system kompilacji Androida. Android 9 i nowsze wersje udostępniają dodatkowe uprawnienia i funkcje dotyczące listy dozwolonych aplikacji, które mają zastosowanie do aplikacji prywatnych na różnych partycjach.
Podziały produktów
Wielu producentów OEM dostosowuje obraz systemu AOSP, aby wdrożyć własne funkcje, a także wymagania operatora. Jednak takie dostosowania uniemożliwiają używanie jednego obrazu systemu dla wielu SKU oprogramowania. Każdy obraz musi być inny, aby umożliwić personalizację, np. w przypadku różnych lokalizacji lub operatorów. Użycie osobnej partycji product
do przechowywania dostosowań umożliwia korzystanie z jednego obrazu systemu dla wielu kodów SKU oprogramowania. (W partycji system
znajduje się kod ogólny, który można udostępniać wielu SKU oprogramowania). Partycja vendor
nadal będzie zawierać kod BSP dla konkretnego SoC, który można udostępniać wielu urządzeniom na podstawie danego SoC.
Korzystanie z osobnych partycji ma pewne wady, takie jak zarządzanie miejscem na dysku (ograniczona ilość miejsca musi pozostać zarezerwowana na potrzeby przyszłego rozwoju) i utrzymywanie stabilnego interfejsu binarnego aplikacji (ABI) między partycjami. Zanim zdecydujesz się na użycie partycji product
, zastanów się nad swoją unikalną implementacją AOSP i możliwymi taktykami zaradczymi (np. partycjonowaniem urządzenia podczas aktualizacji przez internet, której nie wykonuje Google, ale niektórzy producenci OEM).
Dynamiczne partycjonowanie to dobre rozwiązanie w tym przypadku.
Podziały produktów i uprawnienia
W Androidzie 9 i nowszych zmiana uprawnień i procesu dodawania do białej listy ma wpływ na sposób przyznawania uprawnień aplikacjom z dostępem do prywatnych danych na partycjach „produktu”. Plik permissions.xml
musi znajdować się na tej samej partycji co plik priv-apps. Umieszczenie pliku permissions.xml
na partycji system
dla aplikacji prywatnych nie rozszerza tych uprawnień na aplikacje prywatne na partycji product
, mimo że pierwsza jest rozszerzeniem tej drugiej.
Szczegółowe informacje o uprawnieniach i procesach dotyczących listy dozwolonych znajdziesz w artykule Uprawnienia o wysokim priorytecie – dodawanie do listy dozwolonych.
Starsza wersja /oem w porównaniu z /product
Istnieją 2 rodzaje atrybutów partycji product
w zależności od wymuszania interfejsu produktu. Ponadto partycja product
różni się od starszej partycji oem
:
Partycja | Atrybuty |
---|---|
oem |
|
product |
|
product (wymagane interfejsy) |
|
Z tych powodów Android 9 obsługuje partycję product
, zachowując jednocześnie obsługę starszej partycji oem
na urządzeniach, które z niej korzystają. Aby odłączyć partycję product
od partycji system
, Android 11 obsługuje wymuszanie interfejsów product
.
/produkty
Partycja product
zawiera te komponenty:
- Właściwości systemowe związane z produktem (
/product/build.prop
) - Produktowe RRO (
/product/overlay/*.apk
) - Aplikacje związane z poszczególnymi usługami (
/product/app/*.apk
) - priv-apps dotyczące konkretnego produktu (
/product/priv-app/*.apk
) - Biblioteki dotyczące konkretnych usług (
/product/lib/*
) - Biblioteki Java związane z poszczególnymi usługami (
/product/framework/*.jar
) - Konfiguracje systemu Android Framework dotyczące usług (
/product/etc/sysconfig/*
i/product/etc/permissions/*
) - Pliki multimedialne dotyczące konkretnego produktu (
/product/media/audio/*
) - pliki
bootanimation
dotyczące konkretnego produktu,
Brak custom_images
Nie możesz używać custom_images
. Nie obsługują:
- instalowanie modułów w konkretnym celu.
custom_images
obsługuje kopiowanie artefaktów do obrazu, ale nie może zainstalować modułu na określonej partycji przez określenie docelowej partycji jako części reguły kompilacji. - Pomoc dotycząca Soong.
custom_images
nie można skompilować za pomocą systemu kompilacji Soong. - Obsługa aktualizacji OTA.
custom_images
są używane jako fabryczne obrazy ROM, które nie mogą otrzymywać aktualizacji OTA.
Zachowanie interfejsów ABI między partycjami
Partycja product
w Androidzie 9 jest rozszerzeniem partycji system
. Istnieje słaba zgodność ABI między partycjami product
i system
, więc obie muszą zostać ulepszone w tym samym czasie, a ABI powinien być oparty na systemowym pakiecie SDK. Jeśli system SDK nie obejmuje wszystkich interfejsów API między product
a system
, producenci OEM muszą utrzymywać własne ABI między tymi dwoma partycjami.
Partycje product
i system
mogą być od siebie zależne. Testy z ogólnym obrazem systemu (GSI) muszą jednak działać prawidłowo bez partycji product
.
Gdy interfejsy product
są egzekwowane, partycja product
jest odłączona od partycji system
. Partycja product
używa tylko dozwolonych interfejsów z partycji system
.
Partycja product
nie może mieć żadnych zależności od interfejsów niestabilnych w partycji vendor
. Bezpośrednie interakcje między partycjami product
i vendor
są zabronione.
(Jest to egzekwowane przez SEpolicy).
Wdrażanie podziałów produktów
Zanim wdrożysz nową partycję produktu, zapoznaj się z zmianami w AOSP dotyczącymi partycji produktu. Następnie, aby skonfigurować product
, dodaj te flagi tablicy lub flagi kompilacji produktu:
BOARD_USES_PRODUCTIMAGE
BOARD_PRODUCTIMAGE_PARTITION_SIZE
BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
PRODUCT_PRODUCT_PROPERTIES
za/product/build.prop
. Te wartości muszą mieścić się w zakresie$(call inherit-product path/to/device.mk)
, jak wPRODUCT_PRODUCT_PROPERTIES += product.abc=ok
.
Instalowanie modułu na partycji produktu
Aby zainstalować moduł na partycji product
, użyj tych flag kompilacji.
product_specific: true
w:Android.bp
LOCAL_PRODUCT_MODULE := true
w:Android.mk
Włączanie weryfikacji podczas uruchamiania
Aby zapobiec modyfikowaniu partycji product
przez złośliwe oprogramowanie, włącz zweryfikowany rozruch Androida (AVB) dla tej partycji (tak samo jak w przypadku partycji vendor
i system
). Aby włączyć AVB,
dodaj te flagi kompilacji:
BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS
.