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