1 page.title= Testing Apps for Auto 2 page.tags="auto", "car", "automotive" 3 page.article=true 4 5 @jd:body 6 7 <div id="tb-wrapper"> 8 <div id="tb"> 9 <h2>Dependencies and Prerequisites</h2> 10 <ul> 11 <li>Android 5.0 (API level 21) or higher</li> 12 <li>Android Auto companion app installed</li> 13 </ul> 14 <h2>In this document</h2> 15 <ol> 16 <li><a href="#install">Installing the DHU</a></li> 17 <li><a href="#running-dhu">Running the DHU</a></li> 18 <li><a href="#dhu-commands">Issuing DHU Commands</a></li> 19 </ol> 20 </div> 21 </div> 22 23 24 <p> 25 Testing your Auto app ensures that users do not encounter unexpected results or 26 have a poor experience when interacting with your apps. Android now provides 27 Desktop Head Unit (DHU), a testing tool for Auto apps that lets you test 28 pre-released versions of your Android Auto apps without having to work from 29 your car.</P> 30 31 <p>The Desktop Head Unit (DHU) enables your development machine to emulate an 32 Android Auto head unit, so you can easily run and test Android Auto apps. 33 The DHU runs on Windows, Mac, and Linux hosts and replaces previous Android Auto 34 simulators, such as the Android Media Browser and Messaging simulators.</p> 35 36 37 <p class ="note"><strong>Note:</strong> It's important that you test your auto 38 app for the criteria listed on <a href={@docRoot}distribute/essentials/quality/auto.html> 39 Auto app quality </a> page prior to submitting to Google Play for review. 40 </p> 41 <p> 42 This lesson teaches you how to install and run the DHU on your development 43 machine for testing your apps. Once youve 44 installed the DHU, you can test your Android Auto apps by connecting your phone 45 and workstation via USB. 46 47 <h2 id ="install"> Installing the DHU</h2> 48 <p>Follow these steps to install the DHU on your development machine:</p> 49 <li>Enable developer mode on your mobile device, as described in 50 <a href="{@docRoot}tools/device.html#developer-device-options">Enabling On-device 51 Developer Options</a>. </li> 52 <li>Compile your app in your development environment and install your app on 53 a physical mobile device running Android 5.0 (API level 21) or higher. To check the 54 version of Android on a Nexus device, go to 55 <strong>Settings > About phone</strong> (or <strong>About tablet</strong>) <strong>> 56 Android version</strong>.</li> 57 58 <li>Install the 59 <a class="external-link" 60 href="https://play.google.com/store/apps/details?id=com.google.android.projection.gearhead&hl=en" 61 >Android Auto app</a> on the mobile device.</li> 62 <li>Open the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> and 63 download the DHU package <strong>Android Auto Desktop Head Unit emulator</strong> from the 64 <em>SDK Tools</em> tab. The DHU installs in the <code><sdk>/extras/google/auto/</code> 65 directory.</li> 66 <li>If you are running the DHU on Linux, you must also install 67 the portaudio, libpng, sdl2, and sdl2_ttf libraries. 68 The procedure to do this varies depending on your Linux distribution. For example, on 69 Debian-derived Linux distributions, you can install the libraries with this command: 70 71 <pre class="no-pretty-print"> 72 $ sudo apt-get install libsdl2-2.0-0 libsdl2-ttf-2.0-0 libportaudio2 libpng12-0 73 </pre> 74 75 </li> 76 </ol> 77 78 <div class="cols"> 79 <div class="col-6"> 80 <img src="{@docRoot}images/training/auto-desktop-head-unit-context-menu-enabled.png" 81 alt="" > 82 <p class="img-caption"> 83 <strong>Figure 1.</strong> Context menu with developer options. 84 </p> 85 </div> 86 87 <div class="col-6"> 88 <img src="{@docRoot}images/training/auto-desktop-head-unit-server-running.png" 89 alt="" > 90 <p class="img-caption"> 91 <strong>Figure 2.</strong> Notification that the head unit server is running. 92 </p> 93 </div> 94 </div> <!-- end cols--> 95 96 97 <h2 id="running-dhu">Running the DHU</h2> 98 99 <p>Run the DHU by connecting your mobile device to a development machine and 100 setting up a connection to the head unit server over <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge 101 (ADB)</a>. Follow these steps to set up tunneling and start the DHU:</p> 102 103 <ol> 104 <li>On the mobile device, enable Android Auto developer mode by starting the Android Auto 105 companion app, and then tapping the <i>Android Auto</i> toolbar title 10 times. 106 This step is only required the first time you run the companion app. 107 </li> 108 <li>If the server is not already running, select <strong>Start head unit server</strong> 109 from the Android Auto menu. 110 <p>On the device, a foreground service appears in the notification area. </p> 111 </li> 112 113 <li>In the Android Auto app, make sure the <strong>Only connect to known cars</strong> option 114 is disabled.</li> 115 116 <li>Connect the mobile device to the development machine via USB.</li> 117 118 <li>Make sure the mobile device has its screen unlocked, otherwise it cannot launch the DHU.</li> 119 120 <li>On the development machine, run the following {@code adb} command to 121 forward socket connections from the 122 development machine's port 5277 to the same port number on the Android device. 123 This configuration allows the DHU to connect to the head unit server running on your phone over 124 a TCP socket. 125 <pre class="no-pretty-print">$ adb forward tcp:5277 tcp:5277</pre> 126 </li> 127 128 <li>Start the DHU by running the command <code>desktop-head-unit.exe</code> (on Windows) 129 or <code>./desktop-head-unit</code> (on Mac or Linux) from the 130 <code><sdk>/extras/google/auto/</code> directory. 131 132 <pre class="no-pretty-print">$ cd <sdk>/extras/google/auto 133 $ ./desktop-head-unit</pre> 134 135 <p> 136 By default, the head unit server connects over port 5277. To override the host or port 137 (for example, to forward over SSH), use the 138 <code>desktop-head-unit --adb <[localhost:]port></code> flag, as in 139 the following example: 140 </p> 141 142 <pre class="no-pretty-print">$ ./desktop-head-unit --adb 5999</pre> 143 <p> 144 By default, the DHU emulates the most common form of Android Auto-compatible 145 head unit, which uses a touch screen user interface. You can simulate user 146 touches by clicking the DHU with a mouse. To emulate head units which use 147 a rotary controller for input, you can use the <code>-i controller</code> flag, 148 as in this example: 149 </p> 150 <pre class="no-pretty-print">$ ./desktop-head-unit -i controller</pre> 151 <p> 152 When the DHU is in rotary-controller mode you can simulate controller 153 operations by using keyboard shortcuts, as described in <a href= 154 "#cmd-bindings">DHU commands and key bindings</a>. If the DHU is in rotary 155 controller mode, it ignores mouse clicks; you must operate Android Auto with 156 the simulated rotary controller operations. 157 </p> 158 </li> 159 </ol> 160 161 162 163 164 <div class="figure" style="width:432px"> 165 166 <img src="{@docRoot}images/training/auto-desktop-head-unit-wkst-launch.png" 167 alt="" > 168 <p class="img-caption"> 169 <strong>Figure 4.</strong> DHU launches on the development machine. 170 </p> 171 </div> 172 173 <img src="{@docRoot}images/training/auto-desktop-head-unit-launch.png" 174 alt="" > 175 <p class="img-caption"> 176 <strong>Figure 3.</strong> Android Auto launches on the mobile device. 177 </p> 178 179 <p> 180 After you set up and start the DHU, you can run DHU commands from the command 181 line to run and test your app from the terminal. You can also run these commands 182 by using keyboard shortcuts. 183 </p> 184 185 <h2 id="dhu-commands">Issuing DHU Commands</h2> 186 187 <p> 188 DHU commands allow you to test your app with Android Auto features, such as 189 playing voice input or switching between night and day display mode. You can issue commands to 190 the DHU by running commands from the terminal window where you launched DHU. 191 You can also issue commands by selecting the DHU window and 192 using keyboard shortcuts. The DHU commands 193 and key bindings for all controls are listed in <a href="#cmd-bindings">DHU 194 commands and key bindings</a>. 195 </p> 196 197 198 <h3 id="day-night">Switching between day and night mode</h3> 199 200 <p> 201 Android Auto supports different color schemes for day and night. You should test your app in both 202 day and night mode. You can switch between night and day mode in either of the 203 following ways: 204 </p> 205 206 <ul> 207 <li>Run the command <code>daynight</code> in the terminal where you launched the DHU. 208 </li> 209 210 <li>Select the DHU window and press the <strong>N</strong> key. 211 </li> 212 </ul> 213 214 <h3>Microphone testing</h3> 215 216 <p>The DHU supports using a microphone for voice input. You can also instruct the DHU to treat 217 a pre-recorded voice track as input, as if the DHU had heard the track through the microphone.</p> 218 219 <p>To use a pre-recorded sound file as input, enter this command: </p> 220 <pre class="no-pretty-print"> 221 $ mic play <sound_file_path>/<sound_file>.wav 222 </pre> 223 224 <p>For your convenience, we have provided the following sound files for common 225 voice commands. These sound files are installed in the 226 <code><sdk>/extras/google/auto/voice/</code> directory.</p> 227 228 <dl> 229 <dt> 230 <code>exitnav.wav</code> 231 </dt> 232 233 <dd> 234 "Exit navigation." 235 </dd> 236 237 <dt> 238 <code>navgoogle.wav</code> 239 </dt> 240 241 <dd> 242 "Navigate to 1600 Amphitheatre Parkway, Mountain View." 243 </dd> 244 245 <dt> 246 <code>navsoh.wav</code> 247 </dt> 248 249 <dd> 250 "Navigate to Sydney Opera House." 251 </dd> 252 253 <dt> 254 <code>nextturn.wav</code> 255 </dt> 256 257 <dd> 258 "When is my next turn?" 259 </dd> 260 261 <dt> 262 <code>showalternateroute.wav</code> 263 </dt> 264 265 <dd> 266 "Show alternate routes."" 267 </dd> 268 269 <dt> 270 <code>howlong.wav</code> 271 </dt> 272 273 <dd> 274 "How long until I get there?" 275 </dd> 276 277 <dt> 278 <code>navhome.wav</code> 279 </dt> 280 281 <dd> 282 "Navigate to home." 283 </dd> 284 285 <dt> 286 <code>navwork.wav</code> 287 </dt> 288 289 <dd> 290 "Navigate to work."" 291 </dd> 292 293 <dt> 294 <code>pause.wav</code> 295 </dt> 296 297 <dd> 298 "Pause music." 299 </dd> 300 301 <dt> 302 <code>showtraffic.wav</code> 303 </dt> 304 305 <dd> 306 "Show traffic." 307 </dd> 308 </dl> 309 <h3 id="cmd-bindings">DHU commands and key bindings</h3> 310 311 <p>The DHU supports the following commands.</p> 312 313 <p class="table-caption" id="table-commands"><strong>Table 1.</strong> Commands and key bindings</p> 314 <table> 315 <tr> 316 <th>Category</th> 317 <th>Command</th> 318 <th>Subcommand</th> 319 <th>Argument(s)</th> 320 <th>Keyboard Shortcut(s)</th> 321 <th>Description</th> 322 </tr> 323 324 <!--system--> 325 326 <tr> 327 <td rowspan="4">System</td> 328 <td>help</td> 329 <td></td> 330 <td>[command]</td> 331 <td></td> 332 <td>Shows the full command set. Specifying a command name (for example, <code>help day</code>) 333 causes the system to show help for that command.</td> 334 </tr> 335 336 <tr> 337 338 <td>quit</td> 339 <td></td> 340 <td></td> 341 <td>Alt+q</td> 342 <td>Quits the head unit.</td> 343 </tr> 344 345 <tr> 346 347 <td>sleep</td> 348 <td></td> 349 <td>[seconds]</td> 350 <td></td> 351 <td>Sleeps for one second. Specifying an argument (for example, <code>sleep 30</code>) causes the 352 system to sleep the specified number of seconds. This command 353 is useful if you are writing scripts for the DHU. (You can run a script by using I/O redirection 354 from the command line: <code>./desktop-head-unit < script.txt</code> loads commands from the 355 file <code>script.txt</code>.)</td> 356 </tr> 357 358 <tr> 359 360 <td>screenshot</td> 361 <td></td> 362 <td>filename.png</td> 363 <td></td> 364 <td>Saves a screenshot to <code>filename.png</code>.</td> 365 </tr> 366 367 368 <!--microphone--> 369 370 <tr> 371 <td rowspan="3">Microphone</td> 372 <td rowspan="3">mic</td> 373 <td>begin</td> 374 <td></td> 375 <td>m </td> 376 <td>Activates the microphone (equivalent to clicking the steering wheel's microphone button) and 377 waits for input from the computer microphone.</td> 378 </tr> 379 380 <tr> 381 382 383 <td>play</td> 384 <td>filename.wav</td> 385 <td></td> 386 <td>Causes the DHU to treat <code>filename.wav</code> as voice input, as if it had heard that sound 387 through the microphone. You do not hear the sound file being played, but you do hear 388 the response from Android Auto.</td> 389 </tr> 390 391 <tr> 392 393 394 <td>repeat</td> 395 <td></td> 396 <td></td> 397 <td>Repeats the last <code>mic play</code> command, as if you had called <code>mic play</code> 398 again with the same sound file parameter.</td> 399 </tr> 400 401 <!--Input--> 402 403 <tr> 404 <td rowspan="7">Input</td> 405 <td rowspan="6">dpad</td> 406 <td>up <br> down <br> left <br> right</td> 407 <td></td> 408 <td>Arrow keys</td> 409 <td>Simulates moving the rotary controller.</td> 410 </tr> 411 412 <tr> 413 414 415 <td>soft left <br> soft right</td> 416 <td></td> 417 <td>Shift+Arrow keys</td> 418 <td>Simulates pressing the side buttons available on some rotary controllers.</td> 419 </tr> 420 421 <tr> 422 423 424 <td>click</td> 425 <td></td> 426 <td>Return</td> 427 <td>Simulates pressing the rotary controller.</td> 428 </tr> 429 430 <tr> 431 432 433 <td>back</td> 434 <td></td> 435 <td>Backspace</td> 436 <td>Simulates pressing the <strong>back</strong> button available below some rotary 437 controllers.</td> 438 </tr> 439 440 <tr> 441 442 443 <td>rotate left <br> rotate right</td> 444 <td></td> 445 <td>1 <br> 2</td> 446 <td>Simulates rotating the rotary controller left (counter-clockwise) or right (clockwise).</td> 447 </tr> 448 449 <tr> 450 451 452 <td>flick left <br> flick right</td> 453 <td></td> 454 <td>Shift+1 <br> Shift+2</td> 455 <td>Simulates a fast spin of the rotary controller to the left (counter-clockwise) or right 456 (clockwise).</td> 457 </tr> 458 459 <tr> 460 461 <td>tap</td> 462 <td></td> 463 <td>x y</td> 464 <td></td> 465 <td>Simulates a touch event at the specified coordinates. For example, <code>tap 50 100</code></td> 466 </tr> 467 468 469 <!--Day/Night--> 470 471 <tr> 472 <td rowspan="3">Day/Night</td> 473 <td>day</td> 474 <td></td> 475 <td></td> 476 <td>Shift+n</td> 477 <td>Activates day mode (high brightness, full color).</td> 478 </tr> 479 480 <tr> 481 482 <td>night</td> 483 <td></td> 484 <td> </td> 485 <td>Ctrl+n </td> 486 <td>Activates night mode (low brightness, high contrast).</td> 487 </tr> 488 489 <tr> 490 491 <td>daynight</td> 492 <td></td> 493 <td></td> 494 <td>n </td> 495 <td>Toggles current day/night mode.</td> 496 </tr> 497 498 </table> 499 500 501 502 503 <h2 id="auto-simulators">Media Browser and Messaging Simulators</h2> 504 505 <p class="caution"><strong>Important:</strong> Use of the Android Media Browser and Messaging 506 Simulators for testing Android Auto apps is deprecated. Instead, we recommend using the 507 Desktop Head Unit, which enables your development machine to act as if it were an Android Auto head 508 unit.</p> 509 510 <p>To get the simulators, open the 511 <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> and download 512 them from <strong>Extras > Android Auto API Simulators</strong>.</p> 513 514 <p>Before you begin testing, compile your app in your development environment. 515 Install your app and the Android simulator for the features you want to test 516 (that is, audio or messaging) on a physical or virtual device running Android 517 5.0 (API level 21) or higher. To check the version of Android on the device, go 518 to <strong>Settings > About phone</strong> (or <strong>About tablet</strong>) 519 <strong>> Android Version</strong>.</p> 520 521 <h3 id="testing-audio-apps">Testing audio apps</h3> 522 <p>To run and test audio apps:</p> 523 524 <ol> 525 <li>Install the Android Media Browser simulator 526 ({@code <sdk>/extras/google/simulators/media-browser-simulator.apk}) on 527 the test device. You can do this using 528 the <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> 529 <li>Enable <a href="{@docRoot}tools/device.html#developer-device-options"> 530 developer options</a> on the test device.</li> 531 <li>Install your app on the test device.</li> 532 <li>Launch the Android Media Browser simulator to see how your audio app 533 appears in Auto. If your app does not appear, stop the simulator from 534 <strong>Settings > Apps</strong> and restart it.</li> 535 </ol> 536 537 538 <h3 id="testing-messaging-apps">Testing messaging apps</h3> 539 <p>To run and test messaging apps:</p> 540 541 <ol> 542 <li>Install the Android Messaging simulator 543 ({@code <sdk>/extras/google/simulators/messaging-simulator.apk}) 544 on the test device. You can do this using the 545 <a href="{@docRoot}tools/help/adb.html#move">adb</a> command line tool.</li> 546 <li>Enable the simulator to read notifications posted on the system: 547 <ol type="a"> 548 <li>Enable <a href="{@docRoot}tools/device.html#developer-device-options"> 549 developer options</a> on the test device.</li> 550 <li>Click <strong>Settings > Sounds & Notifications > Notification 551 Access</strong> and check the box labeled 552 <strong>Messaging Simulator</strong>.</li> 553 </ol> 554 <li>Install your app on the test device.</li> 555 <li>Launch the Android Messaging Simulator to see how your messaging app appears 556 in Auto. If your app does not appear, stop the simulator from 557 <strong>Settings > Apps</strong> and restart it.</li> 558 </ol> 559 560 561