電腦版車用運算主機 (DHU) 可讓開發機器模擬 Android Auto 車用運算主機,方便您執行及測試 Android Auto 應用程式。DHU 可在 Windows、macOS 和 Linux 系統上執行。
安裝 DHU 後,您可以依照「執行 DHU」所述,使用其中一種支援的連線機制將行動裝置連線至 DHU,藉此測試 Android Auto 應用程式。
如要回報錯誤或要求 DHU 相關功能,請使用此 Issue Tracker。
安裝 DHU
請按照下列步驟在開發機器上安裝 DHU:
- 按照「設定裝置端開發人員選項」的說明,在搭載 Android 9 (API 級別 28) 以上版本的行動裝置上啟用開發人員模式。
- 在裝置上編譯及安裝應用程式。
- 安裝 Android Auto 應用程式。如果已安裝 Android Auto,請確認使用的是最新版本。
- 請在 Android Studio 中開啟 SDK Manager,接著前往「SDK tools」分頁,下載「Android Auto Desktop Head Unit Emulator」套件。
DHU 會安裝在 SDK_LOCATION/extras/google/auto/
目錄中。
如果作業系統是 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++1
和 libc++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:
- 如果尚未啟用 Android Auto 開發人員模式,請啟用這個模式。
如果車用運算主機伺服器仍未執行,請開啟溢位選單,然後選取「啟動車用運算主機伺服器」,如圖 1 所示。
在裝置上,通知區會顯示前景服務,說明伺服器正在執行,如圖 2 所示。
在 Android Auto 應用程式中,輕觸「設定」頂端附近的「先前連線的車輛」,並確認已啟用「在 Android Auto 中新增車輛」。
使用 USB 連接行動裝置和開發機器。
確認行動裝置螢幕已解鎖,以便啟動 DHU。
在開發機器上執行下列
adb
指令,從開發機器的通訊埠 5277,將通訊端連線轉送至 Android 裝置上編號相同的通訊埠。這個設定可讓 DHU 透過 TCP 通訊端,連線至在行動裝置上執行的車用運算主機伺服器。adb forward tcp:5277 tcp:5277
執行指令
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 的連線,請查看行動裝置螢幕,接受服務條款,並視需要調整權限設定。
啟動 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 |
使用指定的輸入模式,可以是以下任一種:touch 、rotary 或 hybrid 。 |
-a 、--adb=HOSTPORT |
使用 ADB 傳輸,可選用 host:port 或 port 。預設為通訊埠 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) 清單,並用於修正 (true 或 false )。 |
parking_brake engaged |
將停車煞車感應器設為 true 或 false 。 |
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 可模擬儀表板。這種儀表板通常位於方向盤後方,會在導航期間顯示距離、時間或下個轉彎路口的基本資訊,例如下個路口的名稱或轉彎箭頭。儀表板也會顯示有關進行中通話的資訊。
如需啟用這項功能,請使用設定檔 [general]
區段中的 instrumentcluster
項目,或者透過 navcluster
或 phonecluster
項目分別控管這兩項功能。
[general]
...
instrumentcluster = true
儀表板螢幕
部分車輛的儀表板螢幕可顯示豐富的視覺資訊,例如地圖圖塊。從 DHU 2.1 版開始 (目前可透過 Android Studio Beta 版更新管道取得),您可以在開發機器上模擬這類螢幕畫面。
只要使用含有儀表板 [display]
區段的設定檔即可。[display]
區段支援的影片設定選項,與該檔案 [general]
區段中設定的主要顯示畫面相同。
...
# 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 可顯示媒體播放狀態的額外資訊,例如播放中曲目的名稱。
您可以使用 [general]
區段中的 playbackstatus
項目啟用這項功能。
[general]
...
playbackstatus = true
按鍵碼
DHU 提供一組預設按鍵碼,可模擬車輛常見的快速鍵組合。例如,DHU 提示會觸發 home
按鍵碼,如下所示:
keycode home
下表為其他可用的按鍵碼:
按鍵碼 | 說明 |
---|---|
home |
前往主畫面。 |
back |
返回 |
call |
撥打或結束通話。 |
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 |
字串 | 定義輸入模式。touch 、rotary 和 hybrid 選項可啟用或停用觸控螢幕和旋轉功能,並可視情況設定預設按鍵碼。default 會依循 touch 和 controller 選項。 |
controller |
false |
布林值 | 啟用旋轉控制器輸入功能。忽略不看,除非 inputmode 為 default 。 |
touch |
true |
布林值 |
啟用觸控螢幕。除非 inputmode 為 default ,否則會遭到忽略。 |
touchpad |
false |
布林值 | 啟用觸控板。 |
touchpadnavigation |
false |
布林值 | 啟用觸控板,即可用於 UI 導覽。 |
touchpadtapasselect |
false |
布林值 | 設為 true 時,輕觸觸控板將作為選取事件。 |
touchpaduiabsolute |
false |
布林值 | 如果 touchpadnavigation 為 true ,就會設定觸控動作是否應視為絕對值或手勢。 |
影片設定
Android Auto 支援三種影片解析度:
- 480p (800x480,這是預設值)
- 720p (1280x720)
- 1080p (1920x1080)
如要支援其他顯示比例,可以視需要在車用運算主機中指定上下黑邊 (左右黑邊)。舉例來說,如要使用 1000x600 的螢幕,請將解析度設為 720p (1280x720),並將 marginwidth
和 marginheight
分別設為 280 和 120。如此一來,左右兩側邊界就會增加 140 px,上下兩側邊界則增加 60 px。
以下範例設定模擬常見的 6 吋螢幕 (750x450):
[general]
...
resolution = 800x480
marginwidth = 50
marginheight = 30
以下範例設定模擬相當寬的螢幕:
[general]
...
resolution = 1280x720
marginwidth = 0
marginheight = 220
下表為其他影片設定選項:
姓名 | 預設 | 類型 | 說明 |
---|---|---|---|
resolution |
800x480 |
字串 | 只能設定為800x480 、1280x720 或 1920x1080 之一。 |
dpi |
160 |
整數 | |
normalizedpi |
false |
布林值 | 設為 true 時,DHU 視窗大小就會縮減,藉此容納較大的 DPI 值。設為 false 時,視窗大小會隨著 DPI 值增加而放大,雖然無法模擬實際的顯示畫面,但有助於檢查影像內容。 |
realdpi |
160 |
整數 | 用於影片設定。 |
framerate |
30 |
整數 | 用於影片設定。 |
marginheight |
0 |
整數 | 用於影片設定。 |
marginwidth |
0 |
整數 | 用於影片設定。 |
margins |
0,0,0,0 |
字串 | 用於影片設定。覆寫 marginwidth 和 marginheight (如有)。格式為上、下、左、右。 |
contentinsets |
0,0,0,0 |
字串 | 用於影片設定。格式為上、下、左、右。 |
stablecontentinsets |
0,0,0,0 |
字串 | 用於影片設定。預設值為
contentinsets 。格式為上、下、左、右。 |
cropmargins |
false |
布林值 | 如果 margins 、marginheight 或 marginwidth 有設置指定值,在此設定使用 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 |
字串 | 只能設為以下任一種:left 、center 或 right 。 |
windowleft |
|
整數 | 設定主視窗的左側位置。 |
windowtop |
|
整數 | 設定主視窗的頂部位置。 |
fueltypes |
unleaded |
字串 | 包含下列一或多個項目,格式為以半形逗號分隔的清單:
|
evconnectors |
|
字串 | 包含下列零或多個項目,格式為以半形逗號分隔的清單:
fueltypes 包含 electric 的情況下,才需要設定這個選項。
|
疑難排解
DHU 首次連線時,偶爾會顯示空白畫面。如要解決這個問題,請按照下列步驟操作:
- 關閉 DHU。
- 按照「執行 DHU」所述的步驟 5 操作,先關閉再重新啟動車用運算主機伺服器。
- 重新啟動 DHU。
- 授予手機畫面上要求的任何其他權限。DHU 可能會再次關閉。
- 請視需要重新啟動 DHU。