• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1toc:
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 screens—essential 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 usuário 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: Cómo diseñar 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: Cómo admitir varios tamaños 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: Cómo 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: Cómo 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à phát triển
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: Bắt đầ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ử dụng 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 cartões
1060      - name: ru-lang
1061        value: Создание списков и подсказок
1062      - name: vi-lang
1063        value: Tạo Danh sách 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 visualizações
1081      - name: ru-lang
1082        value: Определение теней и обрезка представлений
1083      - name: vi-lang
1084        value: Định nghĩa Đổ bóng và Dạng xem Cắt hình
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 desenháveis
1102      - name: ru-lang
1103        value: Работа с элементами дизайна
1104      - name: vi-lang
1105        value: Làm việc với Nội 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 animações personalizadas
1123      - name: ru-lang
1124        value: Определение настраиваемой анимации
1125      - name: vi-lang
1126        value: Định nghĩa Hoạt hình Tùy chỉnh
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ì Tính tương thích
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: Cómo optimizar la duración de la batería
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: Cómo controlar el nivel de batería 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: Cómo determinar y controlar el tipo de conector y el estado de la conexión
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: Cómo 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: Cómo manipular los receptores de emisión 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