車載應用技術——Android Automotive系統

android禿老師 發佈 2022-09-26T02:37:38.480496+00:00

黃金賽道在智慧型手機行業初興起時,包括BAT在內許多傳統網際網路企業都曾布局手機產業,但是隨著手機市場的基本定型,造車似乎又成了各大資本下一個追逐的方向。

黃金賽道

在智慧型手機行業初興起時,包括BAT在內許多傳統網際網路企業都曾布局手機產業,但是隨著手機市場的基本定型,造車似乎又成了各大資本下一個追逐的方向。百度、小米先後宣布造車,阿里巴巴則與上汽集團共同投資創立了,面向汽車全行業提供智能汽車作業系統和智能網聯汽車整體解決方案的斑馬網絡,一時間造車儼然成了資本市場的下一個風口。

而作為移動端作業系統的霸主 - Android,也以一種新的姿態高調侵入造車領域,這就是 Android 車載信息娛樂系統 - Android Automotive。

Android automotive簡介

Android Automotive作為車載信息娛樂系統必須具備查看、控制整車其它子系統(如 空調)的能力,但是不同的製造商提供的總線類型和協議之間有很大差異,例如控制器區域網 (CAN) 總線、區域互連網路 (LIN) 總線、面向媒體的系統傳輸 (MOST) 總線以及汽車級乙太網和 TCP/IP 網絡(如 BroadR-Reach)。

Android Automotive 的硬體抽象層 (HAL) 為 Android 框架提供了一致的接口(無需考慮物理傳輸層),系統集成商可以將特定功能的平台 HAL 接口(如 空調)與特定於技術的網絡接口(如 CAN 總線)連接,以實現車載 HAL 模塊。

Android automotive的系統架構圖如下:Android Automative是在原先Android的系統架構上增加了一些與車相關的模塊。

  • Car App:包括OEM和第三方開發的App
  • Car API:提供給汽車App特有的接口
  • Car Service:系統中與車相關的服務
  • Vehicle Network Service:汽車的網絡服務
  • Vehicle HAL:汽車的硬體抽象層描述

模塊介紹

1.1 Car App

包括 OEM廠商和第三方的apk,聲明代碼路徑如下,car_base下主要是系統的基礎平台,car.mk為添加的所有汽車製造的通用製造文件,這個列表中,首字母大寫的模塊基本上都是汽車系統中專有的App。源碼位於android/packages/services/Car,當然我們自己也可以添加apk,這部分相對來說用到java比較多,後面有機會往更深層的學習。

1.2 Car ApI

提供給汽車app特有的接口。這些API是提供給Android automotive系統的app,對於其他平台(例如手機和平板)通常是沒有意義的,所以這些API沒有包含在Android Framework SDK中。如圖是幾乎涵蓋了Android automotive所有的api接口。

代碼的路徑位於:

下面介紹一下關鍵的接口:

car.java:包含了與車相關的基本API。例如:車輛後視鏡,門,座位,窗口等。

  • app →menu:車輛應用菜單相關API。
  • cluster:儀錶盤相關API。
  • media:多媒體相關API。
  • hardware:車輛硬體相關API。
  • navigation:導航相關API。
  • settings:設置相關API。

1.3 Car Services

Android Automative中的Car Service集中在一個App中。可以想像,這個App需要非常高的權限,所以這是一個系統App。Car Service並非一個服務,而是一系列的服務。這些服務都在ICarImpl.java構造函數中列了出來。

還有幾個模塊沒有出現在上面的架構圖中。但它們也包含在了Android Automative系統中,這裡一併介紹一下。

  • VMS:vehicle monitor service, 汽車其他服務監測,主要是監測其他進程。
  • ODB2: ODB全稱是On-Board Diagnostics。這是一種裝置於車中用以監控車輛運行狀態和回報異常的系統,可於車輛的子系統出現問題時,產生故障代碼和提醒訊號通知車主和車廠診斷維修
  • VNS: Vehicle Network Service,

1.4 Vehicle HAL

車載HAL使用以下接口:

  • vehicle_prop_config_t const (list_properties)(..., int* num_properties) 列出車載 HAL 所支持的所有屬性的配置。車輛網絡服務只會使用受支持的屬性。
  • (*get)(..., vehicle_prop_value_t data) 讀取屬性的當前值。對於區域屬性,每個區域都可能具有不同的值。
  • (*set)(..., const vehicle_prop_value_t data) 為屬性寫入相應值。寫入的結果是按屬性進行定義。
  • (subscribe)(..., int32_t prop, float sample_rate, int32_t zones) 監視屬性值的變化,回調見下文。
  • (release_memory_from_get)(struct vehicle_hw_device device, vehicle_prop_value_t *data) 釋放從 get 調用分配的內存。

車載HAL使用以下回調接口:

  • (*vehicle_event_callback_fn)(const vehicle_prop_value_t event_data) 通知車輛屬性值的變化。
  • (*vehicle_error_callback_fn)(int32_t error_code, int32_t property, int32_t operation) 返回全局車載 HAL級錯誤或每個屬性的錯誤。全局錯誤會導致HAL重新啟動,這可能導致包括應用在內的其他組件重新啟動。

以上是對Android automotive的簡單介紹以及他的模塊劃分;車機技術在現在這個節點無疑是一個「黃金賽道」,之所以很多Android應用開發轉車載系統應用工程師;肯定是看到了這個行業前景。

還有對行業迷茫的Android開發人員,一定要抓住行業機遇;對此我推薦這個車載學習資料《車載系統開發技術PDF》;希望能夠利用好,對大家有很大幫助!

【私信發送:「手冊」獲取】Android車載學習手冊

隨著燃油車的退場;迎來新能源汽車普及。跟著國家的號召絕對是正確選擇!市場決定崗位發展。

關鍵字: