
Android Auto対応アプリを開発する場合、通常のスマートフォンアプリとは異なり、Android Autoヘッドユニットサーバエミュレータを利用したテスト環境があると便利です。必須ではありませんが、実機のAndroid Autoで動作確認を行うよりも手軽で、実機ではリファレンスどおりに動作しないケースもあるため、開発効率を大きく向上させることができます。
また、Android Autoでナビゲーション機能を提供するアプリは、動作確認用の「オートドライブ」に対応した処理をアプリへ実装する必要があります。このオートドライブはGoogle Playでの審査でも使用されるため、ナビゲーションアプリを公開する場合は実装が必須です。一方、Android Auto対応アプリであってもナビゲーション機能を持たないアプリでは実装する必要はありません。
Android Autoヘッドユニットサーバエミュレータやオートドライブの設定手順は忘れやすいため、本記事では備忘録としてまとめておきます。

Android Studioでは、Android Autoヘッドユニットサーバエミュレータを簡単にインストールできます。
まず、Android Studio左上の「ファイル」から「設定」を開きます。

「設定」画面の左側ツリーから「言語&フレームワーク」→「Android SDK」を選択します。
続いて右側上部の「SDK Tools」タブを開き、「Android Auto Desktop Head Unit Emulator」にチェックを入れてインストールを実行します。すでにインストール済みの場合は、ステータスが「Installed」と表示されていることを確認してください。
Android Studioでのインストール作業は基本的に以上です。ただし、OSや環境によってはパッケージ追加や設定が必要になる場合があります。
インストール完了後は、Android Autoヘッドユニットサーバエミュレータを使用するだけであればAndroid Studioを起動しておく必要はありません。もちろん、Android Studioを起動したまま利用しても問題ありません。
続いて、スマートフォン側でデベロッパーモードを有効にします。

開発中のアプリをインストールしたスマートフォンでAndroidの設定を開き、「デバイス情報」または同等のメニューを表示します。なお、メニュー名称や配置はメーカーや機種によって異なります。

「ソフトウエアバージョン」を7回連続でタップすると、デベロッパーモードが有効になります。

Androidの設定画面から「システム」などの管理メニューを開きます。メーカーによっては、設定画面の最上位階層に「開発者オプション」が表示される場合もあります。

デベロッパーモードが有効になると、「開発者オプション」という項目が表示されるので開きます。

「開発者オプション」のスイッチをオンにします。機種によっては確認ダイアログが表示されるため、その場合は内容を確認して許可してください。

オートドライブ機能を利用する場合はadbを使用するため、「USBデバッグ」のスイッチもオンにしておきます。
続いてAndroid Autoの設定を変更します。

Androidの設定から「その他の接続」などのメニューを開き、「Android Auto」を選択します。メニュー名はメーカーや機種によって異なる場合があります。
古いスマートフォンやAndroid Autoアプリが標準搭載されていない機種では、Google PlayからAndroid Autoアプリをインストールし、アプリドロワーなどから起動してください。

Android Autoアプリのメイン画面下部に表示されている「バージョン」を10回連続でタップします。

Android Autoのデベロッパー向け設定を有効にする確認画面が表示されるので、「OK」をタップします。

Android Autoのメイン画面右上にあるメニューアイコンをタップし、「ヘッドユニットサーバーを起動」を選択します。この項目はAndroid Autoのデベロッパーモードが有効な場合のみ表示されます。
アプリの動作確認が終了したら、ヘッドユニットサーバーを停止し、この画面から「デベロッパーモードを終了」をタップしてデベロッパーモードを無効にしておくことをおすすめします。
Android StudioやAndroid AutoヘッドユニットサーバエミュレータをインストールしたPCと、スマートフォンをUSBケーブルで接続します。
続いて、最初にインストールしたAndroid Autoヘッドユニットサーバエミュレータを起動します。

PCでターミナルを開き、以下のコマンドを実行します。(画像ではホームディレクトリ配下の~/Android/Sdk/extras/google/autoへ移動してからdesktop-head-unitを実行しています。)
$ ~/Android/Sdk/extras/google/auto/desktop-head-unit -u
コマンドを実行すると、以降はログメッセージが継続して表示されます。このターミナルは終了せず、そのまま開いた状態にしておきます。

デスクトップ上にAndroid Autoヘッドユニットサーバエミュレータのウインドウが表示されます。

Android Autoの画面が表示されたら、画面を操作して動作確認したいアプリを起動します。

ここでは、開発中のBackseat co-Driverアプリを例に説明します。
今回は文字入力で目的地を指定するため、アプリ画面の「検索」ボタンをタップします。なお、Android Auto画面のマイクボタンをタップして「○○までナビ」のように話しかけ、音声入力で目的地を指定することも可能です。

文字入力パッドが表示されます。ただし、Android Autoの文字入力パッドでは日本語の漢字変換ができません。
そのため、まず入力欄へ1文字以上入力します。これをきっかけにスマートフォン側へ文字入力画面が表示されるので、スマートフォンで日本語入力と漢字変換を行い、目的地を入力します。
もしスマートフォン側に文字入力画面が表示されない場合は、Android Autoの文字入力パッドに表示されているスマートフォンと矢印のアイコンをタップしてください。このアイコンが有効になっていないと、スマートフォンから文字入力することはできません。

スマートフォンの文字入力画面で日本語入力と漢字変換を行い、目的地を入力します。今回は「浅草橋駅」を入力しました。

Android Auto画面の地図上に青いルートが表示され、ナビゲーションが開始されます。
ただし、このままでは現在地が変化しないため、ルート案内は開始されても車両は移動しません。位置情報変更アプリで移動を再現する方法もありますが、今回はGoogle Playで動作確認が求められているオートドライブ機能を使用します。

オートドライブは、必ずナビゲーションが開始されたことを確認してから実行してください。
新しいターミナルを開き、adb shellコマンドを実行します。
$ adb shell dumpsys activity service com.gatolabo.backseat_co_driver/.service.BackseatCarAppService AUTO_DRIVE
Backseat co-Driverアプリでは、このようにコマンドを入力することでオートドライブが開始されます。
なお、このコマンドを利用するためには、アプリ側でオートドライブに対応した実装が行われている必要があります。

Android Autoの画面上に「Simulation Mode (Auto Drive) Enabled Navigation」というメッセージが数秒間表示されます。

その後は、自動的にナビゲーションルートに沿って移動がシミュレーションされます。
案内中は、カード表示やTTSによるターンバイターン案内(曲がり角の手前での案内)が正しく動作することを確認します。

Android Autoでは、次の交差点までの距離だけでなく、目的地までの残り距離や到着予想時間などの情報も表示できます。
ただし、本記事執筆時点では、Backseat co-Driverアプリでは次の交差点までの距離表示のみ実装済みで、その他の情報については未実装です。
オートドライブ中にナビゲーション案内が正しく行われることは、Google Playでナビゲーション機能を審査する際の重要な確認項目となっているようです。つまり、オートドライブで正常に動作していることを確認できれば、Google Playの審査を通過できる可能性が高くなります。
Android Autoへ正式対応するためには、想像以上に多くの実装が必要になります。Backseat co-Driverでは、本来ナビゲーション機能を実装する予定はありませんでした。しかし、Android Autoではナビゲーションアプリでなければ頻繁なTTSによる音声案内が認められていないため、結果として地図表示やルート案内を含めた本格的なナビゲーション機能を追加実装することになりました。
関連記事:- Android Auto対応アプリ開発用エミュレータと試験用オートドライブの使い方
- 地図情報を読み上げてドライバーに知らせる新アプリBackseat co-Driver
- ヘッドユニットTS20のTLINKをZLINK 6に更新してAndroid Autoで接続してみた
- UIS7870搭載のAndroidヘッドユニット TS20用のTPMSセンサーを使ってみた
- UIS7870搭載のAndroidヘッドユニット TS20用にSR ADASカメラとTPMSセンサーを買ってみた
- UIS7870搭載の中華Androidナビ TS20の360カメラ設定
- UIS7870搭載のAndroidナビ(ヘッドユニット) TS20を買ってみた
- Googleマップをドライブモードで起動する新アプリ Drive Mode Launcher
- PinP対応の高機能カーランチャーアプリLecoauto Launcher
- ナビのマウント金具を樹脂製ブラケットに取り替えてみた


















