1 toc: 2 - title: Getting Started 3 path: /training/index.html 4 section: 5 - title: Building Your First App 6 path: /training/basics/firstapp/index.html 7 path_attributes: 8 - name: description 9 value: After you've installed the Android SDK, start with this class to learn the basics about Android app development. 10 section: 11 - title: Creating an Android Project 12 path: /training/basics/firstapp/creating-project.html 13 - title: Running Your Application 14 path: /training/basics/firstapp/running-app.html 15 - title: Building a Simple User Interface 16 path: /training/basics/firstapp/building-ui.html 17 - title: Starting Another Activity 18 path: /training/basics/firstapp/starting-activity.html 19 - title: Supporting Different Devices 20 path: /training/basics/supporting-devices/index.html 21 path_attributes: 22 - name: description 23 value: How to build your app with alternative resources that provide an optimized user experience on multiple device form factors using a single APK. 24 section: 25 - title: Supporting Different Languages 26 path: /training/basics/supporting-devices/languages.html 27 - title: Supporting Different Screens 28 path: /training/basics/supporting-devices/screens.html 29 - title: Supporting Different Platform Versions 30 path: /training/basics/supporting-devices/platforms.html 31 - title: Managing the Activity Lifecycle 32 path: /training/basics/activity-lifecycle/index.html 33 path_attributes: 34 - name: ja-lang 35 value: 36 - name: ko-lang 37 value: 38 - name: pt-br-lang 39 value: Como gerenciar o ciclo de vida da atividade 40 - name: ru-lang 41 value: 42 - name: zh-cn-lang 43 value: 44 - name: zh-tw-lang 45 value: 46 - name: description 47 value: How Android activities live and die and how to create a seamless user experience by implementing lifecycle callback methods. 48 section: 49 - title: Starting an Activity 50 path: /training/basics/activity-lifecycle/starting.html 51 path_attributes: 52 - name: ja-lang 53 value: 54 - name: ko-lang 55 value: 56 - name: pt-br-lang 57 value: Iniciando uma atividade 58 - name: ru-lang 59 value: 60 - name: zh-cn-lang 61 value: 62 - name: zh-tw-lang 63 value: 64 - title: Pausing and Resuming an Activity 65 path: /training/basics/activity-lifecycle/pausing.html 66 - title: Stopping and Restarting an Activity 67 path: /training/basics/activity-lifecycle/stopping.html 68 path_attributes: 69 - name: ja-lang 70 value: 71 - name: ko-lang 72 value: 73 - name: pt-br-lang 74 value: Pausando e reiniciando uma atividade 75 - name: ru-lang 76 value: 77 - name: zh-cn-lang 78 value: 79 - name: zh-tw-lang 80 value: 81 - title: Recreating an Activity 82 path: /training/basics/activity-lifecycle/recreating.html 83 path_attributes: 84 - name: ja-lang 85 value: 86 - name: ko-lang 87 value: 88 - name: pt-br-lang 89 value: Recriando uma atividade 90 - name: ru-lang 91 value: 92 - name: zh-cn-lang 93 value: 94 - name: zh-tw-lang 95 value: 96 - title: Building a Dynamic UI with Fragments 97 path: /training/basics/fragments/index.html 98 path_attributes: 99 - name: description 100 value: How to build a user interface for your app that is flexible enough to present multiple UI components on large screens and a more constrained set of UI components on smaller screensessential for building a single APK for both phones and tablets. 101 section: 102 - title: Creating a Fragment 103 path: /training/basics/fragments/creating.html 104 - title: Building a Flexible UI 105 path: /training/basics/fragments/fragment-ui.html 106 path_attributes: 107 - name: zh-cn-lang 108 value: 109 - title: Communicating with Other Fragments 110 path: /training/basics/fragments/communicating.html 111 - title: Saving Data 112 path: /training/basics/data-storage/index.html 113 path_attributes: 114 - name: ja-lang 115 value: 116 - name: ko-lang 117 value: 118 - name: pt-br-lang 119 value: Salvando dados 120 - name: ru-lang 121 value: 122 - name: zh-cn-lang 123 value: 124 - name: zh-tw-lang 125 value: 126 - name: description 127 value: How to save data on the device, whether it's temporary files, downloaded app assets, user media, structured data, or something else. 128 section: 129 - title: Saving Key-Value Sets 130 path: /training/basics/data-storage/shared-preferences.html 131 path_attributes: 132 - name: ja-lang 133 value: 134 - name: ko-lang 135 value: - 136 - name: pt-br-lang 137 value: Salvando conjuntos de valor-chave 138 - name: ru-lang 139 value: "-" 140 - name: zh-cn-lang 141 value: 142 - name: zh-tw-lang 143 value: 144 - title: Saving Files 145 path: /training/basics/data-storage/files.html 146 path_attributes: 147 - name: ja-lang 148 value: 149 - name: ko-lang 150 value: 151 - name: pt-br-lang 152 value: Salvando arquivos 153 - name: ru-lang 154 value: 155 - name: zh-cn-lang 156 value: 157 - name: zh-tw-lang 158 value: 159 - title: Saving Data in SQL Databases 160 path: /training/basics/data-storage/databases.html 161 path_attributes: 162 - name: ja-lang 163 value: SQL 164 - name: ko-lang 165 value: SQL 166 - name: pt-br-lang 167 value: Salvando dados em bancos de dados do SQL 168 - name: ru-lang 169 value: SQL 170 - name: zh-cn-lang 171 value: SQL 172 - name: zh-tw-lang 173 value: SQL 174 - title: Interacting with Other Apps 175 path: /training/basics/intents/index.html 176 path_attributes: 177 - name: ja-lang 178 value: 179 - name: ko-lang 180 value: 181 - name: pt-br-lang 182 value: Interagindo com outros aplicativos 183 - name: ru-lang 184 value: 185 - name: zh-cn-lang 186 value: 187 - name: zh-tw-lang 188 value: 189 - name: description 190 value: How to build a user experience that leverages other apps available on the device to perform advanced user tasks, such as capture a photo or view an address on a map. 191 section: 192 - title: Sending the User to Another App 193 path: /training/basics/intents/sending.html 194 path_attributes: 195 - name: ja-lang 196 value: 197 - name: ko-lang 198 value: 199 - name: pt-br-lang 200 value: Enviando o usurio para outro aplicativo 201 - name: ru-lang 202 value: 203 - name: zh-cn-lang 204 value: 205 - name: zh-tw-lang 206 value: 207 - title: Getting a Result from the Activity 208 path: /training/basics/intents/result.html 209 path_attributes: 210 - name: ja-lang 211 value: 212 - name: ko-lang 213 value: 214 - name: pt-br-lang 215 value: Obtendo resultados de uma atividade 216 - name: ru-lang 217 value: 218 - name: zh-cn-lang 219 value: 220 - name: zh-tw-lang 221 value: 222 - title: Allowing Other Apps to Start Your Activity 223 path: /training/basics/intents/filters.html 224 path_attributes: 225 - name: ja-lang 226 value: 227 - name: ko-lang 228 value: 229 - name: pt-br-lang 230 value: Permitindo que outros aplicativos iniciem sua atividade 231 - name: ru-lang 232 value: 233 - name: zh-cn-lang 234 value: 235 - name: zh-tw-lang 236 value: 237 - title: Working with System Permissions 238 path: /training/permissions/index.html 239 path_attributes: 240 - name: description 241 value: How to declare that your app needs access to features and resources outside of its 'sandbox', and how to request those privileges at runtime. 242 section: 243 - title: Declaring Permissions 244 path: /training/permissions/declaring.html 245 - title: Requesting Permissions at Run Time 246 path: /training/permissions/requesting.html 247 - title: Best Practices for Runtime Permissions 248 path: /training/permissions/best-practices.html 249 250 - title: Building Apps with Content Sharing 251 path: /training/building-content-sharing.html 252 section: 253 - title: Sharing Simple Data 254 path: /training/sharing/index.html 255 path_attributes: 256 - name: description 257 value: How to take your app interaction to the next level by sharing information with other apps, receive information back, and provide a simple and scalable way to perform Share actions with user content. 258 section: 259 - title: Sending Simple Data to Other Apps 260 path: /training/sharing/send.html 261 - title: Receiving Simple Data from Other Apps 262 path: /training/sharing/receive.html 263 - title: Adding an Easy Share Action 264 path: /training/sharing/shareaction.html 265 - title: Sharing Files 266 path: /training/secure-file-sharing/index.html 267 path_attributes: 268 - name: description 269 value: How to provide secure access to a file associated with your app using a content URI and temporary access permissions. 270 section: 271 - title: Setting Up File Sharing 272 path: /training/secure-file-sharing/setup-sharing.html 273 - title: Sharing a File 274 path: /training/secure-file-sharing/share-file.html 275 - title: Requesting a Shared File 276 path: /training/secure-file-sharing/request-file.html 277 - title: Retrieving File Information 278 path: /training/secure-file-sharing/retrieve-info.html 279 - title: Sharing Files with NFC 280 path: /training/beam-files/index.html 281 path_attributes: 282 - name: description 283 value: How to transfer files between devices using the NFC Android Beam feature. 284 section: 285 - title: Sending Files to Another Device 286 path: /training/beam-files/send-files.html 287 - title: Receiving Files from Another Device 288 path: /training/beam-files/receive-files.html 289 290 - title: Building Apps with Multimedia 291 path: /training/building-multimedia.html 292 section: 293 - title: Managing Audio Playback 294 path: /training/managing-audio/index.html 295 path_attributes: 296 - name: description 297 value: How to respond to hardware audio key presses, request audio focus when playing audio, and respond appropriately to changes in audio focus. 298 section: 299 - title: Controlling Your App's Volume and Playback 300 path: /training/managing-audio/volume-playback.html 301 - title: Managing Audio Focus 302 path: /training/managing-audio/audio-focus.html 303 - title: Dealing with Audio Output Hardware 304 path: /training/managing-audio/audio-output.html 305 - title: Capturing Photos 306 path: /training/camera/index.html 307 path_attributes: 308 - name: description 309 value: How to leverage existing camera apps on the user's device to capture photos or control the camera hardware directly and build your own camera app. 310 section: 311 - title: Taking Photos Simply 312 path: /training/camera/photobasics.html 313 - title: Recording Videos Simply 314 path: /training/camera/videobasics.html 315 - title: Controlling the Camera 316 path: /training/camera/cameradirect.html 317 - title: Printing Content 318 path: /training/printing/index.html 319 path_attributes: 320 - name: description 321 value: How to print photos, HTML documents, and custom documents from your app. 322 section: 323 - title: Photos 324 path: /training/printing/photos.html 325 - title: HTML Documents 326 path: /training/printing/html-docs.html 327 - title: Custom Documents 328 path: /training/printing/custom-docs.html 329 330 - title: Building Apps with Graphics & Animation 331 path: /training/building-graphics.html 332 section: 333 - title: Displaying Bitmaps Efficiently 334 path: /training/displaying-bitmaps/index.html 335 path_attributes: 336 - name: description 337 value: How to load and process bitmaps while keeping your user interface responsive and avoid exceeding memory limits. 338 section: 339 - title: Loading Large Bitmaps Efficiently 340 path: /training/displaying-bitmaps/load-bitmap.html 341 - title: Processing Bitmaps Off the UI Thread 342 path: /training/displaying-bitmaps/process-bitmap.html 343 - title: Caching Bitmaps 344 path: /training/displaying-bitmaps/cache-bitmap.html 345 - title: Managing Bitmap Memory 346 path: /training/displaying-bitmaps/manage-memory.html 347 - title: Displaying Bitmaps in Your UI 348 path: /training/displaying-bitmaps/display-bitmap.html 349 - title: Displaying Graphics with OpenGL ES 350 path: /training/graphics/opengl/index.html 351 path_attributes: 352 - name: description 353 value: How to create OpenGL graphics within the Android app framework and respond to touch input. 354 section: 355 - title: Building an OpenGL ES Environment 356 path: /training/graphics/opengl/environment.html 357 - title: Defining Shapes 358 path: /training/graphics/opengl/shapes.html 359 - title: Drawing Shapes 360 path: /training/graphics/opengl/draw.html 361 - title: Applying Projection and Camera Views 362 path: /training/graphics/opengl/projection.html 363 - title: Adding Motion 364 path: /training/graphics/opengl/motion.html 365 - title: Responding to Touch Events 366 path: /training/graphics/opengl/touch.html 367 - title: Animating Views Using Scenes and Transitions 368 path: /training/transitions/index.html 369 path_attributes: 370 - name: description 371 value: How to animate state changes in a view hierarchy using transitions. 372 section: 373 - title: The Transitions Framework 374 path: /training/transitions/overview.html 375 - title: Creating a Scene 376 path: /training/transitions/scenes.html 377 - title: Applying a Transition 378 path: /training/transitions/transitions.html 379 - title: Creating Custom Transitions 380 path: /training/transitions/custom-transitions.html 381 - title: Adding Animations 382 path: /training/animation/index.html 383 path_attributes: 384 - name: description 385 value: How to add transitional animations to your user interface. 386 section: 387 - title: Crossfading Two Views 388 path: /training/animation/crossfade.html 389 - title: Using ViewPager for Screen Slide 390 path: /training/animation/screen-slide.html 391 - title: Displaying Card Flip Animations 392 path: /training/animation/cardflip.html 393 - title: Zooming a View 394 path: /training/animation/zoom.html 395 - title: Animating Layout Changes 396 path: /training/animation/layout.html 397 398 - title: Building Apps with Connectivity & the Cloud 399 path: /training/building-connectivity.html 400 section: 401 - title: Connecting Devices Wirelessly 402 path: /training/connect-devices-wirelessly/index.html 403 path_attributes: 404 - name: description 405 value: How to find and connect to local devices using Network Service Discovery and how to create peer-to-peer connections with Wi-Fi. 406 section: 407 - title: Using Network Service Discovery 408 path: /training/connect-devices-wirelessly/nsd.html 409 - title: Creating P2P Connections with Wi-Fi 410 path: /training/connect-devices-wirelessly/wifi-direct.html 411 - title: Using Wi-Fi P2P for Service Discovery 412 path: /training/connect-devices-wirelessly/nsd-wifi-direct.html 413 - title: Performing Network Operations 414 path: /training/basics/network-ops/index.html 415 path_attributes: 416 - name: description 417 value: How to create a network connection, monitor the connection for changes in connectivity, and perform transactions with XML data. 418 section: 419 - title: Connecting to the Network 420 path: /training/basics/network-ops/connecting.html 421 - title: Managing Network Usage 422 path: /training/basics/network-ops/managing.html 423 - title: Optimizing Network Data Usage 424 path: /training/basics/network-ops/data-saver.html 425 - title: Parsing XML Data 426 path: /training/basics/network-ops/xml.html 427 - title: Transferring Data Without Draining the Battery 428 path: /training/efficient-downloads/index.html 429 path_attributes: 430 - name: description 431 value: How to minimize your app's impact on the battery when performing downloads and other network transactions. 432 section: 433 - title: Optimizing Downloads for Efficient Network Access 434 path: /training/efficient-downloads/efficient-network-access.html 435 - title: Minimizing the Effect of Regular Updates 436 path: /training/efficient-downloads/regular_updates.html 437 - title: Redundant Downloads are Redundant 438 path: /training/efficient-downloads/redundant_redundant.html 439 - title: Modifying Patterns Based on the Connectivity Type 440 path: /training/efficient-downloads/connectivity_patterns.html 441 - title: Backing up App Data to the Cloud 442 path: /training/backup/index.html 443 path_attributes: 444 - name: description 445 value: How to sync and back up app and user data to remote web services in the cloud and how to restore the data back to multiple devices. 446 section: 447 - title: Configuring Auto Backup 448 path: /training/backup/autosyncapi.html 449 - title: Using the Backup API 450 path: /training/backup/backupapi.html 451 - title: Resolving Cloud Save Conflicts 452 path: /training/cloudsave/conflict-res.html 453 path_attributes: 454 - name: description 455 value: How to design a robust conflict resolution strategy for apps that save data to the cloud. 456 - title: Transferring Data Using Sync Adapters 457 path: /training/sync-adapters/index.html 458 path_attributes: 459 - name: description 460 value: How to transfer data between the cloud and the device using the Android sync adapter framework 461 section: 462 - title: Creating a Stub Authenticator 463 path: /training/sync-adapters/creating-authenticator.html 464 - title: Creating a Stub Content Provider 465 path: /training/sync-adapters/creating-stub-provider.html 466 - title: Creating a Sync Adapter 467 path: /training/sync-adapters/creating-sync-adapter.html 468 - title: Running a Sync Adapter 469 path: /training/sync-adapters/running-sync-adapter.html 470 - title: Transmitting Network Data Using Volley 471 path: /training/volley/index.html 472 path_attributes: 473 - name: description 474 value: How to perform fast, scalable UI operations over the network using Volley 475 section: 476 - title: Sending a Simple Request 477 path: /training/volley/simple.html 478 - title: Setting Up a RequestQueue 479 path: /training/volley/requestqueue.html 480 - title: Making a Standard Request 481 path: /training/volley/request.html 482 - title: Implementing a Custom Request 483 path: /training/volley/request-custom.html 484 485 - title: Building Apps with Location & Maps 486 path: /training/building-location.html 487 section: 488 - title: Making Your App Location-Aware 489 path: /training/location/index.html 490 path_attributes: 491 - name: description 492 value: How to add location-aware features to your app by getting the user's current location. 493 section: 494 - title: Getting the Last Known Location 495 path: /training/location/retrieve-current.html 496 - title: Changing Location Settings 497 path: /training/location/change-location-settings.html 498 - title: Receiving Location Updates 499 path: /training/location/receive-location-updates.html 500 - title: Displaying a Location Address 501 path: /training/location/display-address.html 502 - title: Creating and Monitoring Geofences 503 path: /training/location/geofencing.html 504 - title: Adding Maps 505 path: /training/maps/index.html 506 path_attributes: 507 - name: description 508 value: How to add maps and mapping information to your app. 509 510 - title: Building Apps with User Info & Sign-In 511 path: /training/building-userinfo.html 512 section: 513 - title: Accessing Contacts Data 514 path: /training/contacts-provider/index.html 515 path_attributes: 516 - name: description 517 value: How to use Android's central address book, the Contacts Provider, to display contacts and their details and modify contact information. 518 section: 519 - title: Retrieving a List of Contacts 520 path: /training/contacts-provider/retrieve-names.html 521 - title: Retrieving Details for a Contact 522 path: /training/contacts-provider/retrieve-details.html 523 - title: Modifying Contacts Using Intents 524 path: /training/contacts-provider/modify-data.html 525 - title: Displaying the Quick Contact Badge 526 path: /training/contacts-provider/display-contact-badge.html 527 - title: Adding Sign-In 528 path: /training/sign-in/index.html 529 path_attributes: 530 - name: description 531 value: How to add user sign-in functionality to your app. 532 533 - title: Building Apps for Wearables 534 path: /training/building-wearables.html 535 section: 536 - title: Adding Wearable Features to Notifications 537 path: /training/wearables/notifications/index.html 538 path_attributes: 539 - name: description 540 value: How to build handheld notifications that are synced to and look great on wearables. 541 section: 542 - title: Creating a Notification 543 path: /training/wearables/notifications/creating.html 544 - title: Receiving Voice Input in a Notification 545 path: /training/wearables/notifications/voice-input.html 546 - title: Adding Pages to a Notification 547 path: /training/wearables/notifications/pages.html 548 - title: Stacking Notifications 549 path: /training/wearables/notifications/stacks.html 550 - title: Creating Wearable Apps 551 path: /training/wearables/apps/index.html 552 path_attributes: 553 - name: description 554 value: How to build apps that run directly on wearables. 555 section: 556 - title: Creating and Running a Wearable App 557 path: /training/wearables/apps/creating.html 558 - title: Creating Custom Layouts 559 path: /training/wearables/apps/layouts.html 560 - title: Keeping Your App Visible 561 path: /training/wearables/apps/always-on.html 562 - title: Adding Voice Capabilities 563 path: /training/wearables/apps/voice.html 564 - title: Packaging Wearable Apps 565 path: /training/wearables/apps/packaging.html 566 - title: Debugging over Bluetooth 567 path: /training/wearables/apps/bt-debugging.html 568 - title: Creating Custom UIs 569 path: /training/wearables/ui/index.html 570 path_attributes: 571 - name: description 572 value: How to create custom user interfaces for wearable apps. 573 section: 574 - title: Defining Layouts 575 path: /training/wearables/ui/layouts.html 576 - title: Creating Cards 577 path: /training/wearables/ui/cards.html 578 - title: Creating Lists 579 path: /training/wearables/ui/lists.html 580 - title: Creating a 2D Picker 581 path: /training/wearables/ui/2d-picker.html 582 - title: Showing Confirmations 583 path: /training/wearables/ui/confirm.html 584 - title: Exiting Full-Screen Activities 585 path: /training/wearables/ui/exit.html 586 - title: Sending and Syncing Data 587 path: /training/wearables/data-layer/index.html 588 path_attributes: 589 - name: description 590 value: How to sync data between handhelds and wearables. 591 section: 592 - title: Accessing the Wearable Data Layer 593 path: /training/wearables/data-layer/accessing.html 594 - title: Syncing Data Items 595 path: /training/wearables/data-layer/data-items.html 596 - title: Transferring Assets 597 path: /training/wearables/data-layer/assets.html 598 - title: Sending and Receiving Messages 599 path: /training/wearables/data-layer/messages.html 600 - title: Handling Data Layer Events 601 path: /training/wearables/data-layer/events.html 602 - title: Creating Watch Faces 603 path: /training/wearables/watch-faces/index.html 604 path_attributes: 605 - name: description 606 value: How to create watch faces for wearables. 607 section: 608 - title: Designing Watch Faces 609 path: /training/wearables/watch-faces/designing.html 610 - title: Building a Watch Face Service 611 path: /training/wearables/watch-faces/service.html 612 - title: Drawing Watch Faces 613 path: /training/wearables/watch-faces/drawing.html 614 - title: Showing Information in Watch Faces 615 path: /training/wearables/watch-faces/information.html 616 - title: Creating Interactive Watch Faces 617 path: /training/wearables/watch-faces/interacting.html 618 - title: Providing Configuration Activities 619 path: /training/wearables/watch-faces/configuration.html 620 - title: Addressing Common Issues 621 path: /training/wearables/watch-faces/issues.html 622 - title: Optimizing Performance and Battery Life 623 path: /training/wearables/watch-faces/performance.html 624 - title: Detecting Location 625 path: /training/articles/wear-location-detection.html 626 path_attributes: 627 - name: description 628 value: How to detect location data on Android Wear devices. 629 - title: Requesting Permissions 630 path: /training/articles/wear-permissions.html 631 path_attributes: 632 - name: description 633 value: How to request permissions on Android Wear devices. 634 - title: Using the Speaker 635 path: /training/wearables/wearable-sounds.html 636 path_attributes: 637 - name: description 638 value: How to use the speaker on Android Wear devices. 639 640 - title: Building Apps for TV 641 path: /training/tv/index.html 642 section: 643 - title: Building TV Apps 644 path: /training/tv/start/index.html 645 path_attributes: 646 - name: ja-lang 647 value: TV 648 - name: description 649 value: How to start building TV apps or extend your existing app to run on TV devices. 650 section: 651 - title: Getting Started with TV Apps 652 path: /training/tv/start/start.html 653 path_attributes: 654 - name: ja-lang 655 value: TV 656 - title: Handling TV Hardware 657 path: /training/tv/start/hardware.html 658 path_attributes: 659 - name: ja-lang 660 value: TV 661 - title: Building TV Layouts 662 path: /training/tv/start/layouts.html 663 path_attributes: 664 - name: ja-lang 665 value: TV 666 - title: Creating TV Navigation 667 path: /training/tv/start/navigation.html 668 path_attributes: 669 - name: ja-lang 670 value: TV 671 - title: Building TV Playback Apps 672 path: /training/tv/playback/index.html 673 path_attributes: 674 - name: ja-lang 675 value: TV 676 - name: description 677 value: How to build apps that provide media catalogs and play content. 678 section: 679 - title: Creating a Catalog Browser 680 path: /training/tv/playback/browse.html 681 path_attributes: 682 - name: ja-lang 683 value: 684 - title: Providing a Card View 685 path: /training/tv/playback/card.html 686 - title: Building a Details View 687 path: /training/tv/playback/details.html 688 path_attributes: 689 - name: ja-lang 690 value: 691 - title: Displaying a Now Playing Card 692 path: /training/tv/playback/now-playing.html 693 path_attributes: 694 - name: ja-lang 695 value: 696 - title: Adding a Guided Step 697 path: /training/tv/playback/guided-step.html 698 - title: Enabling Background Playback 699 path: /training/tv/playback/options.html 700 - title: Adding Picture-in-picture 701 path: /training/tv/playback/picture-in-picture.html 702 - title: Helping Users Find Content on TV 703 path: /training/tv/discovery/index.html 704 path_attributes: 705 - name: description 706 value: How to help users discover content from your app. 707 section: 708 - title: Recommending TV Content 709 path: /training/tv/discovery/recommendations.html 710 - title: Making TV Apps Searchable 711 path: /training/tv/discovery/searchable.html 712 - title: Searching within TV Apps 713 path: /training/tv/discovery/in-app-search.html 714 - title: Building TV Games 715 path: /training/tv/games/index.html 716 path_attributes: 717 - name: description 718 value: How to build games for TV. 719 - title: Building TV Channels 720 path: /training/tv/tif/index.html 721 path_attributes: 722 - name: description 723 value: How to build channels for TV. 724 section: 725 - title: Developing a TV Input Service 726 path: /training/tv/tif/tvinput.html 727 - title: Working with Channel Data 728 path: /training/tv/tif/channel.html 729 - title: Managing User Interaction 730 path: /training/tv/tif/ui.html 731 - title: Supporting Content Recording 732 path: /training/tv/tif/content-recording.html 733 - title: TV Apps Checklist 734 path: /training/tv/publishing/checklist.html 735 path_attributes: 736 - name: description 737 value: An itemized list of requirements for TV apps. 738 739 - title: Building Apps for Auto 740 path: /training/auto/index.html 741 section: 742 - title: Getting Started with Auto 743 path: /training/auto/start/index.html 744 path_attributes: 745 - name: description 746 value: How to start building or extending apps that work with Auto devices. 747 - title: Playing Audio for Auto 748 path: /training/auto/audio/index.html 749 path_attributes: 750 - name: description 751 value: How to extend audio apps to play content on Auto devices. 752 - title: Messaging for Auto 753 path: /training/auto/messaging/index.html 754 path_attributes: 755 - name: description 756 value: How to extend text messaging apps to work with Auto devices. 757 - title: Testing for Auto 758 path: /training/auto/testing/index.html 759 path_attributes: 760 - name: description 761 value: How to use DHU to test Auto apps. 762 763 - title: Best Practices for Interaction & Engagement 764 path: /training/best-ux.html 765 section: 766 - title: Designing Effective Navigation 767 path: /training/design-navigation/index.html 768 path_attributes: 769 - name: description 770 value: How to plan your app's screen hierarchy and forms of navigation so users can effectively and intuitively traverse your app content using various navigation patterns. 771 section: 772 - title: Planning Screens and Their Relationships 773 path: /training/design-navigation/screen-planning.html 774 - title: Planning for Multiple Touchscreen Sizes 775 path: /training/design-navigation/multiple-sizes.html 776 - title: Providing Descendant and Lateral Navigation 777 path: /training/design-navigation/descendant-lateral.html 778 - title: Providing Ancestral and Temporal Navigation 779 path: /training/design-navigation/ancestral-temporal.html 780 - title: "Putting it All Together: Wireframing the Example App" 781 path: /training/design-navigation/wireframing.html 782 - title: Implementing Effective Navigation 783 path: /training/implementing-navigation/index.html 784 path_attributes: 785 - name: description 786 value: How to implement various navigation patterns such as swipe views, a navigation drawer, and up navigation. 787 section: 788 - title: Creating Swipe Views with Tabs 789 path: /training/implementing-navigation/lateral.html 790 - title: Creating a Navigation Drawer 791 path: /training/implementing-navigation/nav-drawer.html 792 - title: Providing Up Navigation 793 path: /training/implementing-navigation/ancestral.html 794 - title: Providing Proper Back Navigation 795 path: /training/implementing-navigation/temporal.html 796 - title: Implementing Descendant Navigation 797 path: /training/implementing-navigation/descendant.html 798 - title: Notifying the User 799 path: /training/notify-user/index.html 800 path_attributes: 801 - name: description 802 value: How to display messages called notifications outside of your application's UI. 803 section: 804 - title: Building a Notification 805 path: /training/notify-user/build-notification.html 806 - title: Preserving Navigation when Starting an Activity 807 path: /training/notify-user/navigation.html 808 - title: Updating Notifications 809 path: /training/notify-user/managing.html 810 - title: Using Big View Styles 811 path: /training/notify-user/expanded.html 812 - title: Displaying Progress in a Notification 813 path: /training/notify-user/display-progress.html 814 - title: Supporting Swipe-to-Refresh 815 path: /training/swipe/index.html 816 path_attributes: 817 - name: description 818 value: How to modify your app's layout to support manual content updates triggered by the swipe-to-refresh gesture. 819 section: 820 - title: Adding Swipe-to-Refresh To Your App 821 path: /training/swipe/add-swipe-interface.html 822 - title: Responding to a Refresh Gesture 823 path: /training/swipe/respond-refresh-request.html 824 - title: Adding Search Functionality 825 path: /training/search/index.html 826 path_attributes: 827 - name: description 828 value: How to properly add a search interface to your app and create a searchable database. 829 section: 830 - title: Setting up the Search Interface 831 path: /training/search/setup.html 832 - title: Storing and Searching for Data 833 path: /training/search/search.html 834 - title: Remaining Backward Compatible 835 path: /training/search/backward-compat.html 836 - title: Making Your App Content Searchable by Google 837 path: /training/app-indexing/index.html 838 path_attributes: 839 - name: description 840 value: How to enable deep linking and indexing of your application content so that users can open this content directly from their mobile search results. 841 section: 842 - title: Enabling Deep Links for App Content 843 path: /training/app-indexing/deep-linking.html 844 - title: Specifying App Content for Indexing 845 path: /training/app-indexing/enabling-app-indexing.html 846 - title: Optimizing Content for the Assistant 847 path: /training/articles/assistant.html 848 path_attributes: 849 - name: description 850 value: Support contextually relevant actions through the Assist API. 851 - title: Handling App Links 852 path: /training/app-links/index.html 853 path_attributes: 854 - name: description 855 value: How to enable the system to handle web requests by taking the user directly to your app instead of your website. 856 857 - title: Best Practices for User Interface 858 path: /training/best-ui.html 859 section: 860 - title: Designing for Multiple Screens 861 path: /training/multiscreen/index.html 862 path_attributes: 863 - name: es-lang 864 value: Cmo disear aplicaciones para varias pantallas 865 - name: ja-lang 866 value: 867 - name: zh-cn-lang 868 value: 869 - name: description 870 value: How to build a user interface that's flexible enough to fit perfectly on any screen and how to create different interaction patterns that are optimized for different screen sizes. 871 section: 872 - title: Supporting Different Screen Sizes 873 path: /training/multiscreen/screensizes.html 874 path_attributes: 875 - name: es-lang 876 value: Cmo admitir varios tamaos de pantalla 877 - name: ja-lang 878 value: 879 - name: ko-lang 880 value: 881 - name: zh-cn-lang 882 value: 883 - title: Supporting Different Screen Densities 884 path: /training/multiscreen/screendensities.html 885 path_attributes: 886 - name: es-lang 887 value: Cmo admitir varias densidades de pantalla 888 - name: ja-lang 889 value: 890 - name: zh-cn-lang 891 value: 892 - title: Implementing Adaptive UI Flows 893 path: /training/multiscreen/adaptui.html 894 path_attributes: 895 - name: es-lang 896 value: Cmo implementar interfaces de usuario adaptables 897 - name: ja-lang 898 value: UI 899 - name: zh-cn-lang 900 value: 901 - title: Adding the App Bar 902 path: /training/appbar/index.html 903 path_attributes: 904 - name: description 905 value: How to use the support library's toolbar widget to implement an app bar that displays properly on a wide range of devices. 906 section: 907 - title: Setting Up the App Bar 908 path: /training/appbar/setting-up.html 909 - title: Adding and Handling Actions 910 path: /training/appbar/actions.html 911 - title: Adding an Up Action 912 path: /training/appbar/up-action.html 913 - title: Action Views and Action Providers 914 path: /training/appbar/action-views.html 915 - title: Showing Pop-Up Messages 916 path: /training/snackbar/index.html 917 path_attributes: 918 - name: description 919 value: How to use the support library's Snackbar widget to display a brief pop-up message. 920 section: 921 - title: Building and Displaying a Pop-Up Message 922 path: /training/snackbar/showing.html 923 - title: Adding an Action to a Message 924 path: /training/snackbar/action.html 925 - title: Creating Custom Views 926 path: /training/custom-views/index.html 927 path_attributes: 928 - name: description 929 value: How to build custom UI widgets that are interactive and smooth. 930 section: 931 - title: Creating a Custom View Class 932 path: /training/custom-views/create-view.html 933 - title: Implementing Custom Drawing 934 path: /training/custom-views/custom-drawing.html 935 - title: Making the View Interactive 936 path: /training/custom-views/making-interactive.html 937 - title: Optimizing the View 938 path: /training/custom-views/optimizing-view.html 939 - title: Creating Backward-Compatible UIs 940 path: /training/backward-compatible-ui/index.html 941 path_attributes: 942 - name: description 943 value: How to use UI components and other APIs from the more recent versions of Android while remaining compatible with older versions of the platform. 944 section: 945 - title: Abstracting the New APIs 946 path: /training/backward-compatible-ui/abstracting.html 947 - title: Proxying to the New APIs 948 path: /training/backward-compatible-ui/new-implementation.html 949 - title: Creating an Implementation with Older APIs 950 path: /training/backward-compatible-ui/older-implementation.html 951 - title: Using the Version-Aware Component 952 path: /training/backward-compatible-ui/using-component.html 953 - title: Implementing Accessibility 954 path: /training/accessibility/index.html 955 path_attributes: 956 - name: description 957 value: How to make your app accessible to users with vision impairment or other physical disabilities. 958 section: 959 - title: Developing Accessible Applications 960 path: /training/accessibility/accessible-app.html 961 - title: Developing Accessibility Services 962 path: /training/accessibility/service.html 963 - title: Accessibility Testing Checklist 964 path: /training/accessibility/testing.html 965 - title: Managing the System UI 966 path: /training/system-ui/index.html 967 path_attributes: 968 - name: description 969 value: How to hide and show status and navigation bars across different versions of Android, while managing the display of other screen components. 970 section: 971 - title: Dimming the System Bars 972 path: /training/system-ui/dim.html 973 - title: Hiding the Status Bar 974 path: /training/system-ui/status.html 975 - title: Hiding the Navigation Bar 976 path: /training/system-ui/navigation.html 977 - title: Using Immersive Full-Screen Mode 978 path: /training/system-ui/immersive.html 979 - title: Responding to UI Visibility Changes 980 path: /training/system-ui/visibility.html 981 - title: Creating Apps with Material Design 982 path: /training/material/index.html 983 path_attributes: 984 - name: es-lang 985 value: Crear aplicaciones con Material Design 986 - name: in-lang 987 value: Desain Bahan untuk Pengembang 988 - name: ja-lang 989 value: 990 - name: ko-lang 991 value: 992 - name: pt-br-lang 993 value: Material Design para desenvolvedores 994 - name: ru-lang 995 value: Material Design 996 - name: vi-lang 997 value: Material Design cho Nh pht trin 998 - name: zh-cn-lang 999 value: 1000 - name: zh-tw-lang 1001 value: 1002 - name: description 1003 value: How to implement material design on Android. 1004 section: 1005 - title: Getting Started 1006 path: /training/material/get-started.html 1007 path_attributes: 1008 - name: es-lang 1009 value: Comencemos 1010 - name: in-lang 1011 value: Memulai 1012 - name: ja-lang 1013 value: 1014 - name: ko-lang 1015 value: 1016 - name: pt-br-lang 1017 value: Como iniciar 1018 - name: ru-lang 1019 value: 1020 - name: vi-lang 1021 value: Bt u 1022 - name: zh-cn-lang 1023 value: 1024 - name: zh-tw-lang 1025 value: 1026 - title: Using the Material Theme 1027 path: /training/material/theme.html 1028 path_attributes: 1029 - name: es-lang 1030 value: Usar el tema Material 1031 - name: in-lang 1032 value: Menggunakan Tema Bahan 1033 - name: ja-lang 1034 value: 1035 - name: ko-lang 1036 value: 1037 - name: pt-br-lang 1038 value: Como usar o tema do Material 1039 - name: ru-lang 1040 value: Material Design 1041 - name: vi-lang 1042 value: S dng Ch Material 1043 - name: zh-cn-lang 1044 value: 1045 - name: zh-tw-lang 1046 value: 1047 - title: Creating Lists and Cards 1048 path: /training/material/lists-cards.html 1049 path_attributes: 1050 - name: es-lang 1051 value: Crear listas y tarjetas 1052 - name: in-lang 1053 value: Membuat Daftar dan Kartu 1054 - name: ja-lang 1055 value: 1056 - name: ko-lang 1057 value: 1058 - name: pt-br-lang 1059 value: Como criar listas e cartes 1060 - name: ru-lang 1061 value: 1062 - name: vi-lang 1063 value: To Danh sch v Th 1064 - name: zh-cn-lang 1065 value: 1066 - name: zh-tw-lang 1067 value: 1068 - title: Defining Shadows and Clipping Views 1069 path: /training/material/shadows-clipping.html 1070 path_attributes: 1071 - name: es-lang 1072 value: Definir vistas de recorte y sombras 1073 - name: in-lang 1074 value: Mendefinisikan Bayangan dan Memangkas Tampilan 1075 - name: ja-lang 1076 value: 1077 - name: ko-lang 1078 value: 1079 - name: pt-br-lang 1080 value: Como definir sombras e recortar visualizaes 1081 - name: ru-lang 1082 value: 1083 - name: vi-lang 1084 value: nh ngha bng v Dng xem Ct hnh 1085 - name: zh-cn-lang 1086 value: 1087 - name: zh-tw-lang 1088 value: 1089 - title: Working with Drawables 1090 path: /training/material/drawables.html 1091 path_attributes: 1092 - name: es-lang 1093 value: Trabajar con interfaces dibujables 1094 - name: in-lang 1095 value: Bekerja dengan Drawable 1096 - name: ja-lang 1097 value: 1098 - name: ko-lang 1099 value: Drawable 1100 - name: pt-br-lang 1101 value: Como trabalhar com desenhveis 1102 - name: ru-lang 1103 value: 1104 - name: vi-lang 1105 value: Lm vic vi Ni dung v c 1106 - name: zh-cn-lang 1107 value: Drawables 1108 - name: zh-tw-lang 1109 value: 1110 - title: Defining Custom Animations 1111 path: /training/material/animations.html 1112 path_attributes: 1113 - name: es-lang 1114 value: Definir animaciones personalizadas 1115 - name: in-lang 1116 value: Mendefinisikan Animasi Custom 1117 - name: ja-lang 1118 value: 1119 - name: ko-lang 1120 value: 1121 - name: pt-br-lang 1122 value: Como definir animaes personalizadas 1123 - name: ru-lang 1124 value: 1125 - name: vi-lang 1126 value: nh ngha Hot hnh Ty chnh 1127 - name: zh-cn-lang 1128 value: 1129 - name: zh-tw-lang 1130 value: 1131 - title: Maintaining Compatibility 1132 path: /training/material/compatibility.html 1133 path_attributes: 1134 - name: es-lang 1135 value: Mantener la compatibilidad 1136 - name: in-lang 1137 value: Mempertahankan Kompatibilitas 1138 - name: ja-lang 1139 value: 1140 - name: ko-lang 1141 value: 1142 - name: pt-br-lang 1143 value: Como manter a compatibilidade 1144 - name: ru-lang 1145 value: 1146 - name: vi-lang 1147 value: Duy tr Tnh tng thch 1148 - name: zh-cn-lang 1149 value: 1150 - name: zh-tw-lang 1151 value: 1152 1153 - title: Best Practices for User Input 1154 path: /training/best-user-input.html 1155 section: 1156 - title: Using Touch Gestures 1157 path: /training/gestures/index.html 1158 path_attributes: 1159 - name: description 1160 value: How to write apps that allow users to interact with the touch screen via touch gestures. 1161 section: 1162 - title: Detecting Common Gestures 1163 path: /training/gestures/detector.html 1164 - title: Tracking Movement 1165 path: /training/gestures/movement.html 1166 - title: Animating a Scroll Gesture 1167 path: /training/gestures/scroll.html 1168 - title: Handling Multi-Touch Gestures 1169 path: /training/gestures/multi.html 1170 - title: Dragging and Scaling 1171 path: /training/gestures/scale.html 1172 - title: Managing Touch Events in a ViewGroup 1173 path: /training/gestures/viewgroup.html 1174 - title: Handling Keyboard Input 1175 path: /training/keyboard-input/index.html 1176 path_attributes: 1177 - name: description 1178 value: How to specify the appearance and behaviors of soft input methods (such as on-screen keyboards) and how to optimize the experience with hardware keyboards. 1179 section: 1180 - title: Specifying the Input Method Type 1181 path: /training/keyboard-input/style.html 1182 - title: Handling Input Method Visibility 1183 path: /training/keyboard-input/visibility.html 1184 - title: Supporting Keyboard Navigation 1185 path: /training/keyboard-input/navigation.html 1186 - title: Handling Keyboard Actions 1187 path: /training/keyboard-input/commands.html 1188 - title: Supporting Game Controllers 1189 path: /training/game-controllers/index.html 1190 path_attributes: 1191 - name: description 1192 value: How to write apps that support game controllers. 1193 section: 1194 - title: Handling Controller Actions 1195 path: /training/game-controllers/controller-input.html 1196 - title: Supporting Controllers Across Android Versions 1197 path: /training/game-controllers/compatibility.html 1198 - title: Supporting Multiple Game Controllers 1199 path: /training/game-controllers/multiple-controllers.html 1200 1201 - title: Best Practices for Background Jobs 1202 path: /training/best-background.html 1203 section: 1204 - title: Running in a Background Service 1205 path: /training/run-background-service/index.html 1206 path_attributes: 1207 - name: description 1208 value: How to improve UI performance and responsiveness by sending work to a Service running in the background 1209 section: 1210 - title: Creating a Background Service 1211 path: /training/run-background-service/create-service.html 1212 - title: Sending Work Requests to the Background Service 1213 path: /training/run-background-service/send-request.html 1214 - title: Reporting Work Status 1215 path: /training/run-background-service/report-status.html 1216 - title: Loading Data in the Background 1217 path: /training/load-data-background/index.html 1218 path_attributes: 1219 - name: description 1220 value: How to use CursorLoader to query data without affecting UI responsiveness. 1221 section: 1222 - title: Running a Query with a CursorLoader 1223 path: /training/load-data-background/setup-loader.html 1224 - title: Handling the Results 1225 path: /training/load-data-background/handle-results.html 1226 - title: Managing Device Awake State 1227 path: /training/scheduling/index.html 1228 path_attributes: 1229 - name: description 1230 value: How to use repeating alarms and wake locks to run background jobs. 1231 section: 1232 - title: Keeping the Device Awake 1233 path: /training/scheduling/wakelock.html 1234 - title: Scheduling Repeating Alarms 1235 path: /training/scheduling/alarms.html 1236 1237 - title: Best Practices for Performance 1238 path: /training/best-performance.html 1239 section: 1240 - title: Managing Your App's Memory 1241 path: /training/articles/memory.html 1242 path_attributes: 1243 - name: description 1244 value: How to keep your app's memory footprint small in order to improve performance on a variety of mobile devices. 1245 - title: Performance Tips 1246 path: /training/articles/perf-tips.html 1247 path_attributes: 1248 - name: description 1249 value: How to optimize your app's performance in various ways to improve its responsiveness and battery efficiency. 1250 - title: Improving Layout Performance 1251 path: /training/improving-layouts/index.html 1252 path_attributes: 1253 - name: description 1254 value: How to identify problems in your app's layout performance and improve the UI responsiveness. 1255 section: 1256 - title: Optimizing Layout Hierarchies 1257 path: /training/improving-layouts/optimizing-layout.html 1258 - title: Re-using Layouts with <include/> 1259 path: /training/improving-layouts/reusing-layouts.html 1260 - title: Loading Views On Demand 1261 path: /training/improving-layouts/loading-ondemand.html 1262 - title: Making ListView Scrolling Smooth 1263 path: /training/improving-layouts/smooth-scrolling.html 1264 - title: Optimizing Battery Life 1265 path: /training/monitoring-device-state/index.html 1266 path_attributes: 1267 - name: es-lang 1268 value: Cmo optimizar la duracin de la batera 1269 - name: ja-lang 1270 value: 1271 - name: zh-cn-lang 1272 value: 1273 - name: description 1274 value: How to minimize the amount of power your app requires by adapting to current power conditions and performing power-hungry tasks at proper intervals. 1275 section: 1276 - title: Reducing Network Battery Drain 1277 path: /training/performance/battery/network/index.html 1278 section: 1279 - title: Collecting Network Traffic Data 1280 path: /training/performance/battery/network/gather-data.html 1281 - title: Analyzing Network Traffic Data 1282 path: /training/performance/battery/network/analyze-data.html 1283 - title: Optimizing User-Initiated Network Use 1284 path: /training/performance/battery/network/action-user-traffic.html 1285 - title: Optimizing App-Initiated Network Use 1286 path: /training/performance/battery/network/action-app-traffic.html 1287 - title: Optimizing Server-Initiated Network Use 1288 path: /training/performance/battery/network/action-server-traffic.html 1289 - title: Optimizing General Network Use 1290 path: /training/performance/battery/network/action-any-traffic.html 1291 - title: Optimizing for Doze and App Standby 1292 path: /training/monitoring-device-state/doze-standby.html 1293 - title: Monitoring the Battery Level and Charging State 1294 path: /training/monitoring-device-state/battery-monitoring.html 1295 path_attributes: 1296 - name: es-lang 1297 value: Cmo controlar el nivel de batera y el estado de carga 1298 - name: ja-lang 1299 value: 1300 - name: zh-cn-lang 1301 value: 1302 - title: Determining and Monitoring the Docking State and Type 1303 path: /training/monitoring-device-state/docking-monitoring.html 1304 path_attributes: 1305 - name: es-lang 1306 value: Cmo determinar y controlar el tipo de conector y el estado de la conexin 1307 - name: ja-lang 1308 value: 1309 - name: zh-cn-lang 1310 value: 1311 - title: Determining and Monitoring the Connectivity Status 1312 path: /training/monitoring-device-state/connectivity-monitoring.html 1313 path_attributes: 1314 - name: es-lang 1315 value: Cmo determinar y controlar el estado de la conectividad 1316 - name: ja-lang 1317 value: 1318 - name: zh-cn-lang 1319 value: 1320 - title: Manipulating Broadcast Receivers On Demand 1321 path: /training/monitoring-device-state/manifest-receivers.html 1322 path_attributes: 1323 - name: es-lang 1324 value: Cmo manipular los receptores de emisin bajo demanda 1325 - name: ja-lang 1326 value: 1327 - name: zh-cn-lang 1328 value: 1329 - title: Sending Operations to Multiple Threads 1330 path: /training/multiple-threads/index.html 1331 path_attributes: 1332 - name: description 1333 value: How to improve the performance and scalability of long-running operations by dispatching work to multiple threads. 1334 section: 1335 - title: Specifying the Code to Run on a Thread 1336 path: /training/multiple-threads/define-runnable.html 1337 - title: Creating a Manager for Multiple Threads 1338 path: /training/multiple-threads/create-threadpool.html 1339 - title: Running Code on a Thread Pool Thread 1340 path: /training/multiple-threads/run-code.html 1341 - title: Communicating with the UI Thread 1342 path: /training/multiple-threads/communicate-ui.html 1343 - title: Keeping Your App Responsive 1344 path: /training/articles/perf-anr.html 1345 path_attributes: 1346 - name: description 1347 value: How to keep your app responsive to user interaction so the UI does not lock-up and display an "Application Not Responding" dialog. 1348 - title: JNI Tips 1349 path: /training/articles/perf-jni.html 1350 path_attributes: 1351 - name: description 1352 value: How to efficiently use the Java Native Interface with the Android NDK. 1353 - title: SMP Primer for Android 1354 path: /training/articles/smp.html 1355 path_attributes: 1356 - name: description 1357 value: Tips for coding Android apps on symmetric multiprocessor systems. 1358 1359 - title: Best Practices for Security & Privacy 1360 path: /training/best-security.html 1361 section: 1362 - title: Security Tips 1363 path: /training/articles/security-tips.html 1364 path_attributes: 1365 - name: description 1366 value: How to perform various tasks and keep your app's data and your user's data secure. 1367 - title: Security with HTTPS and SSL 1368 path: /training/articles/security-ssl.html 1369 path_attributes: 1370 - name: description 1371 value: How to ensure that your app is secure when performing network transactions. 1372 - title: Network Security Configuration 1373 path: /training/articles/security-config.html 1374 path_attributes: 1375 - name: description 1376 value: Customize the behavior of your app's secure network connections safely. 1377 - title: Updating Your Security Provider to Protect Against SSL Exploits 1378 path: /training/articles/security-gms-provider.html 1379 path_attributes: 1380 - name: description 1381 value: How to use and update Google Play services security provider, to protect against SSL exploits. 1382 - title: Checking Device Compatibility with SafetyNet 1383 path: /training/safetynet/index.html 1384 path_attributes: 1385 - name: description 1386 value: How to use the SafetyNet service to analyze a device where your app is running and get information about its compatibility with your app. 1387 - title: Checking URLs with the Safe Browsing API 1388 path: /training/safebrowsing/index.html 1389 path_attributes: 1390 - name: description 1391 value: How to use the SafetyNet service to determine if a URL is designated as a known threat. 1392 - title: Verifying Hardware-backed Key Pairs with Key Attestation 1393 path: /training/articles/security-key-attestation.html 1394 path_attributes: 1395 - name: description 1396 value: How to retrieve and verify the properties of a device's hardware-backed key pair. 1397 - title: Enhancing Security with Device Management Policies 1398 path: /work/device-management-policy.html 1399 path_attributes: 1400 - name: description 1401 value: How to create an application that enforces security policies on devices. 1402 - title: Supporting Direct Boot 1403 path: /training/articles/direct-boot.html 1404 path_attributes: 1405 - name: description 1406 value: How use device encrypted storage during Direct Boot mode. 1407 - title: Using Scoped Directory Access 1408 path: /training/articles/scoped-directory-access.html 1409 path_attributes: 1410 - name: description 1411 value: How to use scoped directory access to request access to external storage directories. 1412 1413 - title: Best Practices for Permissions & Identifiers 1414 path: /training/best-permissions-ids.html 1415 section: 1416 - title: Permissions and User Data 1417 path: /training/articles/user-data-overview.html 1418 path_attributes: 1419 - name: description 1420 value: Overview of app permissions on Android and how they affect your users. 1421 - title: Best Practices for App Permissions 1422 path: /training/articles/user-data-permissions.html 1423 path_attributes: 1424 - name: description 1425 value: How to manage permissions the right way for users. 1426 - title: Best Practices for Unique Identifiers 1427 path: /training/articles/user-data-ids.html 1428 path_attributes: 1429 - name: description 1430 value: Unique identifiers available and how to choose the right one for your use case. 1431 1432 - title: Best Practices for Testing 1433 path: /training/testing/index.html 1434 section: 1435 - title: Getting Started with Testing 1436 path: /training/testing/start/index.html 1437 path_attributes: 1438 - name: description 1439 value: How to get started with testing your Android applications. 1440 - title: Building Effective Unit Tests 1441 path: /training/testing/unit-testing/index.html 1442 path_attributes: 1443 - name: description 1444 value: How to build effective unit tests for Android apps. 1445 section: 1446 - title: Building Local Unit Tests 1447 path: /training/testing/unit-testing/local-unit-tests.html 1448 - title: Building Instrumented Unit Tests 1449 path: /training/testing/unit-testing/instrumented-unit-tests.html 1450 - title: Automating UI Tests 1451 path: /training/testing/ui-testing/index.html 1452 path_attributes: 1453 - name: description 1454 value: How to automate your user interface tests for Android apps. 1455 section: 1456 - title: Testing UI for a Single App 1457 path: /training/testing/ui-testing/espresso-testing.html 1458 - title: Testing UI for Multiple Apps 1459 path: /training/testing/ui-testing/uiautomator-testing.html 1460 - title: Testing App Component Integrations 1461 path: /training/testing/integration-testing/index.html 1462 path_attributes: 1463 - name: description 1464 value: How to build effective integration tests for Android apps. 1465 section: 1466 - title: Testing Your Service 1467 path: /training/testing/integration-testing/service-testing.html 1468 - title: Testing Your Content Provider 1469 path: /training/testing/integration-testing/content-provider-testing.html 1470 - title: Testing Display Performance 1471 path: /training/testing/performance.html 1472 path_attributes: 1473 - name: description 1474 value: How to automate UI performance testing. 1475 1476 - title: Using Google Play to Distribute & Monetize 1477 path: /training/distribute.html 1478 section: 1479 - title: Selling In-app Products 1480 path: /training/in-app-billing/index.html 1481 path_attributes: 1482 - name: description 1483 value: How to sell in-app products from your application using In-app Billing. 1484 section: 1485 - title: Preparing Your App 1486 path: /training/in-app-billing/preparing-iab-app.html 1487 - title: Establishing Products for Sale 1488 path: /training/in-app-billing/list-iab-products.html 1489 - title: Purchasing Products 1490 path: /training/in-app-billing/purchase-iab-products.html 1491 - title: Testing Your App 1492 path: /training/in-app-billing/test-iab-app.html 1493 - title: Maintaining Multiple APKs 1494 path: /training/multiple-apks/index.html 1495 path_attributes: 1496 - name: description 1497 value: How to publish your app on Google Play with separate APKs that target different devices, while using a single app listing. 1498 section: 1499 - title: Creating Multiple APKs for Different API Levels 1500 path: /training/multiple-apks/api.html 1501 - title: Creating Multiple APKs for Different Screen Sizes 1502 path: /training/multiple-apks/screensize.html 1503 - title: Creating Multiple APKs for Different GL Textures 1504 path: /training/multiple-apks/texture.html 1505 - title: Creating Multiple APKs with 2+ Dimensions 1506 path: /training/multiple-apks/multiple.html 1507