· 6 years ago · Feb 07, 2020, 06:10 PM
1
2Android Developers
3
4
5SIGN IN
6About the platform
7
8Android Developers
9Platform
10Overview
11Releases
12Technology
13Libraries
14Games
15Machine Learning
16Privacy
17Android Studio
18Google Play
19Jetpack
20Kotlin
21Docs
22News
23Versions
24Android 10
25Home
26Android 10 highlights
27Privacy and location
28Behavior changes for apps
29Features and APIs
30Get started with Android 10
31Pie
32Oreo
33Nougat
34Marshmallow
35Lollipop
36KitKat
37Dashboards
38Devices
39Wear OS
40Android TV
41Android for Cars
42Android Things
43Chrome OS devices
44Android Developers
45Platform
46Releases
47Android 10 features and APIs
48
49Contents
50
51Security enhancements
52Improved biometric authentication dialogs
53Run embedded DEX code directly from APK
54TLS 1.3 support
55
56Android 10 introduces great features and capabilities for users and developers. This document highlights what's available for developers.
57
58To learn about the APIs, read the API diff report or visit the Android API reference — look for APIs that were "added in API level 29". Also be sure to check out Android 10 behavior changes (for apps targeting API level 29 and for all apps), as well as privacy changes, to learn about areas where platform changes may affect your apps.
59
60Security enhancements
61
62Android 10 introduces a number of security features, which the following sections summarize.
63
64Improved biometric authentication dialogs
65
66Android 10 introduces the following improvements to biometric authentication support:
67
68A check for the biometric authentication capability.
69A fallback mechanism that allows a user to authenticate using their device PIN, pattern, or password if they cannot authenticate using their biometric input.
70A hint that tells the system not to require user confirmation after the user has authenticated using an implicit biometric modality. For example, you could tell the system that no further confirmation should be required after a user has authenticated using face authentication.
71Run embedded DEX code directly from APK
72
73As of Android 10, you can tell the platform to run embedded DEX code directly from your app’s APK file. This option can help prevent an attack if an attacker ever managed to tamper with the locally compiled code on the device.
74
75For more information, see Run embedded DEX code directly from APK.
76
77TLS 1.3 support
78
79Android 10 adds support for TLS 1.3. TLS 1.3 is a major revision to the TLS standard that includes performance benefits and enhanced security. Our benchmarks indicate that secure connections can be established as much as 40% faster with TLS 1.3 compared to TLS 1.2.
80
81For more details about our implementation of TLS 1.3, see the TLS section within the behavior changes for all apps page.
82
83Public Conscrypt API
84
85As of Android 10, the Conscrypt security provider includes a public API for TLS functionality.
86
87The collection of classes under android.net.ssl contain static methods to access functionality that isn't available from the generic javax.net.ssl APIs. The names for these classes can be inferred as the plural of the corresponding javax.net.ssl class. For example, code that operates on instances of javax.net.ssl.SSLSocket can instead use methods from SSLSockets.
88
89Caution: If you're still accessing TLS functionality using reflection, change to using the public API. This is because of planned further restrictions on non-SDK interfaces.
90Connectivity features
91
92Android 10 includes several improvements related to networking and connectivity.
93
94Wi-Fi network connection API
95
96Android 10 adds support for peer-to-peer connections. This feature enables your app to prompt the user to change the access point that the device is connected to by using WifiNetworkSpecifier to describe properties of a requested network. The peer-to-peer connection is used for non-network-providing purposes, such as bootstrapping configuration for secondary devices like Chromecast and Google Home hardware.
97
98For more information, see Wi-Fi Network Request API for peer-to-peer connectivity.
99
100Wi-Fi network suggestion API
101
102Android 10 adds support for your app to prompt the user to connect to a Wi-Fi access point. You can supply suggestions for which network to connect to. The platform will ultimately choose which access point to accept based on the input from your and other apps.
103
104For more information about this feature, see Wi-Fi suggest.
105
106Improvements to Wi-Fi high-performance and low-latency modes
107
108Android 10 allows you to provide a hint to the underlying modem to minimize latency.
109
110Android 10 extends the Wi-Fi lock API to effectively support high-performance mode and low-latency mode. Wi-Fi power save is disabled for high-performance and low-latency mode, and further latency optimization may be enabled in low-latency mode, depending on modem support.
111
112Low-latency mode is only enabled when the application acquiring the lock is running in the foreground and the screen is on. The low-latency mode is especially helpful for real-time mobile gaming applications.
113
114Specialized lookups in DNS resolver
115
116Android 10 adds native support for specialized DNS lookups using both cleartext lookups and DNS-over-TLS mode. Previously, the platform DNS resolver supported only A and AAAA records, which allow looking up only the IP addresses associated with a name, but did not support any other record types. The DnsResolver API provides generic, asynchronous resolution, enabling you to look up SRV, NAPTR, and other record types. Note that parsing the response is left to the app to perform.
117
118For NDK-based apps, see android_res_nsend.
119
120Wi-Fi Easy Connect
121
122Android 10 enables you to use Easy Connect to provision Wi-Fi credentials to a peer device, as a replacement of WPS which has been deprecated. Apps can integrate Easy Connect into their setup and provisioning flow by using the ACTION_PROCESS_WIFI_EASY_CONNECT_URI intent.
123
124For more information on this feature, see Wi-Fi Easy Connect.
125
126Wi-Fi Direct connection API
127
128The WifiP2pConfig and WifiP2pManager API classes have updates in Android 10 to support fast connection establishment capabilities to Wi-Fi Direct using predetermined information. This information is shared via a side channel, such as Bluetooth or NFC.
129
130The following code sample shows how to create a group using predetermined information:
131
132KOTLIN
133JAVA
134val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager
135val channel = manager.initialize(this, mainLooper, null)
136
137// prefer 5G band for this group
138val config = WifiP2pConfig.Builder()
139 .setNetworkName("networkName")
140 .setPassphrase("passphrase")
141 .enablePersistentMode(false)
142 .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ)
143 .build()
144
145// create a non-persistent group on 5GHz
146manager.createGroup(channel, config, null)
147To join a group using credentials, replace manager.createGroup() with the following:
148
149KOTLIN
150JAVA
151manager.connect(channel, config, null)
152Bluetooth LE Connection Oriented Channels (CoC)
153
154Android 10 enables your app to use BLE CoC connections to transfer larger data streams between two BLE devices. This interface abstracts Bluetooth and connectivity mechanics to simplify implementation.
155
156Telephony features
157
158Android 10 includes several improvements related to telephony.
159
160Call quality improvements
161
162Android 10 adds the ability to collect information about the quality of ongoing IP Multimedia Subsystem (IMS) calls, including quality to and from the network, on devices that support the feature.
163
164Call screening and caller ID
165
166Android 10 provides your app with a means to identify calls not in the user's address book as potential spam calls, and to have spam calls silently rejected on behalf of the user. Information about these blocked calls is logged as blocked calls in the call log to provide greater transparency to the user when they are missing calls. Use of this API eliminates the requirement to obtain READ_CALL_LOG permissions from the user to provide call screening and caller ID functionality.
167
168Call redirection service API
169
170Android 10 changes how call intents are handled. The NEW_OUTGOING_CALL broadcast is deprecated and is replaced with the CallRedirectionService API. The CallRedirectionService API provides interfaces for you to modify outgoing calls made by the Android platform. For example, third-party apps might cancel calls and reroute them over VoIP.
171
172Improvements in creating files on external storage
173
174In addition to introducing scoped storage, Android 10 adds the following capabilities related to external storage:
175
176You can use the IS_PENDING flag to give your app exclusive access to a media file as it's written to disk.
177If you're aware of a specific location where files should be stored, you can provide the system a hint for where to store the newly-written files.
178Each external storage device has a unique volume name.
179Media and graphics
180
181Android 10 introduces the following new media and graphics features and APIs:
182
183Sharing audio input
184
185Android 10 adds the ability for two apps to share the audio input simultaneously. For full information, see Sharing audio input.
186
187Audio playback capture
188
189Android 10 gives an app the ability to capture audio playback from other apps. For full information, see Playback capture.
190
191Seekbar in MediaStyle notifications
192
193Starting with Android 10, MediaStyle notifications display a seekbar. The seekbar shows the playback progress from PlaybackState.getPosition(), and in some cases the seekbar can be used to seek to a location in the playing program. The seekbar appearance and behavior is controlled by these rules:
194
195The seekbar appears if there is an active MediaSession and its duration (specified by MediaMetadata.METADATA_KEY_DURATION) is greater than zero. This means that the bar does not appear for indeterminate streams like livestreams and radio broadcasts.
196If the session implements ACTION_SEEK_TO the user can drag the seekbar to control the playback location.
197Native MIDI API
198
199The Android Native MIDI API (AMidi) gives application developers the ability to send and receive MIDI data with C/C++code, integrating more closely with their C/C++ audio/control logic and minimizing the need for JNI.
200
201For more information, see Android Native MIDI API.
202
203MediaCodecInfo improvements
204
205Android 10 adds methods to MediaCodecInfo that reveal more information about a codec.
206
207For more information, see Media codecs.
208
209Thermal API
210
211When devices get too warm, they may throttle the CPU and/or GPU, and this can affect apps and games in unexpected ways. Apps using complex graphics, heavy computation, or sustained network activity are more likely to hit issues, and those can vary across devices based on chipset and core frequencies, levels of integration, and also device packaging and form factor.
212
213In Android 10, apps and games can use a thermal API to monitor changes on the device and take action to maintain lower power usage to restore normal temperature. Apps register a listener in PowerManager, through which the system reports ongoing thermal status ranging from light and moderate to severe, critical, emergency, and shutdown.
214
215When the device reports thermal stress, apps and games can help by backing off ongoing activities to reduce power usage on various ways. For example, streaming apps could reduce resolution/bit rate or network traffic, a camera app could disable flash or intensive image enhancement, a game could reduce frame rate or polygon tesselation, a media app could reduce speaker volume, and a maps app could turn off GPS.
216
217The thermal API requires a new device HAL layer—it's currently supported on Pixel devices running Android 10 and we’re working with our device-maker partners to bring broad support to the ecosystem as quickly as possible.
218
219Camera and images
220
221Android 10 introduces the following new camera- and image-related features:
222
223Monochrome camera support
224
225Android 9 (API level 28) first introduced monochrome camera capability. Android 10 adds several enhancements to monochrome camera support:
226
227Y8 stream format support to improve memory efficiency.
228Support for monochrome raw DNG capture.
229Introduction of MONO and NIR CFA enumerations to distinguish between regular monochrome camera and near infrared cameras.
230You may use this feature to capture a native monochrome image. A logical multi-camera device may use a monochrome camera as a physical sub-camera to achieve better low-light image quality.
231
232Dynamic Depth Format
233
234Starting in Android 10, cameras can store the depth data for an image in a separate file, using a new schema called Dynamic Depth Format (DDF). Apps can request both the JPG image and its depth metadata, using that information to apply any blur they want in post-processing without modifying the original image data.
235
236To read the specification for this format, see Dynamic Depth Format.
237
238High Efficiency Image File format
239
240High Efficiency Image File (HEIF) format is a standard image and video format that introduces higher-quality encoding and smaller file size when compared to other file formats.
241
242For more information about the file format, see HEIC.
243
244Improvements in multi-camera
245
246Android 10 improves the fusing of multiple cameras into a single logical camera, a feature introduced in Android 9 (API level 28). The following were added to the Camera2 API:
247
248isSessionConfigurationSupported(SessionConfiguration sessionConfig)—enables you to query whether or not the passed session configuration can be used to create a camera capture session.
249LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID—enables you to determine the ID of the active physical camera backing a logical camera device. You can use the IDs returned to request logical streams and physical subcamera streams to achieve better power efficiency.
250Accessibility services API
251
252Android 10 introduces the following new accessibility service features and APIs:
253
254AccessibilityNodeInfo entry key flag
255
256As of Android 10, you can call isTextEntryKey() to determine whether a given AccessibilityNodeInfo represents a text entry key that's part of a keyboard or keypad.
257
258Accessibility dialog spoken feedback
259
260In case where users need to perform the accessibility shortcut to start an accessibility service, Android 10 allows the dialog to be accompanied by a text-to-speech prompt if the service requests it.
261
262Accessibility shortcut when gesture navigation enabled
263
264When the gesture navigation feature is enabled in Android 10, the accessibility button isn't visible or selectable. To access the accessibility services menu, users must perform one of the following gestures:
265
266Two-finger swipe up.
267Two-finger swipe up and hold.
268Accessibility shortcut for physical keyboards
269
270In Android 10, users can trigger the accessibility shortcut on a physical keyboard by pressing Control+Alt+Z.
271
272Soft keyboard controller enhancement
273
274In Android 10, accessibility services can request that the soft keyboard be displayed even when the device detects a hard keyboard attached. Users can override this behavior.
275
276User-defined accessibility timeouts
277
278Android 10 introduces the getRecommendedTimeoutMillis() API. This method provides support for user-defined timeouts for interactive and non-interactive UI elements. The return value is influenced by both user preferences and accessibility service APIs.
279
280Autofill improvements
281
282Android 10 contains the following improvements to the autofill service.
283
284Compatibility-related autofill requests
285
286You can use the FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST flag to determine whether an autofill request was generated via compatibility mode.
287
288Save username and password simultaneously
289
290You can support cases where an application uses multiple activities to display username, password, and other fields by using the SaveInfo.FLAG_DELAY_SAVE flag.
291
292User interaction with the Save UI
293
294You can show and hide a password field in a save dialog by setting an action listener on the dialog and changing the visibility of the corresponding password remote view.
295
296Support for updating datasets
297
298Autofill can update existing passwords. For example, if a user has already stored a password, and they save a new password, Autofill prompts the user to update the existing password instead of saving a new one.
299
300Field Classification improvements
301
302Android 10 contains the following improvements to the Field Classification API.
303
304UserData.Builder constructor
305
306The UserData.Builder constructor has changed to better align to the Builder pattern.
307
308Allow a Value to be mapped to multiple types of Category IDs
309
310When using UserData.Builder in Android 10, you can now map a value to multiple types of category IDs. In previous releases, an exception was thrown if a value was added more than once.
311
312Improved support for credit card numbers
313
314Field classification can now detect four-digit numbers as the last four digits of a credit card number.
315
316Support for app-specific field classification
317
318Android 10 adds FillResponse.setUserData(), which allows you to set app-specific user data for the duration of the session. This helps the autofill service detect types for fields with app-specific content.
319
320UI and system controls
321
322Android 10 provides the following user-interface improvements:
323
324Support JVMTI PopFrame caps
325
326Android 10 adds support for the can_pop_frames capability in the Android JVMTI implementation. When debugging, this feature allows you to re-run functions after pausing at a breakpoint and adjusting locals, globals, or implementation of a function. For more information, see Oracle's Pop Frame reference page.
327
328Surface control API
329
330Android 10 provides a SurfaceControl API for low-level access to the system-compositor (SurfaceFlinger). For most users, SurfaceView is the correct way to leverage the compositor. The SurfaceControl API can be useful in certain cases, for example:
331
332Synchronization of multiple surfaces
333Cross-process surface embedding
334Lower-level lifetime management
335The SurfaceControl API is available in both SDK and NDK bindings. The NDK implementation includes an API for manual exchange of buffers with the compositor. This provides an alternative for users who have run up against the limitations of BufferQueue.
336
337WebView hung renderer detection
338
339Android 10 introduces the WebViewRenderProcessClient abstract class, which apps can use to detect if a WebView has become unresponsive. To use this class:
340
341Define your own subclass and implement its onRenderProcessResponsive() and onRenderProcessUnresponsive() methods.
342Attach an instance of your WebViewRenderProcessClient to one or more WebView objects.
343If the WebView becomes unresponsive, the system calls the client's onRenderProcessUnresponsive() method, passing the WebView and WebViewRenderProcess. (If the WebView is single-process, the WebViewRenderProcess parameter is null.) Your app can take appropriate action, such as showing a dialog box to the user asking if they want to halt the rendering process.
344If the WebView remains unresponsive, the system calls onRenderProcessUnresponsive() periodically (no more than once every five seconds), but takes no other action. If the WebView becomes responsive again, the system calls onRenderProcessResponsive() just once.
345
346Settings panels
347
348Android 10 introduces Settings Panels, an API which allows apps to show settings to users in the context of their app. This prevents users from needing to go into Settings to change things like NFC or Mobile data in order to use the app.
349
350
351Figure 1. The user tries to open a web page while the device is not connected to the network. Chrome pops up the Internet Connectivity settings panel...
352
353Figure 2. The user can turn on Wi-Fi and select a network without leaving the Chrome app.
354For example, suppose a user opens a web browser while their device is in airplane mode. Prior to Android 10, the app could only display a generic message asking the user to open Settings to restore connectivity. With Android 10, the browser app can display an inline panel showing key connectivity settings such as airplane mode, Wi-Fi (including nearby networks), and mobile data. With this panel, users can restore connectivity without leaving the app.
355
356To display a settings panel, fire an intent with the one of the following Settings.Panel actions:
357
358KOTLIN
359JAVA
360val panelIntent = Intent(Settings.Panel.settings_panel_type)
361startActivityForResult(panelIntent)
362settings_panel_type can be one of:
363
364ACTION_INTERNET_CONNECTIVITY
365Shows settings related to internet connectivity, such as Airplane mode, Wi-Fi, and Mobile Data.
366ACTION_WIFI
367Shows Wi-Fi settings, but not the other connectivity settings. This is useful for apps that need a Wi-Fi connection to perform large uploads or downloads.
368ACTION_NFC
369Shows all settings related to near-field communication (NFC).
370ACTION_VOLUME
371Shows volume settings for all audio streams.
372We are planning to introduce an AndroidX wrapper for this functionality. When called on devices running Android 9 (API level 28) or lower, the wrapper will open the most-appropriate page in the Settings app.
373
374Sharing improvements
375
376Android 10 provides a number of improvements to sharing:
377
378Sharing Shortcuts API
379
380The Sharing Shortcuts API replaces the Direct Share APIs.
381
382Instead of retrieving results reactively on demand, the Sharing Shortcuts API lets apps publish direct share targets in advance. This is how the ShortcutManager works. Since the two APIs are similar, we have expanded the ShortcutInfo API to make using both features easier. With the Sharing Shortcuts API, you can directly assign categories or people to a share target. The share targets persist in the system until the same app updates them or the app is uninstalled.
383
384The older Direct Share mechanism still works, but apps that use it have a lower priority than apps using the Sharing Shortcuts API.
385
386ShortcutInfo.Builder adds and enhances methods to provide additional info about the share target.
387
388Direct share targets
389
390You can publish a dynamic shortcut as a Direct Share Target. See Publish direct share targets.
391
392ShortcutManagerCompat is a new AndroidX API that provides backwards compatibility with the old DirectShare API. This is the preferred way to publish share targets.
393
394Previewing text
395
396When an app shares text content, it can show an optional preview of the content in the Sharesheet UI.
397
398See Adding rich text previews
399
400Learn more
401
402For more information on how apps can share data, see Sending simple data to other apps and Receiving simple data from other apps
403
404Dark theme
405
406Android 10 offers a Dark theme that applies to both the Android system UI and apps running on the device. For full information, see Dark theme.
407
408Foreground service types
409
410Android 10 introduces the foregroundServiceType XML manifest attribute, which you include in the definition of several specific services. It's possible, though rarely appropriate, to assign multiple foreground service types to a particular service.
411
412The following table shows the different foreground service types and the services where it's appropriate to declare a specific type:
413
414Foreground service type Example use case for a service that should declare this type
415connectedDevice Monitor a wearable fitness tracker
416dataSync Download files from a network
417location Continue a user-initiated action
418mediaPlayback Play an audio book, podcast, or music
419mediaProjection Record a video of the device's display over a short period of time
420phoneCall Handle ongoing phone call
421Kotlin
422
423Android 10 includes the following updates for Kotlin development.
424
425Nullability annotations for libcore APIs
426
427Android 10 improves the coverage of nullability annotations in the SDK for libcore APIs. These annotations enable app developers who are using either Kotlin or Java nullability analysis in Android Studio to get nullness information when interacting with these APIs.
428
429Normally, nullability contract violations in Kotlin result in compilation errors. To ensure compatibility with your existing code, only the @RecentlyNullable and @RecentlyNonNull annotations are added. This means that nullability violations result in warnings instead of errors.
430
431In addition, any @RecentlyNullable or @RecentlyNonNull annotations that were added in Android 9 are changing to @Nullable and @NonNull, respectively. This means that, in Android 10 and higher, nullability violations lead to errors instead of warnings.
432
433For more information about annotation changes, see Android Pie SDK is now more Kotlin-friendly on the Android Developers Blog.
434
435NDK
436
437Android 10 includes the following NDK changes.
438
439Improved debugging of file descriptor ownership
440
441Android 10 adds fdsan, which helps you find and fix file descriptor ownership issues more easily.
442
443Bugs related to mishandling of file descriptor ownership, which tend to manifest as use-after-close and double-close, are analogous to the memory allocation use-after-free and double-free bugs, but tend to be much more difficult to diagnose and fix. fdsan attempts to detect and/or prevent file descriptor mismanagement by enforcing file descriptor ownership.
444
445For more information about crashes related to these issues, see Error detected by fdsan. For more information about fdsan, see the Googlesource page on fdsan.
446
447ELF TLS
448
449Applications built using the NDK with a minimum API level 29 can use ELF TLS instead of emutls. Dynamic and static linker support has been added to support this method of handling thread-local variables.
450
451For apps built for API level 28 and lower, improvements have been implemented for libgcc/compiler-rt to work around some emutls issues.
452
453For more information, see Android changes for NDK developers.
454
455Runtime
456
457Android 10 includes the following runtime change.
458
459Mallinfo-based garbage collection triggering
460
461When small platform Java objects reference huge objects in the C++ heap, the C++ objects can often be reclaimed only when the Java object is collected and, for example, finalized. In previous releases, the platform estimated the sizes of many C++ objects associated with Java objects. This estimation was not always accurate and occasionally resulted in greatly increased memory usage, as the platform failed to garbage collect when it should have.
462
463In Android 10, the garbage collector (GC) tracks the total size of the heap allocated by system malloc(), ensuring that large malloc() allocations are always included in GC-triggering calculations. Apps interleaving large numbers of C++ allocations with Java execution might see an increase in garbage collection frequency as a result. Other apps might see a small decrease.
464
465Testing and debugging
466
467Android 10 includes the following improvements for testing and debugging.
468
469Improvements for on-device system tracing
470
471As of Android 10, you can specify limits for the size and duration of a trace when you perform an on-device system trace. When you specify either value, the system performs a long trace, periodically copying the trace buffer to the destination file while the trace is recorded. The trace completes when the size or duration limits that you specified are reached.
472
473Use these additional parameters to test different use cases than you would test with a standard trace. For example, you might be diagnosing a performance bug that only occurs after your app has been running for a long period of time. In this case, you could record a long trace over an entire day, and then analyze the CPU scheduler, disk activity, app threads, and other data in the report to help you determine the cause of the bug.
474
475In Android 10 and higher, trace files are saved in a format that can be opened with Perfetto, an open-source project for performance instrumentation and tracing. You can convert Perfetto trace files to the Systrace format.
476
477TextClassifier improvements
478
479Android 10 provides additional text classification functionality in the TextClassifier interface.
480
481Language detection
482
483The detectLanguage() method works similarly to previously-existing classification methods. It receives a TextLanguage.Request object and returns a TextLanguage object.
484
485TextLanguage objects consist of a list of ordered pairs. Each pair contains a locale and a corresponding confidence score for the classification.
486
487Suggested conversation actions
488
489The suggestConversationActions() method works similarly to existing classification methods. It receives a ConversationActions.Request object and returns a ConversationActions object.
490
491ConversationActions objects consist of a list of ConversationAction objects. Each ConversationAction object includes a potential suggested action and its confidence score.
492
493Smart replies/actions in notifications
494
495Android 9 introduced the ability to display suggested replies within a notification. Android 10 expands on this with the ability to include suggested intent-based actions. Furthermore, the platform is able to generate these suggestions automatically. Apps can still provide their own suggestions, or opt out of system-generated suggestions.
496The API used to generate these replies is part of TextClassifier, and has also been directly exposed to developers in Android 10. Please read the section on TextClassifier improvements for more information.
497
498If your app provides its own suggestions, the platform doesn't generate any automatic suggestions. If you don't want your app's notifications to display any suggested replies or actions, you can opt out of system-generated replies and actions by using setAllowGeneratedReplies() and setAllowSystemGeneratedContextualActions().
499
500Content and code samples on this page are subject to the licenses described in the Content License. Java is a registered trademark of Oracle and/or its affiliates.
501
502Last updated 2019-12-27.
503
504Twitter Twitter
505YouTube YouTube
506More Android
507
508Android
509Enterprise
510Security
511Source
512Support
513
514Report platform bug
515Report documentation bug
516Google Play support
517Join research studies
518Documentation
519
520Developer guides
521Design guides
522API reference
523Samples
524Android Studio
525Google Developers
526Android
527Chrome
528Firebase
529Google Cloud Platform
530All products
531Privacy
532License
533Brand guidelines
534Get news and tips by email
535SUBSCRIBE
536LANGUAGE