Android CarFrameWork

Android Automotive平臺

Android Automotive是通過Android的通用框架,語言和API來實現的一個全棧,開源,高度可定制的平臺。

1. Android Automotive與整個Android生態系統的關系

  • Android Automotive是Android的一部分。 Android Automotive不是Android的分支或并行開發,它與手機,平板電腦等安卓設備上的Android具有相同的代碼庫,并且位于相同的存儲庫中。它基于經過10多年開發的強大平臺和功能集,可利用現有的安全模型,兼容性程序,開發人員工具和基礎架構,同時繼續具有高度可定制性和可移植性,完全免費和開源的特點。

  • Android Automotive擴展了Android 。在將Android打造為功能齊全的信息娛樂平臺的過程中,我們添加了對汽車特定要求,功能和技術的支持。就像今天用于移動設備的Android一樣,Android Automotive將是一個完整的汽車信息娛樂平臺。

2. Android Automotive架構

Automotive

Android Automative是在原先Android的系統架構上增加了一些與車相關的(圖中虛線框中綠色背景的)模塊。

  • Car App :包括OEM和第三方開發的App
  • Car API :提供給汽車App特有的接口
  • Car Service :系統中與車相關的服務,主要是基于CarProperty實現Vechile相關的一些策略
  • Vehicle Network Service :汽車的網絡服務
  • Vehicle HAL :汽車的硬件抽象層描述,定義 OEM 可以實現的車輛屬性的接口

Android CarAPI

CarAPI

· annotation:包含了兩個注解。
· app
· menu:車輛應用菜單相關API。
· cluster:儀表盤相關API。
· render:渲染相關API。
· content
· pm:應用包相關API。
· diagnostic:包含與汽車診斷相關的API。
· hardware:車輛硬件相關API。
· cabin:座艙相關API。
· hvac:通風空調相關API。
· property:屬性相關API(實現定制的property)。
· radio:收音機相關API。
· input:輸入相關API。
· media:多媒體相關API。
· navigation:導航相關API。
· settings:設置相關API。
· vms:汽車監測相關API

這些api集合中,我們可以通過CarpropertyManager去實現定制的property功能,簡要類圖:


1.CarpropertyManager內部方法

  • 通過registerListener注冊自定義的propertyId以及property變更通知的callback
  • 解注冊CarpropertyEventListener


  • 獲取所有property, 返回一個元素類型是CarpropertyConfig的list


  • 獲取property狀態


  • 獲取property value


  • 設置property value


2.CarpropertyManager與service層交互的AIDL接口

需要注意的是ICarProperty是同步接口,ICarPropertyEventListener是異步接口。

onEvent傳上來的是參數是CarPropertyEvent的list,CarPropertyEvent中包含event type與CarPropertyValue;
eventType包含PROPERTY_EVENT_PROPERTY_CHANGE與PROPERTY_EVENT_ERROR,分別對應listener中的onPropertyChanged和PROPERTY_EVENT_ERROR, CarPropertyValue則包含具體的propId、propValue等具體屬性信息。

Android CarService

代碼目錄: packages/services/Car/service
  • CarService并非一個服務,而是一系列的服務。這些服務都在ICarImpl.java構造函數中列了出來


1.CarService相關服務啟動流程

  • SystemServer.java 啟動CarServiceHelperService服務(frameworks/base/services/java/com/android/server/SystemServer.java)


  • CarServiceHelperService.java ,綁定carservice服務 (frameworks/opt/car/services/src/com/android/internal/car/CarServiceHelperService.java)


  • CarService.java ,創建ICarImpl實例,并調用init方法. (packages/services/Car/service/src/com/android/car/CarService.java)


  • ICarImpl.java 構造函數中啟動服務, 調用對應服務得init方法. (/packages/services/Car/service/src/com/android/car/ICarImpl.java)


2.CarPropertyService

  • 實現了ICarProperty, CarServiceBase, PropertyHalService.PropertyHalListener 接口中的方法
  • registerListener調用PropertyHalService的subscribeProperty方法,同時會將最新值同步上層。


  • getPropertyList、setProperty、getProperty主要檢查了讀寫權限。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容