blob: 4a7b879dcc523bbb4dfc12a0e4eb54e072e204f7 [file] [log] [blame]
Dirk Doughertycf65e4842016-03-07 22:31:57 -08001page.title=Android N for Developers
Dirk Dougherty43eb9512016-03-03 14:53:16 -08002meta.tags="preview", "androidn"
3page.tags="preview", "developer preview"
Dirk Doughertya6495a922016-03-04 15:21:59 -08004page.image=images/cards/card-n-apis_2x.png
Dirk Dougherty5748bc42016-02-06 18:24:32 -08005@jd:body
6
Dirk Doughertycf65e4842016-03-07 22:31:57 -08007
8
9
10<div id="qv-wrapper">
11<div id="qv">
12 <h2>Key developer features</h2>
13 <ol>
14 <ul style="list-style-type:none;">
15 <li><a href="#multi-window_support">Multi-window support</a></li>
16 <li><a href="#notification_enhancements">Notifications</a></li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080017 <li><a href="#jit_aot">JIT/AOT compilation</a></li>
18 <li><a href="#quick_path_to_app_install">Quick path to app install</a></li>
19 <li><a href="#doze_on_the_go">Doze on the go</a></li>
20 <li><a href="#background_optimizations">Background optimizations</a></li>
Dirk Dougherty59428922016-03-10 18:54:49 -080021 <li><a href="#data_saver">Data Saver</a></li>
Andrew Solovay097b1152016-04-06 17:33:00 -070022 <li><a href="#vulkan">Vulkan API</a></li>
Dirk Dougherty59428922016-03-10 18:54:49 -080023 <li><a href="#tile_api">Quick Settings Tile API</a></li>
24 <li><a href="#number-blocking">Number-blocking</a></li>
25 <li><a href="#call_screening">Call screening</a></li>
26 <li><a href="#multi-locale_languages">Locales and languages</a></li>
27 <li><a href="#icu4">ICU4J APIs in Android</a></li>
28 <li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
29 <li><a href="#android_tv_recording">Android TV recording</a></li>
30 <li><a href="#android_for_work">Android for Work</a></li>
31 <li><a href="#accessibility_enhancements">Accessibility</a></li>
32 <li><a href="#direct_boot">Direct Boot</a></li>
33 <li><a href="#key_attestation">Key Attestation</a></li>
34 <li><a href="#network_security_config">Network Security Config</a></li>
35 <li><a href="#default_trusted_ca">Default Trusted CA</a></li>
Kevin Hufnaglea6a568d2016-04-11 14:11:45 -070036 <li><a href="#apk_signature_v2">APK signature scheme v2</a></li>
Dirk Dougherty59428922016-03-10 18:54:49 -080037 <li><a href="#scoped_directory_access">Scoped directory access</a></li>
Kevin Hufnagle93862ec2016-04-05 15:36:37 -070038 <li><a href="#launcher_shortcuts">Launcher shortcuts</a></li>
Andrew Solovay097b1152016-04-06 17:33:00 -070039 <li><a href="#print_svc">Print service enhancements</a></li>
Eric Schmidt186fada2016-04-27 11:48:22 -070040 <li><a href="#virtual_files">Virtual Files</a></li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080041 </ol>
42</div>
43</div>
44
45
46
47<p>Android N is still in active development, but you can try it
48now as part of the N Developer Preview. The sections below highlight some of
49the new features for developers. </p>
50
Andrew Solovay9b218572016-03-09 11:17:07 -080051<p>
52 Make sure to check out the <a href=
53 "{@docRoot}preview/behavior-changes.html">Behavior Changes</a> to learn about
54 areas where platform changes may affect your apps, take a look at the
55 developer guides to learn more about key features, and download the <a href=
56 "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a> for details on
57 new APIs.
58</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080059
60<h2 id="multi-window_support">Multi-window support</h2>
61
62
63<p>In Android N, we're introducing a new and much-requested multitasking feature
64into the platform &mdash; multi-window support. </p>
65
66 <p>Users can now pop open two apps on the screen at once. </p>
67 <ul>
68 <li>On phones and tablets
69running Android N, users can run two apps side-by-side or
70one-above-the-other in splitscreen mode. Users can resize the apps by dragging
71the divider between them. </li>
72
Andrew Solovay9b218572016-03-09 11:17:07 -080073<li>On Android TV devices, apps can put themselves in <a
74href="{@docRoot}preview/features/picture-in-picture.html">picture-in-picture
75mode</a>, allowing them to continue showing content while the user browses or
Daniel Yu0ab19aa2016-03-14 15:35:38 -070076interacts with other apps.</li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080077 </ul>
78
Dirk Doughertycf65e4842016-03-07 22:31:57 -080079<div class="col-4of10">
Dirk Dougherty59428922016-03-10 18:54:49 -080080<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px;padding-left:1em;"
Dirk Doughertycf65e4842016-03-07 22:31:57 -080081 id="img-split-screen" />
82<p class="img-caption">
Dirk Dougherty59428922016-03-10 18:54:49 -080083 <strong>Figure 1.</strong> Apps running in split-screen mode.
Dirk Dougherty5748bc42016-02-06 18:24:32 -080084</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080085 </div>
86
Dirk Doughertycf65e4842016-03-07 22:31:57 -080087<p>Especially on tablets and other larger-screen devices, multi-window support
88gives you new ways to engage users. You can even enable drag-and-drop in
89your app to let users conveniently drag content to or from your app &mdash; a great
90way to enhance your user experience. </p>
91
92<p>It's straightforward to add multi-window support to your app and configure how it
93handles multi-window display. For example, you can specify your activity's
94minimum allowable dimensions, preventing users from resizing the activity below
95that size. You can also disable multi-window display for your app, which
96 ensures that the system will only show your app in full-screen mode.</p>
97
Andrew Solovay9b218572016-03-09 11:17:07 -080098<p>
99 For more information, see the <a href=
100 "{@docRoot}preview/features/multi-window.html">Multi-Window Support</a>
101 developer documentation.
102</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800103
104<h2 id="notification_enhancements">Notification enhancements</h2>
105
106<p>In Android N we've redesigned notifications to make them easier and faster to
107use. Some of the changes include:</p>
108
109<ul>
Andrew Solovay9b218572016-03-09 11:17:07 -0800110 <li>
111 <strong>Template updates</strong>: We're updating notification templates to
112 put a new emphasis on hero image and avatar. Developers will be able to
113 take advantage of the new templates with minimal adjustments in their code.
114 </li>
115
116 <li>
117 <strong>Bundled notifications</strong>: The system can group messages
118 together, for example by message topic, and display the group. A user can
119 take actions, such as Dismiss or Archive, on them in place. If you’ve
120 implemented notifications for Android Wear, you’ll already be familiar with
Andrew Solovay069ac632016-03-11 11:23:27 -0800121 this model.
Andrew Solovay9b218572016-03-09 11:17:07 -0800122 </li>
123
124 <li>
125 <strong>Direct reply</strong>: For real-time communication apps, the
126 Android system supports inline replies so that users can quickly respond to
127 an SMS or text message directly within the notification interface.
128 </li>
129
130 <li>
131 <strong>Custom views</strong>: Two new APIs enable you to leverage system
132 decorations, such as notification headers and actions, when using custom
133 views in notifications.
134 </li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800135</ul>
136
137<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800138 <img src="{@docRoot}preview/images/notifications-1.png" alt=""
139 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800140</div>
Andrew Solovay9b218572016-03-09 11:17:07 -0800141
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800142<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800143 <img src="{@docRoot}preview/images/notifications-3.png" alt=""
144 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800145</div>
Andrew Solovay9b218572016-03-09 11:17:07 -0800146
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800147<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800148 <img src="{@docRoot}preview/images/notifications-2.png" alt=""
149 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800150</div>
151
152
153<p class="img-caption">
Adarsh Fernando37601562016-03-09 09:53:57 -0800154 <strong>Figure 2.</strong> Bundled notifications and direct reply.
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800155</p>
156
Andrew Solovay9b218572016-03-09 11:17:07 -0800157<p>To learn how to implement the new features, see the
158 <a href="{@docRoot}preview/features/notification-updates.html">Notifications</a>
159 guide.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800160
161
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800162
163<h2 id="jit_aot">Profile-guided JIT/AOT compilation</h2>
164
165<p>In Android N, we've added a Just in Time (JIT) compiler with code profiling to
166ART, which lets it constantly improve the performance of Android apps as they
167run. The JIT compiler complements ART's current Ahead of Time (AOT) compiler
168and helps improve runtime performance, save storage space, and speed up app
169updates and system updates.</p>
170
171<p>Profile-guided compilation lets ART manage the AOT/JIT compilation for each app
172according to its actual usage, as well as conditions on the device. For
173example, ART maintains a profile of each app's hot methods and can precompile
174and cache those methods for best performance. It leaves other parts of the app
175uncompiled until they are actually used.</p>
176
177<p>Besides improving performance for key parts of the app, profile-guided
178compilation helps reduce an app's overall RAM footprint, including associated
179binaries. This feature is especially important on low-memory devices.</p>
180
181<p>ART manages profile-guided compilation in a way that minimizes impact on the
182device battery. It does precompilation only when then the device is idle and
183charging, saving time and battery by doing that work in advance.</p>
184
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800185<h2 id="quick_path_to_app_install">Quick path to app install</h2>
186
187<p>One of the most tangible benefits of ART's JIT compiler is the speed of app
188installs and system updates. Even large apps that required several minutes to
189optimize and install in Android 6.0 can now install in just a matter of
190seconds. System updates are also faster, since there's no more optimizing step. </p>
191
192<h2 id="doze_on_the_go">Doze on the go...</h2>
193
194<p>Android 6.0 introduced Doze, a system mode that saves battery by deferring
195apps' CPU and network activities when the device is idle, such as when it's
196sitting on a table or in a drawer. </p>
197
198<p>Now in Android N, Doze takes a step further and saves battery while on the go.
199Any time the screen is off for a period of time and the device is unplugged,
200Doze applies a subset of the familiar CPU and network restrictions to apps.
201This means users can save battery even when carrying their devices in their
202pockets.</p>
203
204
Dirk Dougherty59428922016-03-10 18:54:49 -0800205<img src="/preview/images/doze-diagram-1.png"
206 alt="" id="figure1" />
207<p class="img-caption">
Andrew Solovay069ac632016-03-11 11:23:27 -0800208 <strong>Figure 3.</strong> Doze now applies
Dirk Dougherty59428922016-03-10 18:54:49 -0800209 restrictions to improve battery life even when the device is not stationary.
210</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800211
212
213<p>A short time after the screen turns off while the device is on battery, Doze
214restricts network access and defers jobs and syncs. During brief maintenance
215windows, applications are allowed network access and any of their deferred
216jobs/syncs are executed. Turning the screen on or plugging in the device brings
217the device out of Doze.</p>
218
219<p>When the device is stationary again, with screen off and on battery for a
220period of time, Doze applies the full CPU and network restrictions on {@link
221android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} alarms, and
222GPS/Wi-Fi scans.</p>
223
224<p>The best practices for adapting your app to Doze are the same whether the
225device is moving or not, so if you already updated your app to gracefully
226handle Doze, you're all set. If not, start <a
Andrew Solovay9b218572016-03-09 11:17:07 -0800227href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adapting
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800228your app to Doze</a> now.</p>
229
230<h2 id="background_optimizations">Project Svelte: Background optimizations</h2>
231
232<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
233across the range of Android devices in the ecosystem. In Android N, Project
234Svelte is focused on optimizing the way apps run in the background. </p>
235
236<p>Background processing is an essential part of most apps. When handled right, it
237can make your user experience amazing &mdash; immediate, fast, and context-aware.
238When not handled right, background processing can needlessly consume RAM (and
239battery) and affect system performance for other apps. </p>
240
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800241<p>Since Android 5.0, {@link android.app.job.JobScheduler} has been the
242preferred way of performing background work in a way that's good
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800243for users. Apps can schedule jobs while letting the system optimize based on
244memory, power, and connectivity conditions. JobScheduler offers control and
245simplicity, and we want all apps to use it. </p>
246
Andrew Solovay9b218572016-03-09 11:17:07 -0800247<p>
248 Another good option is <a href=
249 "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
250 <code>GCMNetworkManager</code></a>, part of Google Play Services, which
251 offers similar job scheduling with compatibility across legacy versions of
252 Android.
253</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800254
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800255<p>We're continuing to extend <code>JobScheduler</code> and
256<code>GCMNetworkManager</code> to meet more of
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800257your use cases &mdash; for example, in Android N you can now schedule background
258work based on changes in Content Providers. At the same time we're starting to
259deprecate some of the older patterns that can reduce system performance,
260especially on low-memory devices.</p>
261
262<p>In Android N we're removing three commonly-used implicit broadcasts &mdash;
Adarsh Fernando37601562016-03-09 09:53:57 -0800263 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
264 android.hardware.Camera#ACTION_NEW_PICTURE}, and {@link
265 android.hardware.Camera#ACTION_NEW_VIDEO} &mdash; since those can wake the
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800266background processes of multiple apps at once and strain memory and battery. If
267your app is receiving these, take advantage of the N Developer Preview to
268 migrate to <code>JobScheduler</code> and related APIs instead. </p>
269
Andrew Solovay9b218572016-03-09 11:17:07 -0800270<p>
271 Take a look at the <a href=
272 "{@docRoot}preview/features/background-optimization.html">Background
273 Optimizations</a> documentation for details.
274</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800275
Dirk Dougherty59428922016-03-10 18:54:49 -0800276
277<h2 id="data_saver">Data Saver</h2>
278
279<div class="col-5of12" style="margin-right:1.5em;">
280<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
281
282<p class="img-caption" style="padding-right:2em;">
283 <strong>Figure 4.</strong> Data Saver in Settings.
284</p>
285 </div>
286
287<p>Over the life of a mobile device, the cost of a cellular data plan typically
288exceeds the cost of the device itself. For many users, cellular data is an
289expensive resource that they want to conserve. </p>
290
291<p>Android N introduces Data Saver mode, a new system service that helps reduce
292cellular data use by apps, whether roaming, near the end of the billing cycle,
293or on a small prepaid data pack. Data Saver gives users control over how apps
294use cellular data and lets developers provide more efficient service when Data
295Saver is on. </p>
296
297<p>When a user enables Data Saver in <strong>Settings</strong> and the device is
298on a metered network, the system blocks background data usage and signals apps
299to use less data in the foreground wherever possible &mdash; such as by limiting
300bit rate for streaming, reducing image quality, deferring optimistic precaching,
301and so on. Users can whitelist specific apps to allow background metered data
302usage even when Data Saver is turned on.</p>
303
304<p>Android N extends the {@link android.net.ConnectivityManager} to provide apps a
305way to <a href="{@docRoot}preview/features/data-saver.html#status">retrieve the
306user's Data Saver preferences</a> and <a
307href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitor
308preference changes</a>. All apps should check whether the user has enabled Data
309Saver and make an effort to limit foreground and background data usage.</p>
310
311
Andrew Solovay097b1152016-04-06 17:33:00 -0700312<h2 id="vulkan">Vulkan API</h2>
313
314<p>
315 Android N integrates <a href="http://www.khronos.org/vulkan" class=
316 "external-link">Vulkan™</a>, a new 3D rendering API, into the platform. Like
317 <a href="https://www.khronos.org/opengles/" class="external-link">OpenGL™
318 ES</a>, Vulkan is an open standard for 3D graphics and rendering maintained
319 by the Khronos Group.
320</p>
321
322<p>
323 Vulkan is designed from the ground up to minimize CPU overhead in the driver,
324 and allow your application to control GPU operation more directly. Vulkan
325 also enables better parallelization by allowing multiple threads to perform
326 work such as command buffer construction at once.
327</p>
328
329<p>
330 Vulkan development tools and libraries are rolled into the Android NDK. They
331 include:
332</p>
333
334<ul>
335 <li>Headers
336 </li>
337
338 <li>Validation layers (debug libraries)
339 </li>
340
341 <li>SPIR-V shader compiler
342 </li>
343
344 <li>SPIR-V runtime shader compilation library
345 </li>
346</ul>
347
348<p>
349 Vulkan is only available to apps on devices with Vulkan-capable hardware,
Andrew Solovayf5266e52016-04-12 17:32:57 -0700350 such as Nexus 5X and Nexus 6P. We're working closely with our
Andrew Solovay097b1152016-04-06 17:33:00 -0700351 partners to bring Vulkan to more devices as soon as possible.
352</p>
353
354<p>
Andrew Solovayf5266e52016-04-12 17:32:57 -0700355 For more information, see the the <a href=
356 "{@docRoot}ndk/guides/graphics/index.html">API documentation</a>.
Andrew Solovay097b1152016-04-06 17:33:00 -0700357</p>
358
Dirk Dougherty59428922016-03-10 18:54:49 -0800359<h2 id="tile_api">Quick Settings Tile API</h2>
360
361
362<div style="float:right;max-width:320px">
363<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
364
365<p class="img-caption" style="padding-left:2em;">
366 <strong>Figure 5.</strong> Quick Settings tiles in the notification shade.
367</p>
368
369
370 </div><p>Quick Settings is a popular and simple way to expose key settings and actions,
371directly from the notification shade. In Android N, we've expanded the scope of
372Quick Settings to make it even more useful and convenient. </p>
373
374<p>We've added more room for additional Quick Settings tiles, which users can
375access across a paginated display area by swiping left or right. We've also
376given users control over what Quick Settings tiles appear and where they are
377displayed &mdash; users can add or move tiles just by dragging and dropping them. </p>
378
379<p>For developers, Android N also adds a new API that lets you define your own
380 Quick Settings tiles to give users easy access to key controls and actions in your app.</p>
381
382<p>
383 Quick Settings tiles are reserved for controls or actions that are either
384 urgently required or frequently used, and should not be used as shortcuts to
385 launching an app.
386</p>
387
388<p>
389 Once you’ve defined your tiles, you can surface them to users, who can add
390 them to Quick Settings just by drag and drop.
391</p>
392
393<p>
394 For information about creating an app tile, see the
395 <code>android.service.quicksettings.Tile</code> in the downloadable <a href=
396 "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
397</p>
398
399
400
401<h2 id="number-blocking">Number-blocking</h2>
402
403<p>Android N now supports number-blocking in the platform and provides a
404framework API to let service providers maintain a blocked-number list. The
Andrew Solovayef935042016-03-14 14:25:36 -0700405default SMS app, the default phone app, and carrier apps can read from and
Dirk Dougherty59428922016-03-10 18:54:49 -0800406write to the blocked-number list. The list is not accessible to other apps.</p>
407
408<p>By making number-blocking a standard feature of the platform, Android provides
409a consistent way for apps to support number-blocking across a wide range of
410devices. Among the other benefits that apps can take advantage of are:</p>
411
412<ul>
413 <li> Numbers blocked on calls are also blocked on texts
414 <li> Blocked numbers can persist across resets and devices through the Backup &amp;
415Restore feature
416 <li> Multiple apps can use the same blocked numbers list
417</ul>
418
419<p>Additionally, carrier app integration through Android means that carriers can
420read the blocked numbers list on the device and perform service-side blocking
421for the user in order to stop unwanted calls and texts from reaching the user
422through any medium, such as a VOIP endpoint or forwarding phones.</p>
423
424<p>
425 For more information, see <code>android.provider.BlockedNumberContract</code>
426 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
427 Reference</a>.
428</p>
429
430<h2 id="call_screening">Call screening</h2>
431
432<p>
433 Android N allows the default phone app to screen incoming calls. The phone
434 app does this by implementing the new <code>CallScreeningService</code>,
435 which allows the phone app to perform a number of actions based on an
436 incoming call's {@link android.telecom.Call.Details Call.Details}, such as:
437</p>
438
439<ul>
440 <li> Reject the incoming call
441 <li> Do not allow the call to the call log
442 <li> Do not show the user a notification for the call
443</ul>
444
445<p>
446 For more information, see <code>android.telecom.CallScreeningService</code>
447 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
448 Reference</a>.
449</p>
450
451
452<h2 id="multi-locale_languages">Multi-locale support, more languages</h2>
453
454
455<p>Android N now lets users select <strong>multiple locales</strong> in Settings,
456to better support bilingual use-cases. Apps can use
457a new API to get the user's selected locales and then offer more sophisticated
458user experiences for multi-locale users &mdash; such as showing search results in
459multiple languages and not offering to translate webpages in a language the
460user already knows.</p>
461
462<p>Along with multi-locale support, Android N also expands the range of languages
463available to users. It offers more than 25 variants each for commonly used
464languages such as English, Spanish, French, and Arabic. It also adds partial
465support for more than 100 new languages.</p>
466
467<p>Apps can get the list of locales set by the user by calling <code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android N is changing the way
468that it resolves resources. Make sure that you test and verify that your apps
469working as expected with the new resource resolution logic.</p>
470
471<p>To learn about the new resource-resolution behavior and the best practices you
472should follow, see <a href="{@docRoot}preview/features/multilingual-support.html"
473>Multilingual Support</a>.</p>
474
475<h2 id="icu4">ICU4J APIs in Android</h2>
476
477<p>
478 Android N now offers a subset of <a href=
479 "http://site.icu-project.org/">ICU4J</a> APIs in the Android framework under
480 the <code>android.icu</code> package. Migration is easy, and mostly entails
481 simply changing from the <code>com.java.icu</code> namespace to
482 <code>android.icu</code>. If you are already using an ICU4J bundle in your
483 apps, switching to the <code>android.icu</code> APIs provided in the Android
484 framework can produce substantial savings in APK size.
485</p>
486
487<p>
488 To learn more about the Android ICU4J APIs, see <a href=
489 "{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>.
490</p>
491
492
493
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800494<h2 id="gles_32">OpenGL&trade; ES 3.2 API</h2>
495
496<p>Android N adds framework interfaces and platform support for OpenGL ES 3.2, including:</p>
497
498<ul>
499 <li> All extensions from the <a class="external-link"
500href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
501 <li> Floating-point framebuffers for HDR and deferred shading.
502 <li> BaseVertex draw calls to enable better batching and streaming.
503 <li> Robust buffer access control to reduce WebGL overhead.
504</ul>
505
506<p>The framework API for OpenGL ES 3.2 on Android N is provided with the
507<code>GLES32</code> class. When using OpenGL ES 3.2, be sure to declare the
Andrew Solovay9b218572016-03-09 11:17:07 -0800508requirement in your manifest file, using the <code>&lt;uses-feature&gt;</code> tag and
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800509the <code>android:glEsVersion</code> attribute. </p>
510
511<p>For information about using OpenGL ES, including how to check a device's
512supported OpenGL ES version at runtime, see the <a
513href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
514
515
Dirk Dougherty59428922016-03-10 18:54:49 -0800516<h2 id="android_tv_recording">Android TV recording</h2>
517
518<p>Android N adds the ability to record and playback content from Android TV input
519services via new recording APIs. Building on top of existing time-shifting
520APIs, TV input services can control what channel data can be recorded, how
521recorded sessions are saved, and manage user interaction with recorded content. </p>
522
523<p>For more information, see <a
524href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
525
526
527<h2 id="android_for_work">Android for Work</h2>
528
529<p>Android for Work adds many new features and APIs for devices running Android N.
Kevin Hufnagleb6d17232016-03-22 11:29:03 -0700530Some highlights are below &mdash; for a complete list of changes, see
531<a href="{@docRoot}preview/features/afw.html">Android for Work Updates</a>.</p>
Dirk Dougherty59428922016-03-10 18:54:49 -0800532
533<h3 id="work_profile_security_challenge">Work profile security challenge </h3>
534
535<p>
Andrew Solovay097b1152016-04-06 17:33:00 -0700536 Profile owners targeting the N SDK
537 can specify a separate security challenge for apps running in
Dirk Dougherty59428922016-03-10 18:54:49 -0800538 the work profile. The work challenge is shown when a user attempts to open
539 any work apps. Successful completion of the security challenge unlocks the
540 work profile and decrypts it if necessary. For profile owners,
541 <code>ACTION_SET_NEW_PASSWORD</code> prompts the user to set a work
542 challenge, and <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> prompts
543 the user to set a device lock.
544</p>
545
546<p>
Andrew Solovay097b1152016-04-06 17:33:00 -0700547 Profile owners can set distinct passcode policies for the work challenge
Dirk Dougherty59428922016-03-10 18:54:49 -0800548 (such as how long the PIN needs to be, or whether a fingerprint can be used
549 to unlock the profile) using the <code>setPasswordQuality()</code>,
550 <code>setPasswordMinimumLength()</code> and related methods. The profile
551 owner can also set the device lock using the <code>DevicePolicyManager</code>
552 instance returned by the new <code>getParentProfileInstance()</code> method.
553 Additionally, profile owners can customize the credentials screen for the
554 work challenge using the new <code>setOrganizationColor()</code> and
555 <code>setOrganizationName()</code> methods.
556</p>
557<h3 id="turn_off_work">Turn off work </h3>
558
559<p>On a device with a work profile, users can toggle work mode. When work mode is
560off the managed user is temporarily shut down, which disables work profile
561apps, background sync, and notifications. This includes the profile owner
562application. When work mode is off, the system displays a persistent status
563icon to remind the user that they can't launch work apps. The launcher
564indicates that work apps and widgets are not accessible. </p>
565
566<h3 id="always_on_vpn">Always on VPN </h3>
567
568<p>Device owners and profile owners can ensure that work apps always connect
569through a specified VPN. The system automatically starts that VPN after the
570device boots.</p>
571
572<p>
573 New <code>DevicePolicyManager</code> methods are
574 <code>setAlwaysOnVpnPackage()</code> and
575 <code>getAlwaysOnVpnPackage()</code>.
576</p>
577
578<p>Because VPN services can be bound directly by the system without app
579interaction, VPN clients need to handle new entry points for Always on VPN. As
580before, services are indicated to the system by an intent filter matching
581action <code>android.net.VpnService</code>. </p>
582
583<p>
584 Users can also manually set Always on VPN clients that implement
585 <code>VPNService</code> methods in the primary user using
586 <strong>Settings&gt;More&gt;Vpn</strong>.
587</p>
588
Andrew Solovay097b1152016-04-06 17:33:00 -0700589<h3 id="custom_provisioning">Customized provisioning</h3>
590
591<p>
592 An application can customize the profile owner and device owner provisioning
593 flows with corporate colors and logos.
594 <code>DevicePolicyManager.EXTRA_PROVISIONING_MAIN_COLOR</code> customizes
595 flow color. <code>DevicePolicyManager.EXTRA_PROVISIONING_LOGO_URI</code>
596 customizes the flow with a corporate logo.
597</p>
598
Dirk Dougherty59428922016-03-10 18:54:49 -0800599<h2 id="accessibility_enhancements">Accessibility enhancements</h2>
600
601<p>Android N now offers Vision Settings directly on the Welcome screen for new
602device setup. This makes it much easier for users to discover and configure
603accessibility features on their devices, including magnification gesture, font
604size, display size, and TalkBack. </p>
605
606<p>With these accessibility features getting more prominent placement, your users
607are more likely to try your app with them enabled. Make sure you test your apps
608early with these settings enabled. You can enable them from Settings >
609Accessibility.</p>
610
611<p>Also in Android N, accessibility services can now help users with motor
612impairments to touch the screen. The new API allows building services with
613features such as face-tracking, eye-tracking, point scanning, and so on, to
614meet the needs of those users.</p>
615
616<p>For more information, see <code>android.accessibilityservice.GestureDescription</code>
617 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
618
619
620<h2 id="direct_boot">Direct boot</h2>
621
622<p>Direct boot improves device startup times and lets registered
623apps have limited functionality even after an unexpected reboot.
624For example, if an encrypted device reboots while the user is sleeping,
625registered alarms, messages and incoming calls can now continue notify
626the user as normal. This also means accessibility services can also be
627 available immediately after a restart.</p>
628
629<p>Direct boot takes advantage of file based encryption in Android N
630to enable fine grained encryption policies for both system and app data.
631The system uses a device-encrypted store for select system data and explicitly
632registered app data. By default a credential-encrypted store is used for all
633 other system data, user data, apps, and app data. </p>
634
635<p>At boot, the system starts in a restricted mode with access to
636device-encrypted data only, and without general access to apps or data.
637If you have components that you want to run in this mode, you can register
638them by setting a flag in the manifest. After restart, the system activates
639registered components by broadcasting the <code>LOCKED_BOOT_COMPLETED</code>
640intent. The system ensures registered device-encrypted app data is available
641before unlock. All other data is unavailable until the User confirms their lock
642 screen credentials to decrypt it. </p>
643
644For more information, see <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
645</p>
646
647
648<h2 id="key_attestation">Key Attestation</h2>
649
650<p>Hardware-backed keystores provide a much safer method to create, store,
651and use cryptographic keys on Android devices. They protect keys from the
652Linux kernel, potential Android vulnerabilities, and extraction
653from rooted devices.</p>
654
655<p>To make it easier and more secure to use hardware-backed keystores,
656Android N introduces Key Attestation. Apps and off-devices can use Key
657Attestation to strongly determine whether an RSA or EC key pair is
658hardware-backed, what the properties of the key pair are, and what
659 constraints are applied to its usage and validity. </p>
660
661<p>Apps and off-device services can request information about a key pair
662through an X.509 attestation certificate which must be signed by a valid
663attestation key. The attestation key is an ECDSA signing key which is
664injected into the device’s hardware-backed keystore at the factory.
665Therefore, an attestation certificate signed by a valid attestation
666key confirms the existence of a hardware-backed keystore, along with
667 details of key pairs in that keystore.</p>
668
669<p>To ensure that the device is using a secure, official Android factory
670image, Key Attestation requires that the device <a
671class="external-link"
672href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
673provide the following information to the <a class="external-link"
674href="https://source.android.com/security/trusty/index.html">Trusted
675Execution Environment (TEE)</a>:</p>
676
677<ul>
678<li>The OS version and patch level installed on the device</li>
679<li>The <a href="https://source.android.com/security/verifiedboot/index.html"
680class="external-link" >Verified Boot</a> public key and lock status</li>
681 </ul>
682
683<p>For more information about the hardware-backed keystore feature,
684see the guide for <a href="https://source.android.com/security/keystore/"
685class="external-link">Hardware-backed Keystore</a>.</p>
686
687<p>In addition to Key Attestation, Android N also introduces
688 fingerprint-bound keys that are not revoked on fingerprint enrollment.</p>
689
690<h2 id="network_security_config">Network Security Config</h2>
691
692<p>In Android N, apps can customize the behavior of their secure (HTTPS, TLS)
693connections safely, without any code modification, by using the declarative
694<em>Network Security Config</em> instead of using the conventional
695error-prone programmatic APIs (e.g. X509TrustManager).</p>
696
697 <p>Supported features:</p>
698<ul>
699<li><b>Custom trust anchors.</b> Lets an application customize which
700Certificate Authorities (CA) are trusted for its secure connections. For
701example, trusting particular self-signed certificates or a restricted set of public CAs.
702</li>
703<li><b>Debug-only overrides.</b> Lets an application developer safely debug
704secure connections of their application without added risk to the installed
705base.
706</li>
707<li><b>Cleartext traffic opt-out.</b> Lets an application protect itself from
708accidental usage of cleartext traffic.</li>
709<li><b>Certificate pinning.</b> An advanced feature that lets an application
710 limit which server keys are trusted for secure connections.</li>
711</ul>
712
713<p>For more information, see <a
714href="{@docRoot}preview/features/security-config.html">Network Security
715Config</a>.</p>
716
717<h2 id="default_trusted_ca">Default Trusted Certificate Authority</h2>
718
719<p>By default, apps that target Android N only trust system-provided certificates
720and no longer trust user-added Certificate Authorities (CA). Apps targeting Android
721N that wish to trust user-added CAs should use the
722<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> to
723specify how user CAs should be trusted.</p>
724
725<h2 id="apk_signature_v2">APK signature scheme v2</h2>
726
727<p>The PackageManager class now supports verifying apps using the APK
728signature scheme v2. The APK signature scheme v2 is a whole-file signature scheme
729that significantly improves verification speed and strengthens integrity
730 guarantees by detecting any unauthorized changes to APK files.</p>
731
732<p>To maintain backward-compatibility, an APK must be signed with the v1 signature
733scheme (JAR signature scheme) before being signed with the v2 signature scheme.
734With the v2 signature scheme, verification fails if you sign the APK with an
735 additional certificate after signing with the v2 scheme. </p>
736
737<p>APK signature scheme v2 support will be available later in the N Developer
738Preview.</p>
739
740<h2 id="scoped_directory_access">Scoped directory access</h2>
741
742<p>In Android N, apps can use new APIs to request access to specific <a
743href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
744storage</a> directories, including directories on removable media such as SD
745cards. The new APIs greatly simplify how your application accesses standard
746external storage directories, such as the <code>Pictures</code> directory. Apps
747like photo apps can use these APIs instead of using
748<code>READ_EXTERNAL_STORAGE</code>, which grants access to all storage
749directories, or the Storage Access Framework, which makes the user navigate to
750the directory.</p>
751
752<p>Additionally, the new APIs simplify the steps a user takes to grant external
753storage access to your app. When you use the new APIs, the system uses a simple
754permissions UI that clearly details what directory the application is
755requesting access to.</p>
756
757<p>For more information, see the
758<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
759Directory Access</a> developer documentation.</p>
760
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700761<h2 id="launcher_shortcuts">
762 Launcher shortcuts
763</h2>
Dirk Dougherty59428922016-03-10 18:54:49 -0800764
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700765<p>
766 Android N allows apps to define action-specific shortcuts which can be
767 displayed in the launcher. These <em>launcher shortcuts</em> let your users
768 quickly start common or recommended tasks within your app. Each shortcut
769 contains an <a href=
770 "{@docRoot}guide/components/intents-filters.html">intent</a>, which links the
771 shortcut to a specific action in your app. Examples of these actions include:
772</p>
Dirk Dougherty59428922016-03-10 18:54:49 -0800773
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700774<ul>
775 <li>Navigating users to a particular location in a mapping app.
776 </li>
Dirk Dougherty59428922016-03-10 18:54:49 -0800777
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700778 <li>Sending messages to a friend in a communication app.
779 </li>
Dirk Dougherty59428922016-03-10 18:54:49 -0800780
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700781 <li>Playing the next episode of a TV show in a media app.
782 </li>
Dirk Dougherty59428922016-03-10 18:54:49 -0800783
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700784 <li>Loading the last save point in a gaming app.
785 </li>
786</ul>
787
788<p>
789 Your app can create up to five <em>dynamic shortcuts</em>. When users perform
790 a gesture over your app's launcher icon, these shortcuts appear. By dragging
791 the shortcuts onto the launcher, users can make persistent copies of the
792 shortcuts, called <em>pinned shortcuts</em>. Users can create an unlimited
793 number of pinned shortcuts for each app.
794</p>
795
796<p class="note">
797 <strong>Note:</strong> Although other apps can't access your shortcut data,
798 the launcher <strong>does</strong> have access to this data. Therefore, the
799 shortcuts you create should conceal sensitive user information.
800</p>
801
802<p>
803 You can use this command to view your app's shortcuts:
804</p>
805
806<pre class="no-pretty-print">
807$ adb shell dumpsys shortcut
808</pre>
Andrew Solovay097b1152016-04-06 17:33:00 -0700809
Kevin Hufnagle93862ec2016-04-05 15:36:37 -0700810<p>
811 To update all shortcuts and to delete dynamic shortcuts, use the appropriate
812 methods that the Launcher Shortcut API provides. For more details about this
813 API, see <code>android.content.pm.ShortcutManager</code> in the downloadable
814 <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
815</p>
Andrew Solovay097b1152016-04-06 17:33:00 -0700816
817<h2 id="print_svc">Print Service Enhancements</h2>
818
819<p>
820 In Android N, print service developers can now surface additional information
821 about individual printers and print jobs.
822</p>
823
824<p>
825 When listing individual printers, a print service can now set per-printer
826 icons in two ways:
827</p>
828
829<ul>
830 <li>You can set an icon from a resource ID by calling
831 <code>PrinterInfo.Builder.setResourceIconId()</code>
832 </li>
833
834 <li>You can show an icon from the network by calling
835 <code>PrinterInfo.Builder.setHasCustomPrinterIcon()</code>, and setting a
836 callback for when the icon is requested using
837 <code>android.printservice.PrinterDiscoverySession.onRequestCustomPrinterIcon()</code>
838 </li>
839</ul>
840
841<p>
842 In addition, you can provide a per-printer activity to display additional
843 information by calling <code>PrinterInfo.Builder.setInfoIntent()</code>.
844</p>
845
846<p>
847 You can indicate the progress and status of print jobs in the print job
848 notification by calling
849 <code>android.printservice.PrintJob.setProgress()</code> and
850 <code>android.printservice.PrintJob.setStatus()</code>, respectively.
851</p>
852
853<p>
854 For more information about these methods, see the downloadable <a href=
855 "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
856</p>
Eric Schmidt186fada2016-04-27 11:48:22 -0700857
858<h2 id="virtual_files">Virtual Files</h2>
859
860<p>
861 In previous versions of Android, your app could use the Storage Access
862 Framework to allow users to select files from their cloud storage accounts,
863 such as Google Drive. However, there was no way to represent files that did
864 not have a direct bytecode representation; every file was required to provide
865 an input stream.
866</p>
867
868<p>
869 Android N adds the concept of <em>virtual files</em> to the Storage Access
870 Framework. The virtual files feature allows your
871 {@link android.provider.DocumentsProvider} to return document URIs that can be
872 used with an {@link android.content.Intent#ACTION_VIEW} intent even if they
873 don't have a direct bytecode representation. Android N also allows you to
874 provide alternate formats for user files, virtual or otherwise.
875</p>
876
877<p>
878 To get a URI for a virtual document in your app, first you create an
879 {@link android.content.Intent} to open the file picker UI. Since an app
880 cannot directly open a virtual file by using the
881 {@link android.content.ContentResolver#openInputStream(Uri) openInputStream()}
882 method, your app does not receive any virtual files if you include the
883 {@link android.content.Intent#CATEGORY_OPENABLE} category.
884</p>
885
886<p>
887 After the user has made a selection, the system calls the
888 {@link android.app.Activity#onActivityResult onActivityResult()} method.
889 Your app can retrieve the URI of the virtual file and get an input stream, as
890 demonstrated in the code snippet below.
891</p>
892
893<pre>
894 // Other Activity code ...
895
896 final static private int REQUEST_CODE = 64;
897
898 // We listen to the OnActivityResult event to respond to the user's selection.
899 &#64;Override
900 public void onActivityResult(int requestCode, int resultCode,
901 Intent resultData) {
902 try {
903 if (requestCode == REQUEST_CODE &amp;&amp;
904 resultCode == Activity.RESULT_OK) {
905
906 Uri uri = null;
907
908 if (resultData != null) {
909 uri = resultData.getData();
910
911 ContentResolver resolver = getContentResolver();
912
913 // Before attempting to coerce a file into a MIME type,
914 // check to see what alternative MIME types are available to
915 // coerce this file into.
916 String[] streamTypes =
917 resolver.getStreamTypes(uri, "*/*");
918
919 AssetFileDescriptor descriptor =
920 resolver.openTypedAssetFileDescriptor(
921 uri,
922 streamTypes[0],
923 null);
924
925 // Retrieve a stream to the virtual file.
926 InputStream inputStream = descriptor.createInputStream();
927 }
928 }
929 } catch (Exception ex) {
930 Log.e("EXCEPTION", "ERROR: ", ex);
931 }
932 }
933</pre>
934
935<p>
936 For more information about accessing user files, see the
937 <a href="{@docRoot}guide/topics/providers/document-provider.html">Storage
938 Access Frameworks guide</a>.
939</p>