產品劃分

Android 9 以上版本支援建構作業 product 分區使用 Android 建構系統。先前 Android 8.x 已強制執行分隔 SoC 專用元件 從 system 分區到 vendor 也沒有專供 OEM 專用元件使用 Android 建構系統Android 9 以上版本 權限 和許可清單功能適用於不同分區的應用程式。

產品劃分簡介

許多原始設備製造商 (OEM) 會自訂 AOSP 系統映像檔,以實作自身的功能。 以及電信業者規定然而,這類自訂功能 無法將單一系統映像檔用於多個軟體 SKU。每項 為支援自訂功能, 不同的語言代碼或電信業者使用 並包含自訂的 product 分區 多個軟體 SKU 使用單一系統映像檔。( system 分區託管的泛型程式碼可由以下項目共用 軟體 SKU)。「vendor」分區仍會繼續託管 可由多個 SoC 共用的 SoC 專屬 BSP 代碼 根據指定 SoC 分類的裝置

使用獨立分區有一些缺點,例如 管理磁碟空間 (保留有限空間供日後使用) 成長) 並維護 在分區之間建立穩定的應用程式二進位檔介面 (ABI)。之前 決定使用 product 個分區時,請花點時間 專屬的 Android 開放原始碼計畫實作和可能的緩解策略 (例如 在無線更新期間將裝置重新分割 (OTA) 更新,此功能是由部分原始設備製造商 (OEM) 執行,並非由 Google 執行。 動態分區是 有一個不錯的解決方案

產品劃分和權限

在 Android 9 以上版本中,權限有所變更 和加入許可清單的程序會影響您授予 您的 `product` 分區。permissions.xml 檔案 必須與私人應用程式位於相同的分區。在 system 分區中的 permissions.xml 個檔案 一般應用程式不會將這些權限擴展至 product 中的常用應用程式 分區。 如要進一步瞭解權限和加入許可清單程序,請參閱 將特殊權限加入許可清單

舊版 /oem 與 /產品

product 分區有兩種屬性,具體取決於 產品上 強制使用介面。此外,product 分區是 舊版 oem 分區:

分區 屬性
oem
  • 無法更新;通常是在工廠換機一次
  • 根據品牌和顏色等細微變化製作。建造 不同的 oem 分區內容並不代表產品 軟體並不相同
  • system 分區不需要 oem 分區。(使用 oem 分區)。
  • 只在 system 分區上使用公用 API。
product
  • 可更新
  • 與系統映像檔搭配使用 (兩者會一起更新)
  • 依產品或產品系列打造。
  • 系統分區可以使用 product 分區。
  • 非公開 API 會同時更新,因此可使用。
product (強制執行的介面)
  • 可更新
  • 與系統映像檔分離。
  • 依產品或產品系列打造。
  • system 分區不需要 product
  • 無法使用隱藏的 API,但只能使用 system 個分區。

基於這些原因,Android 9 支援 product 分區, 但保留對舊版 oem 分區的支援 基礎架構若要從 system 中分離 product 分區 因此,Android 11 支援多個分區 強制執行 product 介面

/產品元件

product 分區包含下列元件:

  • 產品專屬的系統屬性 (/product/build.prop)
  • 產品專屬的 RRO (/product/overlay/*.apk)
  • 產品專屬應用程式 (/product/app/*.apk)
  • 產品專屬的應用程式 (/product/priv-app/*.apk)
  • 產品專屬的程式庫 (/product/lib/*)
  • 產品專屬的 Java 程式庫 (/product/framework/*.jar)
  • 產品專屬的 Android 架構系統設定 (/product/etc/sysconfig/*/product/etc/permissions/*)
  • 產品專屬的媒體檔案 (/product/media/audio/*)
  • 產品專屬的 bootanimation 檔案

沒有 custom_images

您無法使用 custom_images。他們不支援 包括:

  • 將模組安裝到特定目標中custom_images 支援將構件複製到映像檔, 無法透過指定目標,將模組安裝到特定分區 做為建構規則的一部分
  • Soong 支援。「custom_images」無法 我們運用 Soong 建構系統建構而成
  • OTA 更新支援。「custom_images」已做為原廠 ROM 使用 就無法接收 OTA 更新的映像檔。

維護不同分區之間的 ABI

Android 9 中的 product 分區是 system 個分區。介於 ABI 之間 productsystem 分區,因此兩者都必須 且 ABI 應以系統 SDK 為基礎。如果 系統 SDK 並未涵蓋 productsystem,原始設備製造商 (OEM) 必須在 這兩個分區

productsystem 分區可以有 依附元件不過,請使用 通用系統映像檔 (GSI) 必須在沒有 product 分區的情況下正常運作。

強制執行 product 介面時,product 分區與 system 分區分離。product 分區只會使用 system 分區中允許的介面。

product 分區不得透過非穩定介面的任何依附元件 vendor 個分區。在 禁止使用「product」和「vendor」分區。 (由 SEpolicy 強制執行)。

導入產品劃分

導入新產品劃分前,請先詳閱 相關 Android 開放原始碼計畫的產品劃分變更。接著如要設定 product,請按照下列步驟操作: 包含下列 Jamboard 或產品建構旗標:

  • BOARD_USES_PRODUCTIMAGE
  • BOARD_PRODUCTIMAGE_PARTITION_SIZE
  • BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE
  • /product/build.propPRODUCT_PRODUCT_PROPERTIES。 它們必須位於 $(call inherit-product path/to/device.mk) 內 與 PRODUCT_PRODUCT_PROPERTIES += product.abc=ok 相同。

將模組安裝至產品分區

使用下列建構旗標將模組安裝至 product 分區。

  • Android.bpproduct_specific: true
  • Android.mkLOCAL_PRODUCT_MODULE := true

啟用驗證開機程序

如何防止 product 分區遭到 惡意軟體, 啟用 Android 該分區的驗證開機程序 (AVB) (如同 vendorsystem 分區)。如要啟用 AVB, 包含下列建構旗標: BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS