AOSP 提供下列選項,可在裝置上儲存設定資訊:
- 系統屬性
- 提早啟動裝置設定
- 硬體抽象層 (HAL) 屬性
- 系統設定 XML 檔案
- 資源覆蓋 (靜態和執行階段)
系統屬性
系統屬性是儲存在全域字典中的字串鍵/值組合。build.prop
系統屬性是全系統資源,不僅容易使用,效能負擔也很低。使用系統屬性時,即使系統屬性在多個處理序之間共用,您也不需要使用處理序間通訊 (IPC)。不過,系統屬性與全域變數類似,如果使用不當,可能會造成危害。如果系統屬性遭到濫用,可能會導致安全漏洞等問題,使用者也可能無法存取應用程式。使用系統屬性儲存設定資訊前,請先考慮其他設定選項。
如要進一步瞭解系統屬性,請參閱「新增系統屬性」。
提早啟動裝置設定
在 Android 17 以上版本中,init_dev_config 服務支援裝置設定和系統屬性初始化。這個動態架構機制會在開機初期自動執行。
如果單一系統或供應商映像檔必須支援多個硬體變體,則無法一律在建構時硬式編碼設定值。init_dev_config 服務會在 early-init 階段執行,就在 apexd-bootstrap 之前,讓供應商檢查硬體狀態 (例如來自系統啟動載入程式引數、早期掛接的分區或硬體設定資料表),並在初始化相依服務和程式庫之前,動態初始化系統屬性。
服務整合和生命週期
系統預設會在 init_dev_config 中定義 init.rc 服務,並在 early-init 期間同步執行,然後執行 apexd-bootstrap。整合人員不需要宣告新的 init 服務。
而是使用可執行路徑上的屬性擴充功能,將系統服務宣告與供應商二進位檔分離。整合人員使用 ro.vendor.init_dev_config.path 屬性指定供應商二進位檔的路徑,並設定必要的 SELinux 標籤和權限。
廠商導入規定
如要與 init_dev_config 整合,請按照下列步驟操作:
在建構時使用
PRODUCT_VENDOR_PROPERTIES設定供應商二進位檔路徑。提供的二進位路徑必須是系統中已安裝二進位檔的有效路徑:PRODUCT_VENDOR_PROPERTIES += \ ro.vendor.init_dev_config.path=/vendor/bin/init_dev_config如果未設定這項屬性,
init會略過服務執行作業,並正常繼續啟動。由於這項服務會在
apexd-bootstrap之前執行,因此完整 APEX 提供的 Bionic 程式庫尚未提供。在Android.bp中,設定bootstrap: true:rust_binary { name: "init_dev_config", vendor: true, srcs: ["src/main.rs"], rustlibs: [ "librustutils", ], bootstrap: true, }編寫服務邏輯,偵測硬體變體並設定適當的系統屬性:
use rustutils::system_properties; fn main() { let hw_sku = read_hardware_sku(); // Dynamically initialize vendor-specific properties: let display_type = match hw_sku { 1 => "oled", _ => "lcd", }; system_properties::write("vendor.display.panel_type", display_type) .expect("Failed to set vendor display property"); }使用
init_dev_config_exec標記供應商二進位檔:/vendor/bin/init_dev_config u:object_r:init_dev_config_exec:s0授予
init_dev_config網域權限,設定必要資源類型:set_prop(init_dev_config, vendor_my_sku_prop)
如要瞭解如何使用 init_dev_config 啟用及停用 APEX,請參閱「啟動時選取供應商 APEX」。
HAL 屬性
如果設定的單一事實來源是裝置上的硬體元件,硬體 HAL 必須提供該元件的資訊。在現有 HAL 中定義新的 HAL 方法,以存取設定。如要進一步瞭解如何開發 HAL,請參閱「HAL 的 AIDL」。
系統設定 XML 檔案
如果設定資料是靜態但複雜 (結構化),請考慮使用 XML 或其他類似格式的設定資料。請確保檔案結構定義保持穩定。如果是 XML 檔案,您可以使用 xsd_config 確保架構穩定,並運用自動產生的 XML 剖析器。
資源覆蓋
你可以使用資源疊加層自訂產品。資源疊加層分為兩種類型:
標準資源疊加:用於在建構時自訂產品。如要瞭解標準資源疊加層,請參閱「使用資源疊加層自訂建構作業」。
執行階段資源疊加 (RRO) 可用於在執行階段變更目標套件的資源值。舉例來說,安裝在系統映像檔上的應用程式可能會根據資源的值變更行為。在建構時間硬式編碼資源值,安裝在不同分割區的 RRO 可以在執行階段變更應用程式資源的值。如要進一步瞭解 RRO,請參閱「在執行階段變更應用程式資源的值」。