Podziały produktów

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
  • Nie można aktualizować. zwykle migała raz na etapie fabrycznym.
  • Produkt stworzony z myślą o niewielkich odmianach, takich jak elementy marki i kolory Mając różne treści partycji oem nie oznaczają produktu jest bardzo różne.
  • Partycja system nie zależy od partycji oem. (Wykorzystuje funkcję oem partycji tylko wtedy, gdy znajdzie się w niej konkretny plik).
  • Używa publicznego interfejsu API tylko na partycji system.
product
  • Można zaktualizować
  • W połączeniu z obrazem systemu (aktualizowane razem)
  • Dostosowywanie do grupy usług lub rodzin usług.
  • Partycja systemu może zależeć od partycji product.
  • Może używać niepublicznych interfejsów API, ponieważ są one aktualizowane jednocześnie.
product (wymuszane interfejsy)
  • Można zaktualizować
  • Rozłączono z obrazem systemu.
  • Dostosowywanie do grupy usług lub rodzin usług.
  • Partycja system nie zależy od: product partycji danych.
  • Nie można używać ukrytych interfejsów API, ale w system partycja.

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ład PRODUCT_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