前回は簡単なコードで Android Auto の画面を作ってみました。
funnelbit.hatenablog.com
しかしまだ動かしていないので、アプリをビルドして動作確認してみます。早速クルマに接続したいところですが、実はただ単にビルドするだけではクルマの画面には表示されません。PC だとビルドするだけで表示できるので、とりあえずPCで動かしてみましょう!
前回までのコードはこちらの github にあげてあります。
github.com
DHU(Desktop Head Unit)をインストールする
PC で動かす場合、DHU をインストールする必要があります。これはクルマのナビ画面で動く Android Auto の画面をエミュレートしてくれるものです。
developer.android.com
Android Studio のメニュー Preference -> Appearance & Behavior -> System Settings -> Android SDK
から、SDK Tools
タブを開いて Android Auto Desktop Head Unit Emulator
をインストールしましょう。ドキュメント通りにやっていけばインストールできるはずです。
実機スマートフォンを接続したいので、Android Auto をスマートフォンにインストールしておいてください。
play.google.com
DHU をインストールしたら DHU のあるディレクトリに行きましょう。特に設定していない場合は ~/Library/Android/sdk/extras/google/auto
になっていると思います。ここで ./desktop-head-unit --usb
します。すると DHU は Android Auto のUSB接続を待機する状態になります。
結構すぐに接続待ちを諦めてしまうので、これをやる前に繋げておくのがおすすめです。
DHU の設定について
クルマによってナビの形態は様々です。画面サイズが違ったり、タッチパネルを搭載していなかったり、ダイヤルをクルクル回してメニューを移動する「ロータリーコントローラー」が搭載されていたりします。
DHU では、そういったナビのエミュレートできるよう、.ini
ファイルに項目を記述して設定することが可能です。
また DHU はクルマのセンサ入力をエミュレートする機能も利用可能です。クルマの速度、ガソリンの残量、ジャイロの状態などをターミナルから入力して反映できます。
developer.android.com
例えば現在の速度をコマンド入力することで DHU に反映できます。
ただしこれではまだ反映されません。DHU は普通に起動するだけでは各種センサが OFF の状態になっています。上のコマンドは成功したように見えますが、DHU に接続しているアプリケーションには何も飛んできません。
設定を書く方法はドキュメントにも書いていますが、試しに速度の設定を書いてみましょう。
developer.android.com
設定ファイルは .ini
ファイルです。今回は設定ファイルのデフォルトファイルパス ~/.android/headunit.ini
にはおかずに、別の場所に作ってみましょう。どこでもいいです。
[sensors] speed = true # speed [speed] に必要
他にもセンサを追加したければ並べて書けば良いです。
[sensors] accelerometer = true # accel [x] [y] [z] を利用するために必要 compass = true # compass bearing [pitch] [roll] に必要 fuel = true # fuel [percentage] に必要 gyroscope = true # gyro [x] [y] [z] に必要 location = true # location lat long [accuracy] [altitude] [speed] [bearing] に必要 odometer = true # odometer km [current_trip_km] に必要 speed = true # speed [speed] に必要
センサの一覧はこちら
developer.android.com
設定ファイルを書いたら、起動時に指定して読み込ませましょう。
> ./desktop-head-unit --usb -c ~/Desktop/headunit.ini Android Auto - Desktop Head Unit Build: 2022-03-30-438482292 Version: 2.0-mac-arm64 [I]: Loaded configuration from '/Users/funnelbit/Desktop/headunit.ini'. BoringSSL is the SSL implementation used in the receiver-lib. Starting link. Requested protocol version: 1.7 [I]: Searching for compatible USB device... [I]: Found 5 USB devices. [I]: Found device 'Google Pixel 7' in accessory mode (vid=18d1, pid=2d01). [I]: Found accessory: ifnum: 0, rd_ep: 129, wr_ep: 1 [I]: Attaching to USB device... [I]: Attached! > Phone reported protocol version 1.7 ssl state=TLS client read_server_hello -1 ssl state=TLS client process_change_cipher_spec -1 ssl state=SSL negotiation finished successfully 1 SSL version=TLSv1.2 Cipher name=ECDHE-RSA-AES128-GCM-SHA256 Verify returned: ok
ちゃんとheadunit.ini
を読み取ることができていれば、[I]: Loaded configuration from '/Users/funnelbit/Desktop/headunit.ini'.
の表示が出るのでわかります。ただし設定ファイルの記述が間違っていてもエラーとか出ませんが。
ビルドして表示してみる
あとは簡単です。ビルドボタンを押してスマートフォンにアプリをインストールします。そして DHU を再起動してください。
アプリが出ていますね。アイコンを選択してみましょう。
無事に画面が出ました!ところで Car API Level は 6 と表示されています。ライブラリの更新履歴を見る限り、てっきり 5 が上限だと思っていたのですが、ドキュメント漁ってみるとしれっとCar API Level 6 が定義されていました。
developer.android.com
バージョン番号を定義しているファイルを覗いてみても LEVEL_6
の存在が確認できます。
ただし Car API Level 6 で何ができるのか、ドキュメントにもコードにも今の所情報はありません。
とりあえず動いたので、次は実車に接続してナビ画面に出してみましょうか。