Przegrody produktu

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
  • Nie można aktualizować; zwykle błysnęło raz w fabryce.
  • Stworzony z uwzględnieniem niewielkich różnic, takich jak branding i kolor. Różna zawartość partycji oem nie oznacza, że ​​oprogramowanie produktu jest inne.
  • Partycja system nie zależy od partycji oem . (Używa partycji oem tylko wtedy, gdy zostanie tam znaleziony określony plik).
  • Używa tylko publicznego API na partycji system .
product
  • Możliwość aktualizacji
  • W połączeniu z obrazem systemu (aktualizują się razem)
  • Zbudowane dla poszczególnych produktów lub rodzin produktów.
  • Partycja systemowa może zależeć od partycji product .
  • Można używać niepublicznych interfejsów API, ponieważ są one aktualizowane jednocześnie.
product (wymuszone interfejsy)
  • Możliwość aktualizacji
  • Oddzielone od obrazu systemu.
  • Zbudowane dla poszczególnych produktów lub rodzin produktów.
  • Partycja system nie zależy od partycji product .
  • Nie można używać ukrytych interfejsów API, ale używa wyłącznie publicznych i systemowych interfejsów API na partycji system .

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ład PRODUCT_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 w Android.bp
  • LOCAL_PRODUCT_MODULE := true w Android.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 .