• 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: 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: Cómo diseñar 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: Cómo admitir varios tamaños 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: Cómo 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: Cómo 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à phát triển
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: Bắt đầ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ử dụng 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 cartões
1057      - name: ru-lang
1058        value: Создание списков и подсказок
1059      - name: vi-lang
1060        value: Tạo Danh sách 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 visualizações
1078      - name: ru-lang
1079        value: Определение теней и обрезка представлений
1080      - name: vi-lang
1081        value: Định nghĩa Đổ bóng và Dạng xem Cắt hình
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 desenháveis
1099      - name: ru-lang
1100        value: Работа с элементами дизайна
1101      - name: vi-lang
1102        value: Làm việc với Nội 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 animações personalizadas
1120      - name: ru-lang
1121        value: Определение настраиваемой анимации
1122      - name: vi-lang
1123        value: Định nghĩa Hoạt hình Tùy chỉnh
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ì Tính tương thích
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: Cómo optimizar la duración de la batería
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: Cómo controlar el nivel de batería 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: Cómo determinar y controlar el tipo de conector y el estado de la conexión
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: Cómo 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: Cómo manipular los receptores de emisión 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