Podziały produktów

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
  • Nie można aktualizować; zwykle flashowanie odbywa się raz w fabryce.
  • Zbudowane z mniejszych elementów, takich jak elementy marki i kolory. Różne zawartości partycji oem nie oznaczają, że oprogramowanie produktu jest inne.
  • Partycja system nie zależy od partycji oem. (używa partycji oemtylko wtedy, gdy znajdzie się na niej określony plik).
  • W partycji system używa tylko publicznego interfejsu API.
product
  • Aktualizacja
  • Połączone z obrazem systemu (aktualizowane razem)
  • tworzone na podstawie poszczególnych produktów lub rodzin produktów.
  • Partycja systemowa może zależeć od partycji product.
  • Możesz używać interfejsów API, które nie są publiczne, ponieważ są one aktualizowane jednocześnie.
product (wymagane interfejsy)
  • Aktualizacja
  • Odłączenie od obrazu systemu.
  • tworzone na podstawie poszczególnych produktów lub rodzin produktów.
  • Partycja system nie zależy od partycji product.
  • Nie może używać ukrytych interfejsów API, ale korzysta z publicznych i systemowych interfejsów API na partycji system.

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/*/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 productsystem, 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 productsystem, producenci OEM muszą utrzymywać własne ABI między tymi dwoma partycjami.

Partycje productsystem 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 w PRODUCT_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 vendorsystem). Aby włączyć AVB, dodaj te flagi kompilacji: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS.