使用電腦版車用運算主機進行測試

電腦版車用運算主機 (DHU) 可讓開發機器模擬 Android Auto 車用運算主機,方便您執行及測試 Android Auto 應用程式。DHU 可在 Windows、macOS 和 Linux 系統上執行。

安裝 DHU 後,您可以依照「執行 DHU」所述,使用其中一種支援的連線機制將行動裝置連線至 DHU,藉此測試 Android Auto 應用程式。

如要回報錯誤或要求 DHU 相關功能,請使用此 Issue Tracker

安裝 DHU

請按照下列步驟在開發機器上安裝 DHU:

  1. 按照「設定裝置端開發人員選項」的說明,在搭載 Android 9 (API 級別 28) 以上版本的行動裝置上啟用開發人員模式。
  2. 在裝置上編譯及安裝應用程式。
  3. 安裝 Android Auto 應用程式。如果已安裝 Android Auto,請確認使用的是最新版本。
  4. 請在 Android Studio 中開啟 SDK Manager,接著前往「SDK tools」分頁,下載「Android Auto Desktop Head Unit Emulator」套件。

SDK Manager 顯示 DHU 2.0 版

DHU 會安裝在 SDK_LOCATION/extras/google/auto/ 目錄中。

  1. 如果作業系統是 Linux 或 macOS,請在該目錄中執行下列指令,確保 DHU 二進位檔能順利執行:

    chmod +x ./desktop-head-unit
    

Linux 適用的其他步驟

如果是在 Linux 系統上執行 DHU 2.x 版,則需要安裝其他程式庫。DHU 二進位檔需要使用 GLIBC 2.32 以上版本。如要查看系統的 GLIBC 版本,請執行下列指令:

ldd --version

如果是 2.32 以下版本,請更新至 GLIBC 2.32 以上版本。為此,您可能需要將 OS 升級至與 GLIBC 2.32 以上版本相容的版本。

您也必須安裝 libc++1libc++abi1 程式庫。安裝 程序會因 Linux 發行版而異,例如,如果使用 Debian Linux 發行版本,則可以使用此指令來安裝程式庫:

sudo apt-get install libc++1 libc++abi1

安裝 DHU 的預先發布版

如要存取 DHU 的預先發布版,您可以使用 Android Studio 的預先發布版或是為目前安裝的 Android Studio 變更更新管道,改為使用 Beta 版管道。

執行 DHU

安裝 DHU 後,您可以透過 USB 連接行動裝置與工作站,測試 Android Auto 應用程式。請使用配件模式 (DHU 2.x 版的建議做法) 或 ADB 通道,將行動裝置連線至開發機器,即可執行 DHU。

使用配件模式建立連線

Android Auto 支援透過 Android Open Accessory (AOA) 通訊協定連線至 DHU 2.x 版。請輸入下列指令:

./desktop-head-unit --usb

根據預設,DHU 會掃描可用 USB 裝置的清單,並嘗試連線至第一部相容的裝置。如要指定特定裝置,請在 --usb 指令中加入裝置 ID,如下所示:

./desktop-head-unit --usb=[DEVICE_ID]

使用 ADB 通道建立連線

這種方法需要透過 Android Debug Bridge (adb),設定與 Android Auto 車用運算主機伺服器的連線。請按照下列步驟,設定通道及執行 DHU:

  1. 如果尚未啟用 Android Auto 開發人員模式,請啟用這個模式
  2. 如果車用運算主機伺服器仍未執行,請開啟溢位選單,然後選取「啟動車用運算主機伺服器」,如圖 1 所示。

    在裝置上,通知區會顯示前景服務,說明伺服器正在執行,如圖 2 所示。

    包含開發人員選項的內容選單

    圖 1. 包含開發人員選項的內容選單。

    說明車用運算主機伺服器正在執行的通知

    圖 2. 說明車用運算主機伺服器正在執行的通知。

  3. 在 Android Auto 應用程式中,輕觸「設定」頂端附近的「先前連線的車輛」,並確認已啟用「在 Android Auto 中新增車輛」

  4. 使用 USB 連接行動裝置和開發機器。

  5. 確認行動裝置螢幕已解鎖,以便啟動 DHU。

  6. 在開發機器上執行下列 adb 指令,從開發機器的通訊埠 5277,將通訊端連線轉送至 Android 裝置上編號相同的通訊埠。這個設定可讓 DHU 透過 TCP 通訊端,連線至在行動裝置上執行的車用運算主機伺服器。

    adb forward tcp:5277 tcp:5277
    
  7. 執行指令 desktop-head-unit.exe (Windows),或從 SDK_LOCATION/extras/google/auto/ 目錄執行 ./desktop-head-unit (macOS 或 Linux),即可啟動 DHU。

    cd SDK_LOCATION/extras/google/auto
    desktop-head-unit.exe # Windows
    ./desktop-head-unit # macOS or Linux
    

DHU 在開發機器上執行

  1. 如果是首次建立行動裝置與 DHU 的連線,請查看行動裝置螢幕,接受服務條款,並視需要調整權限設定。

啟動 DHU 後,即可使用 DHU 控制台指令執行及測試應用程式。

指令列選項

根據預設,車用運算主機伺服器會透過通訊埠 5277 進行連線。如要覆寫主機或通訊埠,請使用 --adb=<[localhost:]port> 標記,如以下範例所示:

./desktop-head-unit --adb=5999

根據預設,DHU 會模擬與 Android Auto 相容的車用運算主機,並提供觸控螢幕使用者介面。如要模擬使用者輕觸動作,請使用滑鼠點選 DHU。如要模擬採用旋轉控制器做為輸入方式的車用運算主機,您可以使用 -i rotary 標記,如以下範例所示:

./desktop-head-unit -i controller

DHU 處於旋轉控制器模式時,您就能使用鍵盤快速鍵模擬控制器作業。詳情請參閱「旋轉控制器」一節。在旋轉控制器模式中,DHU 會忽略滑鼠點選動作。您必須透過模擬的旋轉控制器作業,才能操作 Android Auto。

下表為其他 DHU 指令列選項:

選項 說明
-c--config=FILE 使用指定的設定 .ini 檔案。詳情請參閱「設定 DHU」一節。
-i--input=INPUT 使用指定的輸入模式,可以是以下任一種:touchrotaryhybrid
-a--adb=HOSTPORT 使用 ADB 傳輸,可選用 host:portport。預設為通訊埠 5277。
-a--usb=DEVICE_ID 使用 USB AOA 傳輸,可選用 DEVICE_ID
-v--version 顯示版本資訊。
-l--licenses 顯示開放原始碼授權。
-h--headless 以無頭模式執行,無 UI。
-t--always_show_window_on_top 在其他視窗上方顯示 DHU 視窗 (預設為關閉)
-?--help 顯示說明資訊。

DHU 使用指南

本節將說明 DHU 支援的功能和使用方式。

請在先前啟動 DHU 的終端機視窗中輸入指令。只要使用 ; 分隔指令,即可在同一行執行多個指令。

系統

指令 說明
help [command] 顯示完整指令集。如有指定的指令名稱,就會顯示該指令的說明。
quit
exit
Alt+Q 結束車用運算主機。
sleep [seconds] 休眠一秒鐘。如有指定的延遲時間,休眠長度則為許多 seconds。這可用來為包含 ./desktop-head-unit < script.txt 的車用運算主機編寫指令碼,例如 CI 環境。
screenshot filename.png 將螢幕截圖儲存至 filename.png.
licenses 顯示 DHU 所使用程式庫的授權。
keycode keycode 從「按鍵碼」該節所列的名稱中,擇一做為 keycode 傳送。

觸控和觸控板

已啟用觸控功能或觸控板的情況下,螢幕視窗 (適用於觸控功能) 或觸控板視窗 (適用於觸控板) 中的點選動作皆會註冊為觸控事件。

針對觸控功能,如要模擬多點觸控手勢,請按一下滑鼠右鍵指定第一指的位置,然後點選並按住右鍵來代表第二指。雙指的中心點會固定,您只要移動滑鼠,就能以該處為圓心旋轉雙指,或是以雙指向內和/或向外撥動。

若是模擬觸控板,只要點選並按住左鍵,即可在畫面上的不同 UI 元素之間捲動。如要選取聚焦元素,請點選右鍵。

指令 說明
tap x y 在指定的座標模擬觸控事件。

旋轉控制器

DHU 支援旋轉控制器功能。啟用這項功能時,系統會支援以下動作:

  • 點選 D-Pad 的上、下、左、右按鈕
  • 順時針與逆時針旋轉
  • 執行旋轉轉動手腕動作 (一次五個步驟)
  • 點選控制器的向下和返回按鈕

下表為指令和按鍵繫結。

滑鼠滾輪會傳送 dpad rotate 指令,按一下滑鼠中間的鍵 (通常是滾輪) 則會傳送 dpad click 指令。

請注意,大部分車輛都提供觸控螢幕。有些車輛只有旋轉控制器,有些則同時提供觸控功能和控制器。車輛也可能支援觸控板,用來平移地圖和輸入文字。模擬不同的車用運算主機時,請注意這些不同的設定。

指令 說明
dpad {up|down|left|right} 方向鍵 移動旋轉控制器。
dpad {ur|dl|ul|dr} 移動旋轉控制器。
dpad soft {left|right} Shift+方向鍵 按下某些旋轉控制器提供的側邊按鈕。
dpad click Return 鍵 按下旋轉控制器。
dpad back Backspace 按下部分旋轉控制器下方會提供的返回按鈕。
dpad rotate left 1 以逆時針方向轉動旋轉控制器 (左)。
dpad rotate right 2 以順時針方向轉動旋轉控制器 (右)。
dpad flick left Shift+1 以逆時針方向快速轉動旋轉控制器。
dpad flick right Shift+2 以順時針方向快速轉動旋轉控制器。
dpad 0-9*#+ 數字鍵

麥克風

DHU 支援使用麥克風進行語音輸入,或播放預錄的語音檔案。為了方便起見,DHU 包含以下常見語音指令的音檔。這些音檔位於 SDK_LOCATION/extras/google/auto/voice/ 目錄。

檔案名稱 文字
navhome.wav 前往住家。
navwork.wav 導航到公司。
navsoh.wav 前往雪梨歌劇院。
navgoogle.wav 導航到美國加州圓形劇場園道 (Amphitheatre Parkway) 1600 號。
exitnav.wav 結束導航。
howlong.wav 需要多久才會抵達?
showtraffic.wav 顯示路況。
showalternateroute.wav 顯示替代路線。
pause.wav 暫停播放音樂。
nextturn.wav 下次何時要轉彎?

如要在 DHU 提示中執行個別 .wav 檔案,請使用下列指令:

mic play /path/to/filename.wav

下表為其他麥克風相關指令:

指令 說明
mic begin M 啟用麥克風,模擬點選方向盤按鈕的動作,然後等待來自電腦麥克風的輸入內容。
mic play filename.wav 啟用麥克風,然後播放指定 WAV 錄音檔。注意:您不會聽到系統播放 WAV 檔案,但會聽到 Android Auto 的回應。
mic repeat 使用 mic play 重複播放上一個錄音檔。
mic reject {on|off} 啟用或停用針對麥克風要求的拒絕功能。如果開啟這項功能,所有麥克風要求都會遭到拒絕。

感應器

如需 DHU 模擬車輛感應器資料的變化,請使用下列指令。如要模擬感應器資料,並將資料傳送至 Android Auto,請務必在啟動 DHU 時,透過 .ini 設定檔案啟用相對應的感應器。

指令 說明
fuel [percentage] 將燃油量設為指定的百分比,或在沒有值傳入的情況下,停用燃油量。
range [km] 將範圍設為指定的公里數,或在沒有值傳入的情況下,停用範圍資料。
lowfuel [{on|off}] 設定低油量警告感應器,或在沒有值傳入的情況下,停用感應器。
accel [x] [y] [z] 將加速計設為指定的 x、y 和 z 值 (m/s^2),或在沒有參數傳入的情況下,取消設定加速計資料。視需要傳入 NAN 值,即可略過選用參數。
compass bearing [pitch] [roll] 設定指南針的指定軸承、俯仰角和旋轉角 (以度為單位)。視需要傳入 NAN 值,即可略過選用參數。
gyro [x] [y] [z] 將陀螺儀設為指定的 x、y 和 z 旋轉速度 (rad/s),或在沒有參數傳入的情況下,取消設定陀螺儀資料。視需要傳入 NAN 值,即可略過選用參數。
location lat long [accuracy] [altitude] [speed] [bearing] 將位置設為指定的經緯度值,以及選用精確度 (m)、高度 (m)、速度 (m/s) 和方位角 (以度為單位)。視需要傳入 NAN 值,即可略過選用參數。
odometer km [current_trip_km] 將里程計設為指定的公里數,並視需要設定目前行程公里數的值。
speed [speed] 將車輛速度設為指定的值 (m/s),或在沒有值傳入的情況下,停用感應器。
tollcard {insert|remove} 插入或移除付費卡。
gps_satellite number_in_use [[azimuth] [elevation] [prn] [snr] [used_in_fix]] 將 GPS 衛星感應器設為使用中的指定數值,搭配選用的方位角 (0 到 360 之間的度數)、仰角 (0 到 90 之間的度數)、prn (偽隨機雜訊)、信號雜訊比 (dB) 清單,並用於修正 (truefalse)。
parking_brake engaged 將停車煞車感應器設為 truefalse
gear gear_value 將齒輪感應器設為指定值 (例如 0 代表中性、100 代表行車、101 代表停車,而 102 代表倒車)。

日間模式和夜間模式

DHU 使用下列指令和金鑰繫結,模擬日間及夜間模式的切換。

指令 說明
day Shift+N 啟用日間模式:高亮度、全彩。
night Ctrl+N 啟用夜間模式:低亮度、高對比度。
daynight
nightday
N 切換日間或夜間模式。

焦點管理

DHU 可使用下列指令,模擬 Android Auto 的焦點是否在車用運算主機上:

指令 說明
focus video {on|off|toggle} 啟用或停用車用運算主機上的視訊焦點。關閉視訊焦點後,即可模擬車用運算主機進入原生模式的情況。
focus audio {on|off|toggle} 啟用或停用車用運算主機上的音訊焦點。關閉音訊焦點後,即可模擬車用運算主機播放自己音訊來源的情況。
focus nav {on|off|toggle} 啟用或停用車用運算主機上的瀏覽焦點。關閉瀏覽焦點後,即可模擬車用運算主機執行本身瀏覽系統的情況。

限制和行車狀態

DHU 可使用下列指令,模擬行車期間的特定限制,例如停用鍵盤和拒接來電設定:

指令 說明
restrict none U 停用所有限制。
restrict all Shift+U 啟用所有限制,例如用來模擬行車狀態。

儀表板

DHU 可模擬儀表板。這種儀表板通常位於方向盤後方,會在導航期間顯示距離、時間或下個轉彎路口的基本資訊,例如下個路口的名稱或轉彎箭頭。儀表板也會顯示有關進行中通話的資訊。

DHU 的儀表板視窗,顯示導航和通話狀態資訊

如需啟用這項功能,請使用設定檔 [general] 區段中的 instrumentcluster 項目,或者透過 navclusterphonecluster 項目分別控管這兩項功能。

[general]
...
instrumentcluster = true

儀表板螢幕

部分車輛的儀表板螢幕可顯示豐富的視覺資訊,例如地圖圖塊。從 DHU 2.1 版開始 (目前可透過 Android Studio Beta 版更新管道取得),您可以在開發機器上模擬這類螢幕畫面。

只要使用含有儀表板 [display] 區段的設定檔即可。[display] 區段支援的影片設定選項,與該檔案 [general] 區段中設定的主要顯示畫面相同。

圖 3. 使用次要儀表板螢幕執行 DHU 時的主畫面。
圖 4. 使用次要儀表板螢幕執行 DHU 時的儀表板畫面。
...

# The display name following the colon can be whatever you like.
[display:cluster]
# Setting the displaytype as cluster is what lets the DHU know how to handle it.
displaytype = cluster
resolution = 800x480
dpi = 160
...

您可以直接將這項設定加入現有 .ini 檔案,或是放在獨立的檔案中,並在啟動 DHU 時傳送多個設定檔,重複使用這項設定。使用多個設定檔時,指定值的較新定義會覆寫較舊定義。

# Launch your landscape configuration with your cluster display configuration
./desktop-head-unit -c landscape.ini -c cluster.ini

# Launch the portait configuration with the same cluster display configuration
./desktop-head-unit -c portrait.ini -c cluster.ini

媒體播放狀態

DHU 可顯示媒體播放狀態的額外資訊,例如播放中曲目的名稱。

DHU 的媒體播放狀態視窗,顯示播放資訊

您可以使用 [general] 區段中的 playbackstatus 項目啟用這項功能。

[general]
...
playbackstatus = true

按鍵碼

DHU 提供一組預設按鍵碼,可模擬車輛常見的快速鍵組合。例如,DHU 提示會觸發 home 按鍵碼,如下所示:

keycode home

下表為其他可用的按鍵碼:

按鍵碼 說明
home 前往主畫面。
back 返回
call
endcall
撥打或結束通話。
search 觸發搜尋。
media_play_pause
media_play
media_pause
播放或暫停媒體。
media_next
media_previous
前往下一首或上一首媒體曲目。
media 前往預設媒體應用程式。
navigation 前往預設導航應用程式。
tel 前往預設電話應用程式。

設定 DHU

DHU 支援 .ini 設定檔,可切換觸控和旋轉控制器這兩種輸入模式,以及設定車用運算主機向手機要求的影格速率、解析度和 DPI。

設定檔的預設位置為 ~/.android/headunit.ini。如果要在系統中變更車用運算主機的設定,請修改這個檔案。

您也可以使用 -c 標記,指定要載入的設定檔:

./desktop-head-unit -c /path/to/config.ini

以下程式碼片段為設定範例:

[general]
touch = true
touchpad = false
controller = false
instrumentcluster = false
resolution = 800x480
dpi = 160
framerate = 30
fueltypes = unleaded,electric,hydrogen
evconnectors = supercharger

設定檔範例位於 SDK_LOCATION/extras/google/auto/config/ 資料夾中,示範您可以測試的不同車用運算主機設定。如要進一步瞭解進階用途,請參閱以下支援的設定。

輸入設定

下表為輸入設定選項:

姓名 預設 類型 說明
inputmode default 字串 定義輸入模式。touchrotaryhybrid 選項可啟用或停用觸控螢幕和旋轉功能,並可視情況設定預設按鍵碼。default 會依循 touchcontroller 選項。
controller false 布林值 啟用旋轉控制器輸入功能。忽略不看,除非 inputmodedefault
touch true 布林值 啟用觸控螢幕。除非 inputmodedefault,否則會遭到忽略。
touchpad false 布林值 啟用觸控板。
touchpadnavigation false 布林值 啟用觸控板,即可用於 UI 導覽。
touchpadtapasselect false 布林值 設為 true 時,輕觸觸控板將作為選取事件。
touchpaduiabsolute false 布林值 如果 touchpadnavigationtrue,就會設定觸控動作是否應視為絕對值或手勢。

影片設定

Android Auto 支援三種影片解析度:

  • 480p (800x480,這是預設值)
  • 720p (1280x720)
  • 1080p (1920x1080)

如要支援其他顯示比例,可以視需要在車用運算主機中指定上下黑邊 (左右黑邊)。舉例來說,如要使用 1000x600 的螢幕,請將解析度設為 720p (1280x720),並將 marginwidthmarginheight 分別設為 280 和 120。如此一來,左右兩側邊界就會增加 140 px,上下兩側邊界則增加 60 px。

以下範例設定模擬常見的 6 吋螢幕 (750x450):

[general]
...
resolution = 800x480
marginwidth = 50
marginheight = 30

以下範例設定模擬相當寬的螢幕:

[general]
...
resolution = 1280x720
marginwidth = 0
marginheight = 220

下表為其他影片設定選項:

姓名 預設 類型 說明
resolution 800x480 字串 只能設定為800x4801280x7201920x1080 之一。
dpi 160 整數
normalizedpi false 布林值 設為 true 時,DHU 視窗大小就會縮減,藉此容納較大的 DPI 值。設為 false 時,視窗大小會隨著 DPI 值增加而放大,雖然無法模擬實際的顯示畫面,但有助於檢查影像內容。
realdpi 160 整數 用於影片設定。
framerate 30 整數 用於影片設定。
marginheight 0 整數 用於影片設定。
marginwidth 0 整數 用於影片設定。
margins 0,0,0,0 字串 用於影片設定。覆寫 marginwidthmarginheight (如有)。格式為上、下、左、右。
contentinsets 0,0,0,0 字串 用於影片設定。格式為上、下、左、右。
stablecontentinsets 0,0,0,0 字串 用於影片設定。預設值為 contentinsets。格式為上、下、左、右。
cropmargins false 布林值 如果 marginsmarginheightmarginwidth 有設置指定值,在此設定使用 true 值,則會移除播放影片中的邊界。這反映了 與使用者看到的畫面密切相關
pixelaspectratio 1.0 浮點數 用於影片設定。

感應器設定

如要模擬感應器資料,並將資料傳送至 Android Auto,請務必使用下列選項啟用相對應的感應器。如未啟用感應器,系統會忽略所有使用 DHU 指令針對該感應器傳送的資料。這項設定必須設置在 [sensors] 區段,而非其他大多數設定使用的 [general] 區段。

[general]
touch = true
...

[sensors]
location = true
fuel = true
...
姓名 預設 類型 說明
accelerometer false 布林值 啟用加速計感應器資料。
compass false 布林值 啟用指南針感應器資料。
driving_status false 布林值 啟用行車狀態感應器資料。
fuel false 布林值 啟用燃料感應器資料。
gyroscope false 布林值 啟用陀螺儀感應器資料。
location false 布林值 啟用車輛位置感應器資料。
night_mode false 布林值 啟用夜間模式感應器資料。
odometer false 布林值 啟用里程計感應器資料。
speed false 布林值 啟用速度感應器資料。
toll_card false 布林值 啟用付費卡感應器資料。
gps_satellite false 布林值 啟用 GPS 衛星感應器資料。
parking_brake false 布林值 啟用停車煞車感應器資料。
gear false 布林值 啟用齒輪感應器資料。

其他設定選項

下表為其他設定選項:

姓名 預設 類型 說明
instrumentcluster false 布林值 啟用儀表板。新增視窗至 UI 以顯示導覽 以及手機狀態
navcluster false 布林值 啟用儀表板。新增視窗至 UI,即可顯示導航狀態。
phonecluster false 布林值 啟用儀表板。新增視窗至 UI,即可顯示手機 狀態。
playbackstatus false 布林值 啟用播放狀態。新增視窗至 UI,即可顯示播放畫面 狀態訊息。
driverposition left 字串 只能設為以下任一種:leftcenterright
windowleft 整數 設定主視窗的左側位置。
windowtop 整數 設定主視窗的頂部位置。
fueltypes unleaded 字串 包含下列一或多個項目,格式為以半形逗號分隔的清單:
  • unleaded
  • leaded
  • diesel-1
  • diesel-2
  • biodiesel
  • e85
  • lpg
  • cng
  • lng
  • hydrogen
  • electric
  • other
  • unknown
evconnectors 字串 包含下列零或多個項目,格式為以半形逗號分隔的清單:
  • j1772
  • mennekes
  • chademo
  • combo-1
  • combo-2
  • roadster
  • hpwc
  • gbt
  • supercharger
  • other
  • unknown
只有在 fueltypes 包含 electric 的情況下,才需要設定這個選項。

疑難排解

DHU 首次連線時,偶爾會顯示空白畫面。如要解決這個問題,請按照下列步驟操作:

  1. 關閉 DHU。
  2. 按照「執行 DHU」所述的步驟 5 操作,先關閉再重新啟動車用運算主機伺服器。
  3. 重新啟動 DHU。
  4. 授予手機畫面上要求的任何其他權限。DHU 可能會再次關閉。
  5. 請視需要重新啟動 DHU。