進行我們的可用性調查以改進此站點。
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

產品分區

Android 9及更高版本支持使用Android構建系統構建product分區。以前,Android 8.x強制將SoC特定組件從system分區分離到vendor分區,而沒有為從Android構建系統構建的OEM特定組件分配空間。 Android 9及更高版本提供了適用於不同分區上的priv-app的其他權限和白名單功能

關於產品分區

許多OEM定制AOSP系統映像以實現其自身的功能以及運營商的要求。但是,這樣的自定義使得不可能將單個系統映像用於多個軟件SKU。每個映像必須不同以支持自定義,例如使用不同的區域設置或運營商。使用單獨的product分區來包含自定義設置,可以將單個系統映像用於多個軟件SKU。 ( system分區託管可在許多軟件SKU之間共享的通用代碼)。 vendor分區繼續託管特定於SoC的BSP代碼,這些代碼可基於給定SoC在多個設備之間共享。

使用單獨的分區有一些缺點,例如管理磁盤空間(必須保留有限的空間以供將來增長),以及在分區之間保持穩定的應用程序二進制接口(ABI) 。在決定使用product分區之前,請花一些時間考慮一下您獨特的AOSP實施和可能的緩解策略(例如,在空中(OTA)更新期間對設備進行分區 ,該更新不是由Google完成,而是由某些OEM完成)。動態分區將是一個很好的解決方案。

產品分區和權限

在Android 9及更高版本中,權限和白名單過程的更改會影響您對“產品”分區授予priv-apps權限的方式。 permissions.xml文件必須與priv-apps駐留在同一分區中。儘管將前者是後者的擴展,但將permissions.xml文件放在priv-apps的system分區中並不會將那些權限擴展到product分區中的priv-apps。有關權限和白名單過程的詳細信息,請參閱特權權限白名單

舊版/ OEM vs /產品

根據產品接口的強制性,我們具有product分區的兩種屬性。此外, product分區與舊版oem分區不同:

劃分屬性
oem
  • 不可更新;通常在工廠閃過一次。
  • 根據小變化(例如品牌和顏色)構建。 oem分區內容不同並不表示產品軟件不同。
  • system分區不取決於oem分區。 (僅當在其中找到特定文件時,它才使用oem分區)。
  • 僅在system分區上使用公共API。
product
  • 可更新的
  • 加上系統映像(它們一起更新)
  • 根據產品或產品系列構建。
  • 系統分區可以取決於product分區。
  • 可以使用非公共API,因為它們會同時更新。
product (強制接口)
  • 可更新的
  • 與系統映像解耦。
  • 根據產品或產品系列構建。
  • system分區不取決於product分區。
  • 不能使用隱藏的API,而只能在system分區上使用公共和系統API。

由於這些原因,Android 9支持product分區,同時為依賴它的設備保留對舊版oem分區的支持。要將product分區與system分區分離,Android 11支持強制product接口

/產品組件

product分區包含以下組件:

  • 特定於產品的系統屬性( /product/build.prop
  • 產品特定的RRO(/product/overlay/*. /product/overlay/*.apk
  • 特定於產品的應用程序( /product/app/*.apk
  • 特定於產品的priv-apps(/product/priv-app/*. /product/priv-app/*.apk
  • 特定於產品的庫( /product/lib/*
  • 特定於產品的Java庫( /product/framework/*.jar
  • 特定於產品的Android Framework系統配置( /product/etc/sysconfig/*/product/etc/permissions/*
  • 特定於產品的媒體文件( /product/media/audio/*
  • 產品特定的bootanimation文件

沒有custom_images

您不能使用custom_images 。他們缺乏以下支持:

  • 將模塊安裝到特定目標中custom_images支持將構件複製到映像中,但是不能通過將模塊的目標分區指定為構建規則的一部分來將模塊安裝到特定分區中。
  • 宋的支持。無法使用Soong構建系統構建custom_images
  • OTA更新支持custom_images用作無法接收OTA更新的出廠ROM映像。

維護分區之間的ABI

Android 9中的product分區是system分區的擴展。 product分區和system分區之間的ABI較弱,因此必須同時升級兩者,並且ABI應該基於系統SDK。如果系統SDK並未涵蓋productsystem之間的所有API界面,則OEM必須在兩個分區之間維護自己的ABI。

productsystem分區可以相互依賴。但是,使用通用系統映像(GSI)進行的測試必須在沒有product分區的情況下正常運行。

強制使用product接口時, product分區將與system分區分離。 product分區僅使用system分區中允許的接口。

product分區不得與vendor分區有任何依賴關係。禁止productvendor分區之間的直接交互。 (這由SEpolicy強制執行。)

實施產品分區

在實施新產品分區之前,請查看AOSP中相關的產品分區更改。然後,要設置product ,請包含以下電路板或產品構建標記:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • PRODUCT_PRODUCT_PROPERTIES用於/product/build.prop 。它們必須在PRODUCT_PRODUCT_PROPERTIES += product.abc=ok$(call inherit-product path/to/device.mk)中。

將模塊安裝到產品分區

使用以下構建標誌將模塊安裝到product分區。

  • product_specific: trueAndroid.bp product_specific: true
  • LOCAL_PRODUCT_MODULE := trueAndroid.mk LOCAL_PRODUCT_MODULE := true

啟用驗證啟動

為防止product分區受到惡意軟件的篡改,請對該分區啟用Android驗證啟動(AVB) (就像對vendorsystem分區一樣)。要啟用AVB,請包含以下構建標記: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS