Home | History | Annotate | Download | only in training
      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: Resolving Cloud Save Conflicts
    442     path: /training/cloudsave/conflict-res.html
    443     path_attributes:
    444     - name: description
    445       value: How to design a robust conflict resolution strategy for apps that save data to the cloud.
    446   - title: Transferring Data Using Sync Adapters
    447     path: /training/sync-adapters/index.html
    448     path_attributes:
    449     - name: description
    450       value: How to transfer data between the cloud and the device using the Android sync adapter framework
    451     section:
    452     - title: Creating a Stub Authenticator
    453       path: /training/sync-adapters/creating-authenticator.html
    454     - title: Creating a Stub Content Provider
    455       path: /training/sync-adapters/creating-stub-provider.html
    456     - title: Creating a Sync Adapter
    457       path: /training/sync-adapters/creating-sync-adapter.html
    458     - title: Running a Sync Adapter
    459       path: /training/sync-adapters/running-sync-adapter.html
    460   - title: Transmitting Network Data Using Volley
    461     path: /training/volley/index.html
    462     path_attributes:
    463     - name: description
    464       value: How to perform fast, scalable UI operations over the network using Volley
    465     section:
    466     - title: Sending a Simple Request
    467       path: /training/volley/simple.html
    468     - title: Setting Up a RequestQueue
    469       path: /training/volley/requestqueue.html
    470     - title: Making a Standard Request
    471       path: /training/volley/request.html
    472     - title: Implementing a Custom Request
    473       path: /training/volley/request-custom.html
    474 
    475 - title: Building Apps with Location & Maps
    476   path: /training/building-location.html
    477   section:
    478   - title: Making Your App Location-Aware
    479     path: /training/location/index.html
    480     path_attributes:
    481     - name: description
    482       value: How to add location-aware features to your app by getting the user's current location.
    483     section:
    484     - title: Getting the Last Known Location
    485       path: /training/location/retrieve-current.html
    486     - title: Changing Location Settings
    487       path: /training/location/change-location-settings.html
    488     - title: Receiving Location Updates
    489       path: /training/location/receive-location-updates.html
    490     - title: Displaying a Location Address
    491       path: /training/location/display-address.html
    492     - title: Creating and Monitoring Geofences
    493       path: /training/location/geofencing.html
    494   - title: Adding Maps
    495     path: /training/maps/index.html
    496     path_attributes:
    497     - name: description
    498       value: How to add maps and mapping information to your app.
    499 
    500 - title: Building Apps with User Info & Sign-In
    501   path: /training/building-userinfo.html
    502   section:
    503   - title: Accessing Contacts Data
    504     path: /training/contacts-provider/index.html
    505     path_attributes:
    506     - name: description
    507       value: How to use Android's central address book, the Contacts Provider, to display contacts and their details and modify contact information.
    508     section:
    509     - title: Retrieving a List of Contacts
    510       path: /training/contacts-provider/retrieve-names.html
    511     - title: Retrieving Details for a Contact
    512       path: /training/contacts-provider/retrieve-details.html
    513     - title: Modifying Contacts Using Intents
    514       path: /training/contacts-provider/modify-data.html
    515     - title: Displaying the Quick Contact Badge
    516       path: /training/contacts-provider/display-contact-badge.html
    517   - title: Adding Sign-In
    518     path: /training/sign-in/index.html
    519     path_attributes:
    520     - name: description
    521       value: How to add user sign-in functionality to your app.
    522 
    523 - title: Building Apps for Wearables
    524   path: /training/building-wearables.html
    525   section:
    526   - title: Adding Wearable Features to Notifications
    527     path: /training/wearables/notifications/index.html
    528     path_attributes:
    529     - name: description
    530       value: How to build handheld notifications that are synced to and look great on wearables.
    531     section:
    532     - title: Creating a Notification
    533       path: /training/wearables/notifications/creating.html
    534     - title: Receiving Voice Input in a Notification
    535       path: /training/wearables/notifications/voice-input.html
    536     - title: Adding Pages to a Notification
    537       path: /training/wearables/notifications/pages.html
    538     - title: Stacking Notifications
    539       path: /training/wearables/notifications/stacks.html
    540   - title: Creating Wearable Apps
    541     path: /training/wearables/apps/index.html
    542     path_attributes:
    543     - name: description
    544       value: How to build apps that run directly on wearables.
    545     section:
    546     - title: Creating and Running a Wearable App
    547       path: /training/wearables/apps/creating.html
    548     - title: Creating Custom Layouts
    549       path: /training/wearables/apps/layouts.html
    550     - title: Keeping Your App Visible
    551       path: /training/wearables/apps/always-on.html
    552     - title: Adding Voice Capabilities
    553       path: /training/wearables/apps/voice.html
    554     - title: Packaging Wearable Apps
    555       path: /training/wearables/apps/packaging.html
    556     - title: Debugging over Bluetooth
    557       path: /training/wearables/apps/bt-debugging.html
    558   - title: Creating Custom UIs
    559     path: /training/wearables/ui/index.html
    560     path_attributes:
    561     - name: description
    562       value: How to create custom user interfaces for wearable apps.
    563     section:
    564     - title: Defining Layouts
    565       path: /training/wearables/ui/layouts.html
    566     - title: Creating Cards
    567       path: /training/wearables/ui/cards.html
    568     - title: Creating Lists
    569       path: /training/wearables/ui/lists.html
    570     - title: Creating a 2D Picker
    571       path: /training/wearables/ui/2d-picker.html
    572     - title: Showing Confirmations
    573       path: /training/wearables/ui/confirm.html
    574     - title: Exiting Full-Screen Activities
    575       path: /training/wearables/ui/exit.html
    576   - title: Sending and Syncing Data
    577     path: /training/wearables/data-layer/index.html
    578     path_attributes:
    579     - name: description
    580       value: How to sync data between handhelds and wearables.
    581     section:
    582     - title: Accessing the Wearable Data Layer
    583       path: /training/wearables/data-layer/accessing.html
    584     - title: Syncing Data Items
    585       path: /training/wearables/data-layer/data-items.html
    586     - title: Transferring Assets
    587       path: /training/wearables/data-layer/assets.html
    588     - title: Sending and Receiving Messages
    589       path: /training/wearables/data-layer/messages.html
    590     - title: Handling Data Layer Events
    591       path: /training/wearables/data-layer/events.html
    592   - title: Creating Watch Faces
    593     path: /training/wearables/watch-faces/index.html
    594     path_attributes:
    595     - name: description
    596       value: How to create watch faces for wearables.
    597     section:
    598     - title: Designing Watch Faces
    599       path: /training/wearables/watch-faces/designing.html
    600     - title: Building a Watch Face Service
    601       path: /training/wearables/watch-faces/service.html
    602     - title: Drawing Watch Faces
    603       path: /training/wearables/watch-faces/drawing.html
    604     - title: Showing Information in Watch Faces
    605       path: /training/wearables/watch-faces/information.html
    606     - title: Creating Interactive Watch Faces
    607       path: /training/wearables/watch-faces/interacting.html
    608     - title: Providing Configuration Activities
    609       path: /training/wearables/watch-faces/configuration.html
    610     - title: Addressing Common Issues
    611       path: /training/wearables/watch-faces/issues.html
    612     - title: Optimizing Performance and Battery Life
    613       path: /training/wearables/watch-faces/performance.html
    614   - title: Detecting Location
    615     path: /training/articles/wear-location-detection.html
    616     path_attributes:
    617     - name: description
    618       value: How to detect location data on Android Wear devices.
    619   - title: Requesting Permissions
    620     path: /training/articles/wear-permissions.html
    621     path_attributes:
    622     - name: description
    623       value: How to request permissions on Android Wear devices.
    624   - title: Using the Speaker
    625     path: /training/wearables/wearable-sounds.html
    626     path_attributes:
    627     - name: description
    628       value: How to use the speaker on Android Wear devices.
    629 
    630 - title: Building Apps for TV
    631   path: /training/tv/index.html
    632   section:
    633   - title: Building TV Apps
    634     path: /training/tv/start/index.html
    635     path_attributes:
    636     - name: ja-lang
    637       value: TV 
    638     - name: description
    639       value: How to start building TV apps or extend your existing app to run on TV devices.
    640     section:
    641     - title: Getting Started with TV Apps
    642       path: /training/tv/start/start.html
    643       path_attributes:
    644       - name: ja-lang
    645         value: TV 
    646     - title: Handling TV Hardware
    647       path: /training/tv/start/hardware.html
    648       path_attributes:
    649       - name: ja-lang
    650         value: TV 
    651     - title: Building TV Layouts
    652       path: /training/tv/start/layouts.html
    653       path_attributes:
    654       - name: ja-lang
    655         value: TV 
    656     - title: Creating TV Navigation
    657       path: /training/tv/start/navigation.html
    658       path_attributes:
    659       - name: ja-lang
    660         value: TV 
    661   - title: Building TV Playback Apps
    662     path: /training/tv/playback/index.html
    663     path_attributes:
    664     - name: ja-lang
    665       value: TV 
    666     - name: description
    667       value: How to build apps that provide media catalogs and play content.
    668     section:
    669     - title: Creating a Catalog Browser
    670       path: /training/tv/playback/browse.html
    671       path_attributes:
    672       - name: ja-lang
    673         value:  
    674     - title: Providing a Card View
    675       path: /training/tv/playback/card.html
    676     - title: Building a Details View
    677       path: /training/tv/playback/details.html
    678       path_attributes:
    679       - name: ja-lang
    680         value: 
    681     - title: Displaying a Now Playing Card
    682       path: /training/tv/playback/now-playing.html
    683       path_attributes:
    684       - name: ja-lang
    685         value: 
    686     - title: Adding a Guided Step
    687       path: /training/tv/playback/guided-step.html
    688     - title: Introducing First-time Users to Your App
    689       path: /training/tv/playback/onboarding.html
    690     - title: Enabling Background Playback
    691       path: /training/tv/playback/options.html
    692     - title: Adding Picture-in-picture
    693       path: /training/tv/playback/picture-in-picture.html
    694   - title: Helping Users Find Content on TV
    695     path: /training/tv/discovery/index.html
    696     path_attributes:
    697     - name: description
    698       value: How to help users discover content from your app.
    699     section:
    700     - title: Recommending TV Content
    701       path: /training/tv/discovery/recommendations.html
    702     - title: Making TV Apps Searchable
    703       path: /training/tv/discovery/searchable.html
    704     - title: Searching within TV Apps
    705       path: /training/tv/discovery/in-app-search.html
    706   - title: Building TV Games
    707     path: /training/tv/games/index.html
    708     path_attributes:
    709     - name: description
    710       value: How to build games for TV.
    711   - title: Building TV Channels
    712     path: /training/tv/tif/index.html
    713     path_attributes:
    714     - name: description
    715       value: How to build channels for TV.
    716     section:
    717     - title: Developing a TV Input Service
    718       path: /training/tv/tif/tvinput.html
    719     - title: Working with Channel Data
    720       path: /training/tv/tif/channel.html
    721     - title: Managing User Interaction
    722       path: /training/tv/tif/ui.html
    723     - title: Supporting Content Recording
    724       path: /training/tv/tif/content-recording.html
    725   - title: TV Apps Checklist
    726     path: /training/tv/publishing/checklist.html
    727     path_attributes:
    728     - name: description
    729       value: An itemized list of requirements for TV apps.
    730 
    731 - title: Building Apps for Auto
    732   path: /training/auto/index.html
    733   section:
    734   - title: Getting Started with Auto
    735     path: /training/auto/start/index.html
    736     path_attributes:
    737     - name: description
    738       value: How to start building or extending apps that work with Auto devices.
    739   - title: Playing Audio for Auto
    740     path: /training/auto/audio/index.html
    741     path_attributes:
    742     - name: description
    743       value: How to extend audio apps to play content on Auto devices.
    744   - title: Messaging for Auto
    745     path: /training/auto/messaging/index.html
    746     path_attributes:
    747     - name: description
    748       value: How to extend text messaging apps to work with Auto devices.
    749   - title: Testing for Auto
    750     path: /training/auto/testing/index.html
    751     path_attributes:
    752     - name: description
    753       value: How to use DHU to test Auto apps.
    754 
    755 - title: Best Practices for Interaction & Engagement
    756   path: /training/best-ux.html
    757   section:
    758   - title: Designing Effective Navigation
    759     path: /training/design-navigation/index.html
    760     path_attributes:
    761     - name: description
    762       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.
    763     section:
    764     - title: Planning Screens and Their Relationships
    765       path: /training/design-navigation/screen-planning.html
    766     - title: Planning for Multiple Touchscreen Sizes
    767       path: /training/design-navigation/multiple-sizes.html
    768     - title: Providing Descendant and Lateral Navigation
    769       path: /training/design-navigation/descendant-lateral.html
    770     - title: Providing Ancestral and Temporal Navigation
    771       path: /training/design-navigation/ancestral-temporal.html
    772     - title: "Putting it All Together: Wireframing the Example App"
    773       path: /training/design-navigation/wireframing.html
    774   - title: Implementing Effective Navigation
    775     path: /training/implementing-navigation/index.html
    776     path_attributes:
    777     - name: description
    778       value: How to implement various navigation patterns such as swipe views, a navigation drawer, and up navigation.
    779     section:
    780     - title: Creating Swipe Views with Tabs
    781       path: /training/implementing-navigation/lateral.html
    782     - title: Creating a Navigation Drawer
    783       path: /training/implementing-navigation/nav-drawer.html
    784     - title: Providing Up Navigation
    785       path: /training/implementing-navigation/ancestral.html
    786     - title: Providing Proper Back Navigation
    787       path: /training/implementing-navigation/temporal.html
    788     - title: Implementing Descendant Navigation
    789       path: /training/implementing-navigation/descendant.html
    790   - title: Notifying the User
    791     path: /training/notify-user/index.html
    792     path_attributes:
    793     - name: description
    794       value: How to display messages called notifications outside of your application's UI.
    795     section:
    796     - title: Building a Notification
    797       path: /training/notify-user/build-notification.html
    798     - title: Preserving Navigation when Starting an Activity
    799       path: /training/notify-user/navigation.html
    800     - title: Updating Notifications
    801       path: /training/notify-user/managing.html
    802     - title: Using Big View Styles
    803       path: /training/notify-user/expanded.html
    804     - title: Displaying Progress in a Notification
    805       path: /training/notify-user/display-progress.html
    806   - title: Supporting Swipe-to-Refresh
    807     path: /training/swipe/index.html
    808     path_attributes:
    809     - name: description
    810       value: How to modify your app's layout to support manual content updates triggered by the swipe-to-refresh gesture.
    811     section:
    812     - title: Adding Swipe-to-Refresh To Your App
    813       path: /training/swipe/add-swipe-interface.html
    814     - title: Responding to a Refresh Gesture
    815       path: /training/swipe/respond-refresh-request.html
    816   - title: Adding Search Functionality
    817     path: /training/search/index.html
    818     path_attributes:
    819     - name: description
    820       value: How to properly add a search interface to your app and create a searchable database.
    821     section:
    822     - title: Setting up the Search Interface
    823       path: /training/search/setup.html
    824     - title: Storing and Searching for Data
    825       path: /training/search/search.html
    826     - title: Remaining Backward Compatible
    827       path: /training/search/backward-compat.html
    828   - title: Making Your App Content Searchable by Google
    829     path: /training/app-indexing/index.html
    830     path_attributes:
    831     - name: description
    832       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.
    833     section:
    834     - title: Enabling Deep Links for App Content
    835       path: /training/app-indexing/deep-linking.html
    836     - title: Specifying App Content for Indexing
    837       path: /training/app-indexing/enabling-app-indexing.html
    838   - title: Optimizing Content for the Assistant
    839     path: /training/articles/assistant.html
    840     path_attributes:
    841     - name: description
    842       value: Support contextually relevant actions through the Assist API.
    843   - title: Handling App Links
    844     path: /training/app-links/index.html
    845     path_attributes:
    846     - name: description
    847       value: How to enable the system to handle web requests by taking the user directly to your app instead of your website.
    848 
    849 - title: Best Practices for User Interface
    850   path: /training/best-ui.html
    851   section:
    852   - title: Designing for Multiple Screens
    853     path: /training/multiscreen/index.html
    854     path_attributes:
    855     - name: es-lang
    856       value: Cmo disear aplicaciones para varias pantallas
    857     - name: ja-lang
    858       value: 
    859     - name: zh-cn-lang
    860       value: 
    861     - name: description
    862       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.
    863     section:
    864     - title: Supporting Different Screen Sizes
    865       path: /training/multiscreen/screensizes.html
    866       path_attributes:
    867       - name: es-lang
    868         value: Cmo admitir varios tamaos de pantalla
    869       - name: ja-lang
    870         value: 
    871       - name: ko-lang
    872         value:    
    873       - name: zh-cn-lang
    874         value: 
    875     - title: Supporting Different Screen Densities
    876       path: /training/multiscreen/screendensities.html
    877       path_attributes:
    878       - name: es-lang
    879         value: Cmo admitir varias densidades de pantalla
    880       - name: ja-lang
    881         value: 
    882       - name: zh-cn-lang
    883         value: 
    884     - title: Implementing Adaptive UI Flows
    885       path: /training/multiscreen/adaptui.html
    886       path_attributes:
    887       - name: es-lang
    888         value: Cmo implementar interfaces de usuario adaptables
    889       - name: ja-lang
    890         value:  UI 
    891       - name: zh-cn-lang
    892         value: 
    893   - title: Build a Responsive UI with ConstraintLayout
    894     path: /training/constraint-layout/index.html
    895     path_attributes:
    896     - name: description
    897       value: How to build a layout using ConstraintLayout and the Android Studio Layout Editor.
    898   - title: Adding the App Bar
    899     path: /training/appbar/index.html
    900     path_attributes:
    901     - name: description
    902       value: How to use the support library's toolbar widget to implement an app bar that displays properly on a wide range of devices.
    903     section:
    904     - title: Setting Up the App Bar
    905       path: /training/appbar/setting-up.html
    906     - title: Adding and Handling Actions
    907       path: /training/appbar/actions.html
    908     - title: Adding an Up Action
    909       path: /training/appbar/up-action.html
    910     - title: Action Views and Action Providers
    911       path: /training/appbar/action-views.html
    912   - title: Showing Pop-Up Messages
    913     path: /training/snackbar/index.html
    914     path_attributes:
    915     - name: description
    916       value: How to use the support library's Snackbar widget to display a brief pop-up message.
    917     section:
    918     - title: Building and Displaying a Pop-Up Message
    919       path: /training/snackbar/showing.html
    920     - title: Adding an Action to a Message
    921       path: /training/snackbar/action.html
    922   - title: Creating Custom Views
    923     path: /training/custom-views/index.html
    924     path_attributes:
    925     - name: description
    926       value: How to build custom UI widgets that are interactive and smooth.
    927     section:
    928     - title: Creating a Custom View Class
    929       path: /training/custom-views/create-view.html
    930     - title: Implementing Custom Drawing
    931       path: /training/custom-views/custom-drawing.html
    932     - title: Making the View Interactive
    933       path: /training/custom-views/making-interactive.html
    934     - title: Optimizing the View
    935       path: /training/custom-views/optimizing-view.html
    936   - title: Creating Backward-Compatible UIs
    937     path: /training/backward-compatible-ui/index.html
    938     path_attributes:
    939     - name: description
    940       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.
    941     section:
    942     - title: Abstracting the New APIs
    943       path: /training/backward-compatible-ui/abstracting.html
    944     - title: Proxying to the New APIs
    945       path: /training/backward-compatible-ui/new-implementation.html
    946     - title: Creating an Implementation with Older APIs
    947       path: /training/backward-compatible-ui/older-implementation.html
    948     - title: Using the Version-Aware Component
    949       path: /training/backward-compatible-ui/using-component.html
    950   - title: Implementing Accessibility
    951     path: /training/accessibility/index.html
    952     path_attributes:
    953     - name: description
    954       value: How to make your app accessible to users with vision impairment or other physical disabilities.
    955     section:
    956     - title: Developing Accessible Applications
    957       path: /training/accessibility/accessible-app.html
    958     - title: Developing Accessibility Services
    959       path: /training/accessibility/service.html
    960     - title: Accessibility Testing Checklist
    961       path: /training/accessibility/testing.html
    962   - title: Managing the System UI
    963     path: /training/system-ui/index.html
    964     path_attributes:
    965     - name: description
    966       value: How to hide and show status and navigation bars across different versions of Android, while managing the display of other screen components.
    967     section:
    968     - title: Dimming the System Bars
    969       path: /training/system-ui/dim.html
    970     - title: Hiding the Status Bar
    971       path: /training/system-ui/status.html
    972     - title: Hiding the Navigation Bar
    973       path: /training/system-ui/navigation.html
    974     - title: Using Immersive Full-Screen Mode
    975       path: /training/system-ui/immersive.html
    976     - title: Responding to UI Visibility Changes
    977       path: /training/system-ui/visibility.html
    978   - title: Creating Apps with Material Design
    979     path: /training/material/index.html
    980     path_attributes:
    981     - name: es-lang
    982       value: Crear aplicaciones con Material Design
    983     - name: in-lang
    984       value: Desain Bahan untuk Pengembang
    985     - name: ja-lang
    986       value:  
    987     - name: ko-lang
    988       value:    
    989     - name: pt-br-lang
    990       value: Material Design para desenvolvedores
    991     - name: ru-lang
    992       value:     Material Design
    993     - name: vi-lang
    994       value: Material Design cho Nh pht trin
    995     - name: zh-cn-lang
    996       value: 
    997     - name: zh-tw-lang
    998       value: 
    999     - name: description
   1000       value: How to implement material design on Android.
   1001     section:
   1002     - title: Getting Started
   1003       path: /training/material/get-started.html
   1004       path_attributes:
   1005       - name: es-lang
   1006         value: Comencemos
   1007       - name: in-lang
   1008         value: Memulai
   1009       - name: ja-lang
   1010         value:  
   1011       - name: ko-lang
   1012         value: 
   1013       - name: pt-br-lang
   1014         value: Como iniciar
   1015       - name: ru-lang
   1016         value:  
   1017       - name: vi-lang
   1018         value: Bt u
   1019       - name: zh-cn-lang
   1020         value: 
   1021       - name: zh-tw-lang
   1022         value: 
   1023     - title: Using the Material Theme
   1024       path: /training/material/theme.html
   1025       path_attributes:
   1026       - name: es-lang
   1027         value: Usar el tema Material
   1028       - name: in-lang
   1029         value: Menggunakan Tema Bahan
   1030       - name: ja-lang
   1031         value:  
   1032       - name: ko-lang
   1033         value:   
   1034       - name: pt-br-lang
   1035         value: Como usar o tema do Material
   1036       - name: ru-lang
   1037         value:   Material Design
   1038       - name: vi-lang
   1039         value: S dng Ch  Material
   1040       - name: zh-cn-lang
   1041         value: 
   1042       - name: zh-tw-lang
   1043         value: 
   1044     - title: Creating Lists and Cards
   1045       path: /training/material/lists-cards.html
   1046       path_attributes:
   1047       - name: es-lang
   1048         value: Crear listas y tarjetas
   1049       - name: in-lang
   1050         value: Membuat Daftar dan Kartu
   1051       - name: ja-lang
   1052         value: 
   1053       - name: ko-lang
   1054         value:    
   1055       - name: pt-br-lang
   1056         value: Como criar listas e cartes
   1057       - name: ru-lang
   1058         value:    
   1059       - name: vi-lang
   1060         value: To Danh sch v Th
   1061       - name: zh-cn-lang
   1062         value: 
   1063       - name: zh-tw-lang
   1064         value: 
   1065     - title: Defining Shadows and Clipping Views
   1066       path: /training/material/shadows-clipping.html
   1067       path_attributes:
   1068       - name: es-lang
   1069         value: Definir vistas de recorte y sombras
   1070       - name: in-lang
   1071         value: Mendefinisikan Bayangan dan Memangkas Tampilan
   1072       - name: ja-lang
   1073         value:  
   1074       - name: ko-lang
   1075         value:     
   1076       - name: pt-br-lang
   1077         value: Como definir sombras e recortar visualizaes
   1078       - name: ru-lang
   1079         value:     
   1080       - name: vi-lang
   1081         value: nh ngha  bng v Dng xem Ct hnh
   1082       - name: zh-cn-lang
   1083         value: 
   1084       - name: zh-tw-lang
   1085         value: 
   1086     - title: Working with Drawables
   1087       path: /training/material/drawables.html
   1088       path_attributes:
   1089       - name: es-lang
   1090         value: Trabajar con interfaces dibujables
   1091       - name: in-lang
   1092         value: Bekerja dengan Drawable
   1093       - name: ja-lang
   1094         value: 
   1095       - name: ko-lang
   1096         value: Drawable 
   1097       - name: pt-br-lang
   1098         value: Como trabalhar com desenhveis
   1099       - name: ru-lang
   1100         value:    
   1101       - name: vi-lang
   1102         value: Lm vic vi Ni dung v c
   1103       - name: zh-cn-lang
   1104         value:  Drawables
   1105       - name: zh-tw-lang
   1106         value: 
   1107     - title: Defining Custom Animations
   1108       path: /training/material/animations.html
   1109       path_attributes:
   1110       - name: es-lang
   1111         value: Definir animaciones personalizadas
   1112       - name: in-lang
   1113         value: Mendefinisikan Animasi Custom
   1114       - name: ja-lang
   1115         value:  
   1116       - name: ko-lang
   1117         value:   
   1118       - name: pt-br-lang
   1119         value: Como definir animaes personalizadas
   1120       - name: ru-lang
   1121         value:   
   1122       - name: vi-lang
   1123         value: nh ngha Hot hnh Ty chnh
   1124       - name: zh-cn-lang
   1125         value: 
   1126       - name: zh-tw-lang
   1127         value: 
   1128     - title: Maintaining Compatibility
   1129       path: /training/material/compatibility.html
   1130       path_attributes:
   1131       - name: es-lang
   1132         value: Mantener la compatibilidad
   1133       - name: in-lang
   1134         value: Mempertahankan Kompatibilitas
   1135       - name: ja-lang
   1136         value: 
   1137       - name: ko-lang
   1138         value:  
   1139       - name: pt-br-lang
   1140         value: Como manter a compatibilidade
   1141       - name: ru-lang
   1142         value:  
   1143       - name: vi-lang
   1144         value: Duy tr Tnh tng thch
   1145       - name: zh-cn-lang
   1146         value: 
   1147       - name: zh-tw-lang
   1148         value: 
   1149     - title: Selecting Colors with the Palette API
   1150       path: /training/material/palette-colors.html
   1151 
   1152 - title: Best Practices for User Input
   1153   path: /training/best-user-input.html
   1154   section:
   1155   - title: Using Touch Gestures
   1156     path: /training/gestures/index.html
   1157     path_attributes:
   1158     - name: description
   1159       value: How to write apps that allow users to interact with the touch screen via touch gestures.
   1160     section:
   1161     - title: Detecting Common Gestures
   1162       path: /training/gestures/detector.html
   1163     - title: Tracking Movement
   1164       path: /training/gestures/movement.html
   1165     - title: Animating a Scroll Gesture
   1166       path: /training/gestures/scroll.html
   1167     - title: Handling Multi-Touch Gestures
   1168       path: /training/gestures/multi.html
   1169     - title: Dragging and Scaling
   1170       path: /training/gestures/scale.html
   1171     - title: Managing Touch Events in a ViewGroup
   1172       path: /training/gestures/viewgroup.html
   1173   - title: Handling Keyboard Input
   1174     path: /training/keyboard-input/index.html
   1175     path_attributes:
   1176     - name: description
   1177       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.
   1178     section:
   1179     - title: Specifying the Input Method Type
   1180       path: /training/keyboard-input/style.html
   1181     - title: Handling Input Method Visibility
   1182       path: /training/keyboard-input/visibility.html
   1183     - title: Supporting Keyboard Navigation
   1184       path: /training/keyboard-input/navigation.html
   1185     - title: Handling Keyboard Actions
   1186       path: /training/keyboard-input/commands.html
   1187   - title: Supporting Game Controllers
   1188     path: /training/game-controllers/index.html
   1189     path_attributes:
   1190     - name: description
   1191       value: How to write apps that support game controllers.
   1192     section:
   1193     - title: Handling Controller Actions
   1194       path: /training/game-controllers/controller-input.html
   1195     - title: Supporting Controllers Across Android Versions
   1196       path: /training/game-controllers/compatibility.html
   1197     - title: Supporting Multiple Game Controllers
   1198       path: /training/game-controllers/multiple-controllers.html
   1199 
   1200 - title: Best Practices for Background Jobs
   1201   path: /training/best-background.html
   1202   section:
   1203   - title: Running in a Background Service
   1204     path: /training/run-background-service/index.html
   1205     path_attributes:
   1206     - name: description
   1207       value: How to improve UI performance and responsiveness by sending work to a Service running in the background
   1208     section:
   1209     - title: Creating a Background Service
   1210       path: /training/run-background-service/create-service.html
   1211     - title: Sending Work Requests to the Background Service
   1212       path: /training/run-background-service/send-request.html
   1213     - title: Reporting Work Status
   1214       path: /training/run-background-service/report-status.html
   1215   - title: Loading Data in the Background
   1216     path: /training/load-data-background/index.html
   1217     path_attributes:
   1218     - name: description
   1219       value: How to use CursorLoader to query data without affecting UI responsiveness.
   1220     section:
   1221     - title: Running a Query with a CursorLoader
   1222       path: /training/load-data-background/setup-loader.html
   1223     - title: Handling the Results
   1224       path: /training/load-data-background/handle-results.html
   1225   - title: Managing Device Awake State
   1226     path: /training/scheduling/index.html
   1227     path_attributes:
   1228     - name: description
   1229       value: How to use repeating alarms and wake locks to run background jobs.
   1230     section:
   1231     - title: Keeping the Device Awake
   1232       path: /training/scheduling/wakelock.html
   1233     - title: Scheduling Repeating Alarms
   1234       path: /training/scheduling/alarms.html
   1235 - title: Best Practices for Performance
   1236   path: /training/best-performance.html
   1237   section:
   1238   - title: Performance Tips
   1239     path: /training/articles/perf-tips.html
   1240     path_attributes:
   1241     - name: description
   1242       value: How to optimize your app's performance in various ways to improve its responsiveness and battery efficiency.
   1243   - title: Improving Layout Performance
   1244     path: /training/improving-layouts/index.html
   1245     path_attributes:
   1246     - name: description
   1247       value: How to identify problems in your app's layout performance and improve the UI responsiveness.
   1248     section:
   1249     - title: Optimizing Layout Hierarchies
   1250       path: /training/improving-layouts/optimizing-layout.html
   1251     - title: Re-using Layouts with <include/>
   1252       path: /training/improving-layouts/reusing-layouts.html
   1253     - title: Loading Views On Demand
   1254       path: /training/improving-layouts/loading-ondemand.html
   1255     - title: Making ListView Scrolling Smooth
   1256       path: /training/improving-layouts/smooth-scrolling.html
   1257   - title: Optimizing Battery Life
   1258     path: /training/monitoring-device-state/index.html
   1259     path_attributes:
   1260     - name: es-lang
   1261       value: Cmo optimizar la duracin de la batera
   1262     - name: ja-lang
   1263       value: 
   1264     - name: zh-cn-lang
   1265       value: 
   1266     - name: description
   1267       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.
   1268     section:
   1269     - title: Monitoring the Battery Level and Charging State
   1270       path: /training/monitoring-device-state/battery-monitoring.html
   1271       path_attributes:
   1272       - name: es-lang
   1273         value: Cmo controlar el nivel de batera y el estado de carga
   1274       - name: ja-lang
   1275         value: 
   1276       - name: zh-cn-lang
   1277         value: 
   1278     - title: Determining and Monitoring the Docking State and Type
   1279       path: /training/monitoring-device-state/docking-monitoring.html
   1280       path_attributes:
   1281       - name: es-lang
   1282         value: Cmo determinar y controlar el tipo de conector y el estado de la conexin
   1283       - name: ja-lang
   1284         value: 
   1285       - name: zh-cn-lang
   1286         value: 
   1287     - title: Determining and Monitoring the Connectivity Status
   1288       path: /training/monitoring-device-state/connectivity-monitoring.html
   1289       path_attributes:
   1290       - name: es-lang
   1291         value: Cmo determinar y controlar el estado de la conectividad
   1292       - name: ja-lang
   1293         value: 
   1294       - name: zh-cn-lang
   1295         value: 
   1296     - title: Manipulating Broadcast Receivers On Demand
   1297       path: /training/monitoring-device-state/manifest-receivers.html
   1298       path_attributes:
   1299       - name: es-lang
   1300         value: Cmo manipular los receptores de emisin bajo demanda
   1301       - name: ja-lang
   1302         value:  
   1303       - name: zh-cn-lang
   1304         value: 
   1305   - title: Sending Operations to Multiple Threads
   1306     path: /training/multiple-threads/index.html
   1307     path_attributes:
   1308     - name: description
   1309       value: How to improve the performance and scalability of long-running operations by dispatching work to multiple threads.
   1310     section:
   1311     - title: Specifying the Code to Run on a Thread
   1312       path: /training/multiple-threads/define-runnable.html
   1313     - title: Creating a Manager for Multiple Threads
   1314       path: /training/multiple-threads/create-threadpool.html
   1315     - title: Running Code on a Thread Pool Thread
   1316       path: /training/multiple-threads/run-code.html
   1317     - title: Communicating with the UI Thread
   1318       path: /training/multiple-threads/communicate-ui.html
   1319   - title: Keeping Your App Responsive
   1320     path: /training/articles/perf-anr.html
   1321     path_attributes:
   1322     - name: description
   1323       value: How to keep your app responsive to user interaction so the UI does not lock-up and display an "Application Not Responding" dialog.
   1324   - title: JNI Tips
   1325     path: /training/articles/perf-jni.html
   1326     path_attributes:
   1327     - name: description
   1328       value: How to efficiently use the Java Native Interface with the Android NDK.
   1329   - title: SMP Primer for Android
   1330     path: /training/articles/smp.html
   1331     path_attributes:
   1332     - name: description
   1333       value: Tips for coding Android apps on symmetric multiprocessor systems.
   1334 
   1335 - title: Best Practices for Security & Privacy
   1336   path: /training/best-security.html
   1337   section:
   1338   - title: Security Tips
   1339     path: /training/articles/security-tips.html
   1340     path_attributes:
   1341     - name: description
   1342       value: How to perform various tasks and keep your app's data and your user's data secure.
   1343   - title: Security with HTTPS and SSL
   1344     path: /training/articles/security-ssl.html
   1345     path_attributes:
   1346     - name: description
   1347       value: How to ensure that your app is secure when performing network transactions.
   1348   - title: Network Security Configuration
   1349     path: /training/articles/security-config.html
   1350     path_attributes:
   1351     - name: description
   1352       value: Customize the behavior of your app's secure network connections safely.
   1353   - title: Updating Your Security Provider to Protect Against SSL Exploits
   1354     path: /training/articles/security-gms-provider.html
   1355     path_attributes:
   1356     - name: description
   1357       value: How to use and update Google Play services security provider, to protect against SSL exploits.
   1358   - title: Checking Device Compatibility with SafetyNet
   1359     path: /training/safetynet/index.html
   1360     path_attributes:
   1361     - name: description
   1362       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.
   1363   - title: Checking URLs with the Safe Browsing API
   1364     path: /training/safebrowsing/index.html
   1365     path_attributes:
   1366     - name: description
   1367       value: How to use the SafetyNet service to determine if a URL is designated as a known threat.
   1368   - title: Verifying Hardware-backed Key Pairs with Key Attestation
   1369     path: /training/articles/security-key-attestation.html
   1370     path_attributes:
   1371     - name: description
   1372       value: How to retrieve and verify the properties of a device's hardware-backed key pair.
   1373   - title: Enhancing Security with Device Management Policies
   1374     path: /work/device-management-policy.html
   1375     path_attributes:
   1376     - name: description
   1377       value: How to create an application that enforces security policies on devices.
   1378   - title: Supporting Direct Boot
   1379     path: /training/articles/direct-boot.html
   1380     path_attributes:
   1381     - name: description
   1382       value: How use device encrypted storage during Direct Boot mode.
   1383   - title: Using Scoped Directory Access
   1384     path: /training/articles/scoped-directory-access.html
   1385     path_attributes:
   1386     - name: description
   1387       value: How to use scoped directory access to request access to external storage directories.
   1388 
   1389 - title: Best Practices for Permissions & Identifiers
   1390   path: /training/best-permissions-ids.html
   1391   section:
   1392   - title: Permissions and User Data
   1393     path: /training/articles/user-data-overview.html
   1394     path_attributes:
   1395     - name: description
   1396       value: Overview of app permissions on Android and how they affect your users.
   1397   - title: Best Practices for App Permissions
   1398     path: /training/articles/user-data-permissions.html
   1399     path_attributes:
   1400     - name: description
   1401       value: How to manage permissions the right way for users.
   1402   - title: Best Practices for Unique Identifiers
   1403     path: /training/articles/user-data-ids.html
   1404     path_attributes:
   1405     - name: description
   1406       value: Unique identifiers available and how to choose the right one for your use case.
   1407 
   1408 - title: Best Practices for Testing
   1409   path: /training/testing/index.html
   1410   section:
   1411   - title: Getting Started with Testing
   1412     path: /training/testing/start/index.html
   1413     path_attributes:
   1414     - name: description
   1415       value: How to get started with testing your Android applications.
   1416   - title: Building Effective Unit Tests
   1417     path: /training/testing/unit-testing/index.html
   1418     path_attributes:
   1419     - name: description
   1420       value: How to build effective unit tests for Android apps.
   1421     section:
   1422     - title: Building Local Unit Tests
   1423       path: /training/testing/unit-testing/local-unit-tests.html
   1424     - title: Building Instrumented Unit Tests
   1425       path: /training/testing/unit-testing/instrumented-unit-tests.html
   1426   - title: Automating UI Tests
   1427     path: /training/testing/ui-testing/index.html
   1428     path_attributes:
   1429     - name: description
   1430       value: How to automate your user interface tests for Android apps.
   1431     section:
   1432     - title: Testing UI for a Single App
   1433       path: /training/testing/ui-testing/espresso-testing.html
   1434     - title: Testing UI for Multiple Apps
   1435       path: /training/testing/ui-testing/uiautomator-testing.html
   1436   - title: Testing App Component Integrations
   1437     path: /training/testing/integration-testing/index.html
   1438     path_attributes:
   1439     - name: description
   1440       value: How to build effective integration tests for Android apps.
   1441     section:
   1442     - title: Testing Your Service
   1443       path: /training/testing/integration-testing/service-testing.html
   1444     - title: Testing Your Content Provider
   1445       path: /training/testing/integration-testing/content-provider-testing.html
   1446   - title: Testing Display Performance
   1447     path: /training/testing/performance.html
   1448     path_attributes:
   1449     - name: description
   1450       value: How to automate UI performance testing.
   1451 
   1452 - title: Using Google Play to Distribute & Monetize
   1453   path: /training/distribute.html
   1454   section:
   1455   - title: Selling In-app Products
   1456     path: /training/in-app-billing/index.html
   1457     path_attributes:
   1458     - name: description
   1459       value: How to sell in-app products from your application using In-app Billing.
   1460     section:
   1461     - title: Preparing Your App
   1462       path: /training/in-app-billing/preparing-iab-app.html
   1463     - title: Establishing Products for Sale
   1464       path: /training/in-app-billing/list-iab-products.html
   1465     - title: Purchasing Products
   1466       path: /training/in-app-billing/purchase-iab-products.html
   1467     - title: Testing Your App
   1468       path: /training/in-app-billing/test-iab-app.html
   1469   - title: Maintaining Multiple APKs
   1470     path: /training/multiple-apks/index.html
   1471     path_attributes:
   1472     - name: description
   1473       value: How to publish your app on Google Play with separate APKs that target different devices, while using a single app listing.
   1474     section:
   1475     - title: Creating Multiple APKs for Different API Levels
   1476       path: /training/multiple-apks/api.html
   1477     - title: Creating Multiple APKs for Different Screen Sizes
   1478       path: /training/multiple-apks/screensize.html
   1479     - title: Creating Multiple APKs for Different GL Textures
   1480       path: /training/multiple-apks/texture.html
   1481     - title: Creating Multiple APKs with 2+ Dimensions
   1482       path: /training/multiple-apks/multiple.html
   1483