Android Automotive是隨 Android 開源項目 (AOSP) 提供的車載信息娛樂平台解決方案。本主題中的文章介紹了 Android Automotive System UI 提供的關鍵概念和組件以及為 OEM、第三方開發人員和最終用戶構建有效的人機界面 (HMI) 系統所需的核心應用程序。
- AOSP 主機集成指南。 App Host 允許 3P 汽車應用代表其呈現 OEM 風格的用戶界面 (UI) 組件。
- 汽車設置結構。 Car Settings 提供以汽車為中心的視覺用戶界面、基本的駕駛員分心優化以及 OEM 的額外定制入口點。
- 汽車 UI 庫集成指南。 Car UI Library 提供了一個 UI 開發框架,使汽車中存在的所有應用程序能夠實現一致性和定制化。
- 自定義狀態欄系統圖標。狀態欄是 Android 系統 UI 的一個組件,用於持續向用戶顯示重要信息。了解如何自定義狀態欄系統圖標。
- 單挑通知。了解如何自定義提醒通知。
- 撥號器。使用此 Android 系統應用程序為藍牙通話、聯繫人瀏覽和通話管理實現分心優化 (DO) 體驗。
- 媒體。只需幾個設置和一項服務,開發人員就可以擴展現有的媒體應用程序。雖然應用程序必須遵守汽車媒體模板,但開發人員可以自定義模板顏色、字體、圖標等,以創建品牌體驗。
- 通知。了解如何更改通知的外觀和配置。
術語
這些術語在 HMI 和相關文章中使用:
學期 | 定義 |
---|---|
核心應用 | 對系統功能至關重要的一組關鍵應用程序,包括設置、收音機、HVAC、媒體、撥號器和鍵盤。 |
兼容性定義文檔 (CDD) | 枚舉設備必須滿足的要求才能與最新版本的 Android 兼容。 |
兼容性測試套件 (CTS) | 免費的商業級測試套件,可在兼容性測試套件下載處下載。 |
定制 | 修改 AOSP 實施以滿足 OEM 要求的練習。通常,這涉及使用資源覆蓋來應用外觀更改,同時還要確保符合 CDD、CTS 和所有相關的用戶體驗指南。 |
英雄應用 | 一組對 Android 的各個方面都至關重要的關鍵應用程序,包括功能、可升級性、第三方開發者生態系統和最終用戶。英雄應用程序包括通知、設置、媒體和通訊中心/撥號器。相應的 AOSP 實施應具有生產質量。 |
資源疊加 | 要影響用戶界面的呈現,請使用此機制在編譯時(最常見)或運行時(運行時資源覆蓋 (RRO))替換顏色、更改尺寸、啟用繪圖和應用佈局資源。 |
系統界面 | 屬於系統的應用程序之外的用戶界面,例如導航欄、狀態欄、鎖屏和音量對話框。 |
主題 | 一組顏色和样式,用於確定繼承主題的組件和應用程序的外觀。 |
用戶體驗 (UX) | 用戶界面 (UI) 設計領域及其可用性。 |
定制
系統 UI 和其他核心系統應用程序的 AOSP 實現為啟動 HMI 開發過程奠定了堅實的基礎。修改 AOSP 實施(主要通過使用資源覆蓋)以滿足 OEM 的品牌、業務和法律要求的做法稱為定制。
雖然整個系統的設計和構建是靈活的,但預計不同的組件將在不同程度上進行定制:
系統用戶界面。 OEM 可以在 CDD 和 CTS 以及任何其他適用的 UX 指南提供的範圍內自定義或替換 AOSP 實施。
非英雄系統應用程序(也稱為參考) 。 OEM 可以自定義或替換 AOSP 實施。
英雄應用。每個應用程序都附帶一套詳細的自定義指南。強烈建議 OEM 使用 AOSP 實施,然後在這些指南提供的範圍內對其進行定制。
密度配置
為了確保在給定物理顯示配置的情況下正確呈現 UI 元素,必須將 density 屬性設置為與物理密度最匹配的存儲桶( Display Metrics ),例如構建文件中的此條目:
PRODUCT_PROPERTY_OVERRIDES := \ ro.sf.lcd_density=160
UX 限制引擎
CarUxRestrictionsManager為應用程序提供了一個掛鉤來監聽與駕駛狀態相關的變化,從而適當地修改用戶體驗。 OEM 可以覆蓋packages/services/Car/service/res/xml/car_ux_restrictions_map.xml
中的配置文件以影響系統的行為。
系統主題
規定係統範圍的默認項目集(例如顏色和文本樣式)的主題是DeviceDefault 。鼓勵 OEM 通過修改 DeviceDefault 主題來啟動整體定製過程。默認情況下,系統 UI 和 AOSP 中的所有系統應用程序都繼承自該主題。還鼓勵 OEM 開發的系統應用繼承 DeviceDefault。第三方開發的應用程序不應繼承 DeviceDefault,而是使用androidx.car庫中提供的androidx.car
。文件位置如下:
- 核心。
/frameworks/base/core/res/res/values/themes_device_defaults.xml
- 顏色。
/frameworks/base/core/res/res/values/colors_car.xml
- 樣式。
/frameworks/base/core/res/res/values/styles_car.xml
- 汽車覆蓋。
/packages/services/Car/car_product/overlay/.../values/themes_device_defaults.xml
OEM 預計將在其供應商目錄中具有與car_product
目錄並行的覆蓋結構,從而進一步擴展car_product
覆蓋。
主題遊樂場應用
此應用程序通過在一個地方可視化所有主題屬性來簡化自定義DeviceDefault
主題的過程。此外,通過比較某些樣式在此應用中與其他系統應用的呈現方式,開發人員可以快速調試主題問題。此應用程序可在以下位置獲得:
/packages/services/Car/tests/ThemePlayground
系統界面
系統 UI 包括/frameworks/base
下的所有 UI,主要位於/frameworks/base/packages/CarSystemUI
中。這包括導航欄、狀態欄、鎖定屏幕、音量對話框、toast、用戶選擇器和權限對話框。 OEM 可以通過資源覆蓋和主題廣泛地自定義系統 UI 組件,前提是每個組件都符合 CDD、CTS 和其他適用的 UX 指南的要求。
系統應用
Android Automotive 包括一組對整體系統功能至關重要的核心系統應用程序。其中,通信中心、媒體、通知和設置被視為英雄應用程序。
- 交流中心
- 暖通空調
- 輸入法(鍵盤)
- 啟動器(主屏幕)
- 本地媒體播放器
- 媒體
- 信使
- 通知
- 收音機
- 設置
主屏幕
主屏幕,稱為汽車啟動器,是 HMI 體驗的登錄頁面。 AOSP 實施僅供參考,OEM 預計會用他們自己的實施來替換實施,這通常會根據需要結合導航、媒體播放、通信和其他系統狀態。通常,Car Launcher 應用程序會顯示系統上可用的應用程序。要了解如何處理最近、包更改和無頭(無啟動器活動)應用程序等事件,請參閱參考實現。
通知
通知是 Android 操作系統的一個組成部分,並且相同的結構(包括提示通知、通知列表/中心、通知 API、排名和內聯操作)已包含在 Android Automotive 中。有關詳細信息,請參閱手持設備通知概述。為了優化汽車用例,進行了以下修改(與手持通知堆棧相比):
減少用戶可見的整體通知內容。從通知列表/中心刪除正在進行的媒體播放、正在進行的導航和系統應用程序的“不重要的”(LOW 及以下的重要性)前台服務通知,並理解這些通知要么是多餘的(例如,集群顯示媒體狀態) ) 或沒用。
刪除複雜的上下文控件(例如長按和基於滑動長度的控件)。
尊重 UX Restrictions 引擎配置。
- 可以根據驅動器狀態隱藏消息通知內容預覽。
- 所有字符串都以最大長度封頂。
在 Android 9 中添加了專門針對汽車的新通知類別,僅適用於以
android.uid.system
運行的捆綁系統應用程序。CATEGORY_CAR_EMERGENCY
。排名在通知列表的頂部。繞過請勿打擾 (DND) 控制。-
CATEGORY_CAR_WARNING
。排名低於緊急情況,高於其他(繞過免打擾)。 CATEGORY_CAR_INFORMATION
。根據“重要性”和新近度與其餘通知排名。
通知堆棧的端到端實現,從通知 API 到 UI,被認為是英雄應用程序。為了保證所有 HU 之間一致的 API 互操作性並最大限度地提高可升級性,強烈建議 OEM 採用 AOSP 實施,然後對其進行輕鬆定制。
定制
標準的 DeviceDefault 主題和資源覆蓋適用。數量非常有限的行為自定義旋鈕可在以下位置獲得:
packages/apps/Car/Notification/res/values/config.xml
設置
設置應用程序(汽車設置)是公開旋鈕的主要應用程序之一,用戶可以使用它來配置 Android 操作系統的各個方面和汽車的其餘部分。設置應用程序公開了操作系統中的 200 多項功能,這些功能與每個主要的 Android 版本緊密結合。為了實現可升級性並避免碎片化,強烈建議 OEM 採用 AOSP 實施,然後對其進行定制(而不是分叉實施)。
定制
設置應用程序將自定義考慮在內,並提供了多種自定義途徑。
主題化。啟用每個 Preference 對像類型的呈現方式的可視化自定義,包括:
Preference.DeviceDefault.CheckBoxPreference
Preference.DeviceDefault.DialogPreference.EditTextPreference
層次結構定制。要啟用:
啟動到任意根片段,在名為
Settings/res/values/config.xml
的文件中覆蓋config_settings_hierarchy_root_fragment
的值訂單、分組、文字、圖標等項目的自定義,覆蓋
Settings/res/xml/*.xml
靜態注入。在設置覆蓋項目時,OEM 可以通過定義並將額外的 Fragment 和 Controller 類添加到層次結構中來添加專有屏幕。
動態注入。如果一個單獨的應用程序 (
apk
) 託管一個必須從主設置應用程序鏈接的設置屏幕,則可以動態注入單獨的應用程序。有關詳細信息,請參閱動態首選項。
媒體
Media 是一個英雄應用程序,它代表實現MediaSession和MediaBrowser API 的媒體應用程序提供前端用戶體驗。媒體應用程序可以是第三方應用程序(例如 Spotify 和 Pandora)以及其他媒體源,例如藍牙 (BT) 流媒體和本地媒體。
Android Auto ( Projection ) 中提供了數百個媒體應用程序,所有這些應用程序都實現了這些媒體 API,如為 Auto 提供音頻播放中所述。媒體 API 會隨著每個主要的 Android 版本和Androidx庫的發布而發展。為保證所有媒體應用程序和未來 Android 版本之間的 API 互操作性,強烈建議 OEM 採用 AOSP 實施,然後對其進行定制。
定制
通過 DeviceDefault 主題的標準主題也適用於媒體。此外,如果自定義在 UX 指南的範圍內,則可以通過資源覆蓋進一步自定義外觀。
其他媒體應用
USB 媒體和媒體源
在可能的範圍內,強烈建議通過MediaSession和MediaBrowser API 的實現將這些媒體源插入到媒體(任何第三方媒體應用程序都是如此)。請參閱 AOSP 中的 LocalMediaPlayer 應用程序。此應用程序顯示本地媒體文件並在媒體中顯示為源。