blob: 172e269e9c3b1aeb80243a2a9575f3441b483ba2 [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>
17 <li><a href="#tile_api">Quick Settings Tile API</a></li>
18 <li><a href="#data_saver">Data Saver</a></li>
19 <li><a href="#multi-locale_languages">Locales and languages</a></li>
20 <li><a href="#icu4">ICU4J APIs in Android</a></li>
21 <li><a href="#android_tv_recording">Android TV recording</a></li>
22 <li><a href="#number-blocking">Number-blocking</a></li>
23 <li><a href="#call_screening">Call screening</a></li>
24 <li><a href="#direct_boot">Direct Boot</a></li>
25 <li><a href="#key_attestation">Key Attestation</a></li>
26 <li><a href="#network_security_config">Network Security Config</a></li>
27 <li><a href="#default_trusted_ca">Default Trusted CA</a></li>
28 <li><a href="#scoped_directory_access">Scoped directory access</a></li>
29 <li><a href="#android_for_work">Android for Work</a></li>
30 <li><a href="#jit_aot">JIT/AOT compilation</a></li>
31 <li><a href="#quick_path_to_app_install">Quick path to app install</a></li>
32 <li><a href="#doze_on_the_go">Doze on the go</a></li>
33 <li><a href="#background_optimizations">Background optimizations</a></li>
34 <li><a href="#gles_32">OpenGLTM ES 3.2 API</a></li>
35 </ol>
36</div>
37</div>
38
39
40
41<p>Android N is still in active development, but you can try it
42now as part of the N Developer Preview. The sections below highlight some of
43the new features for developers. </p>
44
Andrew Solovay9b218572016-03-09 11:17:07 -080045<p>
46 Make sure to check out the <a href=
47 "{@docRoot}preview/behavior-changes.html">Behavior Changes</a> to learn about
48 areas where platform changes may affect your apps, take a look at the
49 developer guides to learn more about key features, and download the <a href=
50 "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a> for details on
51 new APIs.
52</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080053
54<h2 id="multi-window_support">Multi-window support</h2>
55
56
57<p>In Android N, we're introducing a new and much-requested multitasking feature
58into the platform &mdash; multi-window support. </p>
59
60 <p>Users can now pop open two apps on the screen at once. </p>
61 <ul>
62 <li>On phones and tablets
63running Android N, users can run two apps side-by-side or
64one-above-the-other in splitscreen mode. Users can resize the apps by dragging
65the divider between them. </li>
66
Andrew Solovay9b218572016-03-09 11:17:07 -080067<li>On Android TV devices, apps can put themselves in <a
68href="{@docRoot}preview/features/picture-in-picture.html">picture-in-picture
69mode</a>, allowing them to continue showing content while the user browses or
70interacts with other apps. See below for more information. </li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080071 </ul>
72
73
74
75<div class="col-4of10">
76<img src="{@docRoot}preview/images/mw-portrait.png" alt="" style="height:460px"
77 id="img-split-screen" />
78<p class="img-caption">
79 <strong>Figure 1.</strong> Two apps running in split-screen mode.
Dirk Dougherty5748bc42016-02-06 18:24:32 -080080</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -080081 </div>
82
83
84<p>Especially on tablets and other larger-screen devices, multi-window support
85gives you new ways to engage users. You can even enable drag-and-drop in
86your app to let users conveniently drag content to or from your app &mdash; a great
87way to enhance your user experience. </p>
88
89<p>It's straightforward to add multi-window support to your app and configure how it
90handles multi-window display. For example, you can specify your activity's
91minimum allowable dimensions, preventing users from resizing the activity below
92that size. You can also disable multi-window display for your app, which
93 ensures that the system will only show your app in full-screen mode.</p>
94
Andrew Solovay9b218572016-03-09 11:17:07 -080095<p>
96 For more information, see the <a href=
97 "{@docRoot}preview/features/multi-window.html">Multi-Window Support</a>
98 developer documentation.
99</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800100
101<h2 id="notification_enhancements">Notification enhancements</h2>
102
103<p>In Android N we've redesigned notifications to make them easier and faster to
104use. Some of the changes include:</p>
105
106<ul>
Andrew Solovay9b218572016-03-09 11:17:07 -0800107 <li>
108 <strong>Template updates</strong>: We're updating notification templates to
109 put a new emphasis on hero image and avatar. Developers will be able to
110 take advantage of the new templates with minimal adjustments in their code.
111 </li>
112
113 <li>
114 <strong>Bundled notifications</strong>: The system can group messages
115 together, for example by message topic, and display the group. A user can
116 take actions, such as Dismiss or Archive, on them in place. If you’ve
117 implemented notifications for Android Wear, you’ll already be familiar with
118 this model. with this model.
119 </li>
120
121 <li>
122 <strong>Direct reply</strong>: For real-time communication apps, the
123 Android system supports inline replies so that users can quickly respond to
124 an SMS or text message directly within the notification interface.
125 </li>
126
127 <li>
128 <strong>Custom views</strong>: Two new APIs enable you to leverage system
129 decorations, such as notification headers and actions, when using custom
130 views in notifications.
131 </li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800132</ul>
133
134<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800135 <img src="{@docRoot}preview/images/notifications-1.png" alt=""
136 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800137</div>
Andrew Solovay9b218572016-03-09 11:17:07 -0800138
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800139<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800140 <img src="{@docRoot}preview/images/notifications-3.png" alt=""
141 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800142</div>
Andrew Solovay9b218572016-03-09 11:17:07 -0800143
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800144<div class="col-4of12">
Andrew Solovay9b218572016-03-09 11:17:07 -0800145 <img src="{@docRoot}preview/images/notifications-2.png" alt=""
146 style="padding:.5em;max-width:226px">
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800147</div>
148
149
150<p class="img-caption">
Adarsh Fernando37601562016-03-09 09:53:57 -0800151 <strong>Figure 2.</strong> Bundled notifications and direct reply.
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800152</p>
153
Andrew Solovay9b218572016-03-09 11:17:07 -0800154<p>To learn how to implement the new features, see the
155 <a href="{@docRoot}preview/features/notification-updates.html">Notifications</a>
156 guide.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800157
158
159<h2 id="tile_api">Quick Settings Tile API</h2>
160
161
162<div style="float:right;max-width:320px">
163<img src="{@docRoot}preview/images/quicksettings.png" style="padding-left:1.5em;">
164
165<p class="img-caption" style="padding-left:2em;">
Adarsh Fernando37601562016-03-09 09:53:57 -0800166 <strong>Figure 3.</strong> Quick Settings tiles in the notification shade.
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800167</p>
168
169
170 </div><p>Quick Settings is a popular and simple way to expose key settings and actions,
171directly from the notification shade. In Android N, we've expanded the scope of
172Quick Settings to make it even more useful and convenient. </p>
173
174<p>We've added more room for additional Quick Settings tiles, which users can
175access across a paginated display area by swiping left or right. We've also
176given users control over what Quick Settings tiles appear and where they are
177displayed &mdash; users can add or move tiles just by dragging and dropping them. </p>
178
179<p>For developers, Android N also adds a new API that lets you define your own
180 Quick Settings tiles to give users easy access to key controls and actions in your app.</p>
181
Andrew Solovay9b218572016-03-09 11:17:07 -0800182<p>
183 Quick Settings tiles are reserved for controls or actions that are either
184 urgently required or frequently used, and should not be used as shortcuts to
185 launching an app.
186</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800187
Andrew Solovay9b218572016-03-09 11:17:07 -0800188<p>
189 Once you’ve defined your tiles, you can surface them to users, who can add
190 them to Quick Settings just by drag and drop.
191</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800192
Andrew Solovay9b218572016-03-09 11:17:07 -0800193<p>
194 For information about creating an app tile, see the
195 <code>android.service.quicksettings.Tile</code> in the downloadable <a href=
196 "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
197</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800198
199<h2 id="data_saver">Data Saver</h2>
200
201<div class="col-5of12" style="margin-right:1.5em;">
202<img src="{@docRoot}preview/images/datasaver.png" style="border:2px solid #ddd">
203
204<p class="img-caption" style="padding-right:2em;">
Adarsh Fernando37601562016-03-09 09:53:57 -0800205 <strong>Figure 4.</strong> Data Saver in Settings.
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800206</p>
207 </div>
208
209<p>Over the life of a mobile device, the cost of a cellular data plan typically
210exceeds the cost of the device itself. For many users, cellular data is an
211expensive resource that they want to conserve. </p>
212
213<p>Android N introduces Data Saver mode, a new system service that helps reduce
214cellular data use by apps, whether roaming, near the end of the billing cycle,
215or on a small prepaid data pack. Data Saver gives users control over how apps
216use cellular data and lets developers provide more efficient service when Data
217Saver is on. </p>
218
219<p>When a user enables Data Saver in <strong>Settings</strong> and the device is
220on a metered network, the system blocks background data usage and signals apps
221to use less data in the foreground wherever possible &mdash; such as by limiting
222bit rate for streaming, reducing image quality, deferring optimistic precaching,
223and so on. Users can whitelist specific apps to allow background metered data
224usage even when Data Saver is turned on.</p>
225
226<p>Android N extends the {@link android.net.ConnectivityManager} to provide apps a
227way to <a href="{@docRoot}preview/features/data-saver.html#status">retrieve the
228user's Data Saver preferences</a> and <a
229href="{@docRoot}preview/features/data-saver.html#monitor-changes">monitor
230preference changes</a>. All apps should check whether the user has enabled Data
231Saver and make an effort to limit foreground and background data usage.</p>
232
233<h2 id="multi-locale_languages">Multi-locale support, more languages</h2>
234
235
236<p>Android N now lets users select <strong>multiple locales</strong> in Settings,
237to better support bilingual use-cases. Apps can use
238a new API to get the user's selected locales and then offer more sophisticated
239user experiences for multi-locale users &mdash; such as showing search results in
240multiple languages and not offering to translate webpages in a language the
241user already knows.</p>
242
243<p>Along with multi-locale support, Android N also expands the range of languages
244available to users. It offers more than 25 variants each for commonly used
245languages such as English, Spanish, French, and Arabic. It also adds partial
246support for more than 100 new languages.</p>
247
248<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
249that it resolves resources. Make sure that you test and verify that your apps
250working as expected with the new resource resolution logic.</p>
251
252<p>To learn about the new resource-resolution behavior and the best practices you
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800253should follow, see <a href="{@docRoot}preview/features/multilingual-support.html"
254>Multilingual Support</a>.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800255
256<h2 id="icu4">ICU4J APIs in Android</h2>
257
Andrew Solovay9b218572016-03-09 11:17:07 -0800258<p>
259 Android N now offers a subset of <a href=
260 "http://site.icu-project.org/">ICU4J</a> APIs in the Android framework under
261 the <code>android.icu</code> package. Migration is easy, and mostly entails
262 simply changing from the <code>com.java.icu</code> namespace to
263 <code>android.icu</code>. If you are already using an ICU4J bundle in your
264 apps, switching to the <code>android.icu</code> APIs provided in the Android
265 framework can produce substantial savings in APK size.
266</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800267
Andrew Solovay9b218572016-03-09 11:17:07 -0800268<p>
269 To learn more about the Android ICU4J APIs, see <a href=
270 "{@docRoot}preview/features/icu4j-framework.html">ICU4J Support</a>.
271</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800272
273<h2 id="android_tv_recording">Android TV recording</h2>
274
275<p>Android N adds the ability to record and playback content from Android TV input
276services via new recording APIs. Building on top of existing time-shifting
277APIs, TV input services can control what channel data can be recorded, how
278recorded sessions are saved, and manage user interaction with recorded content. </p>
279
280<p>For more information, see <a
281href="{@docRoot}preview/features/tv-recording-api.html">Android TV Recording APIs</a>.</p>
282
283<h2 id="accessibility_enhancements">Accessibility enhancements</h2>
284
285
286<p>Android N now offers Vision Settings directly on the Welcome screen for new
287device setup. This makes it much easier for users to discover and configure
288accessibility features on their devices, including magnification gesture, font
289size, display size, and TalkBack. </p>
290
291<p>With these accessibility features getting more prominent placement, your users
292are more likely to try your app with them enabled. Make sure you test your apps
293early with these settings enabled. You can enable them from Settings >
294Accessibility.</p>
295
296<p>Also in Android N, accessibility services can now help users with motor
297impairments to touch the screen. The new API allows building services with
298features such as face-tracking, eye-tracking, point scanning, and so on, to
299meet the needs of those users.</p>
300
301<p>For more information, see <code>android.accessibilityservice.GestureDescription</code>
302 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
303
304<h2 id="number-blocking">Number-blocking</h2>
305
306<p>Android N now supports number-blocking in the platform and provides a
307framework API to let service providers maintain a blocked-number list. The
308default SMS app, the default phone app, and provider apps can read from and
309write to the blocked-number list. The list is not accessible to other apps.</p>
310
311<p>By making number-blocking a standard feature of the platform, Android provides
312a consistent way for apps to support number-blocking across a wide range of
313devices. Among the other benefits that apps can take advantage of are:</p>
314
315<ul>
316 <li> Numbers blocked on calls are also blocked on texts
Andrew Solovay9b218572016-03-09 11:17:07 -0800317 <li> Blocked numbers can persist across resets and devices through the Backup &amp;
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800318Restore feature
319 <li> Multiple apps can use the same blocked numbers list
320</ul>
321
322<p>Additionally, carrier app integration through Android means that carriers can
323read the blocked numbers list on the device and perform service-side blocking
324for the user in order to stop unwanted calls and texts from reaching the user
325through any medium, such as a VOIP endpoint or forwarding phones.</p>
326
Andrew Solovay9b218572016-03-09 11:17:07 -0800327<p>
328 For more information, see <code>android.provider.BlockedNumberContract</code>
329 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
330 Reference</a>.
331</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800332
333<h2 id="call_screening">Call screening</h2>
334
Andrew Solovay9b218572016-03-09 11:17:07 -0800335<p>
336 Android N allows the default phone app to screen incoming calls. The phone
337 app does this by implementing the new <code>CallScreeningService</code>,
338 which allows the phone app to perform a number of actions based on an
339 incoming call's {@link android.telecom.Call.Details Call.Details}, such as:
340</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800341
342<ul>
343 <li> Reject the incoming call
344 <li> Do not allow the call to the call log
345 <li> Do not show the user a notification for the call
346</ul>
347
Andrew Solovay9b218572016-03-09 11:17:07 -0800348<p>
349 For more information, see <code>android.telecom.CallScreeningService</code>
350 in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API
351 Reference</a>.
352</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800353
354
355<h2 id="direct_boot">Direct boot</h2>
356
357<p>Direct boot improves device startup times and lets registered
358apps have limited functionality even after an unexpected reboot.
359For example, if an encrypted device reboots while the user is sleeping,
360registered alarms, messages and incoming calls can now continue notify
361the user as normal. This also means accessibility services can also be
362 available immediately after a restart.</p>
363
364<p>Direct boot takes advantage of file based encryption in Android N
365to enable fine grained encryption policies for both system and app data.
366The system uses a device-encrypted store for select system data and explicitly
367registered app data. By default a credential-encrypted store is used for all
368 other system data, user data, apps, and app data. </p>
369
370<p>At boot, the system starts in a restricted mode with access to
371device-encrypted data only, and without general access to apps or data.
372If you have components that you want to run in this mode, you can register
373them by setting a flag in the manifest. After restart, the system activates
374registered components by broadcasting the <code>LOCKED_BOOT_COMPLETED</code>
375intent. The system ensures registered device-encrypted app data is available
376before unlock. All other data is unavailable until the User confirms their lock
377 screen credentials to decrypt it. </p>
378
379For more information, see <a href="{@docRoot}preview/features/direct-boot.html">Direct Boot</a>.</p>
380</p>
381
382
383 <h3 id="key_attestation">Key Attestation</h3>
384
385<p>Hardware-backed keystores provide a much safer method to create, store,
386and use cryptographic keys on Android devices. They protect keys from the
387Linux kernel, potential Android vulnerabilities, and extraction
Adarsh Fernando37601562016-03-09 09:53:57 -0800388from rooted devices.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800389
390<p>To make it easier and more secure to use hardware-backed keystores,
391Android N introduces Key Attestation. Apps and off-devices can use Key
392Attestation to strongly determine whether an RSA or EC key pair is
393hardware-backed, what the properties of the key pair are, and what
394 constraints are applied to its usage and validity. </p>
395
396<p>Apps and off-device services can request information about a key pair
397through an X.509 attestation certificate which must be signed by a valid
398attestation key. The attestation key is an ECDSA signing key which is
399injected into the device’s hardware-backed keystore at the factory.
400Therefore, an attestation certificate signed by a valid attestation
401key confirms the existence of a hardware-backed keystore, along with
402 details of key pairs in that keystore.</p>
403
404<p>To ensure that the device is using a secure, official Android factory
405image, Key Attestation requires that the device <a
406class="external-link"
Andrew Solovay9b218572016-03-09 11:17:07 -0800407href="https://source.android.com/security/verifiedboot/verified-boot.html#bootloader_requirements">bootloader</a>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800408provide the following information to the <a class="external-link"
Andrew Solovay9b218572016-03-09 11:17:07 -0800409href="https://source.android.com/security/trusty/index.html">Trusted
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800410Execution Environment (TEE)</a>:</p>
411
412<ul>
413<li>The OS version and patch level installed on the device</li>
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800414<li>The <a href="https://source.android.com/security/verifiedboot/index.html"
415class="external-link" >Verified Boot</a> public key and lock status</li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800416 </ul>
417
418<p>For more information about the hardware-backed keystore feature,
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800419see the guide for <a href="https://source.android.com/security/keystore/"
420class="external-link">Hardware-backed Keystore</a>.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800421
422 <p>In addition to Key Attestation, Android N also introduces
423 fingerprint-bound keys that are not revoked on fingerprint enrollment.</p>
424
425 <h3 id="network_security_config">Network Security Config</h3>
426
427<p>In Android N, apps can customize the behavior of their secure (HTTPS, TLS)
428connections safely, without any code modification, by using the declarative
429<em>Network Security Config</em> instead of using the conventional
430error-prone programmatic APIs (e.g. X509TrustManager).</p>
431
432 <p>Supported features:</p>
433<ul>
434<li><b>Custom trust anchors.</b> Lets an application customize which
435Certificate Authorities (CA) are trusted for its secure connections. For
436example, trusting particular self-signed certificates or a restricted set of public CAs.
437</li>
438<li><b>Debug-only overrides.</b> Lets an application developer safely debug
439secure connections of their application without added risk to the installed
440base.
441</li>
442<li><b>Cleartext traffic opt-out.</b> Lets an application protect itself from
443accidental usage of cleartext traffic.</li>
Andrew Solovay9b218572016-03-09 11:17:07 -0800444<li><b>Certificate pinning.</b> An advanced feature that lets an application
445 limit which server keys are trusted for secure connections.</li>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800446</ul>
447
448<p>For more information, see <a
Andrew Solovay9b218572016-03-09 11:17:07 -0800449href="{@docRoot}preview/features/security-config.html">Network Security
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800450Config</a>.</p>
451
452 <h3 id="default_trusted_ca">Default Trusted Certificate Authority</h3>
453
454<p>By default, apps that target Android N only trust system-provided certificates
455and no longer trust user-added Certificate Authorities (CA). Apps targeting Android
456N that wish to trust user-added CAs should use the
Andrew Solovay9b218572016-03-09 11:17:07 -0800457<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> to
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800458specify how user CAs should be trusted.</p>
459
460 <h3 id="apk_signature_v2">APK signature scheme v2</h3>
461<p>The PackageManager class now supports verifying apps using the APK
462signature scheme v2. The APK signature scheme v2 is a whole-file signature scheme
463that significantly improves verification speed and strengthens integrity
464 guarantees by detecting any unauthorized changes to APK files.</p>
465
466<p>To maintain backward-compatibility, an APK must be signed with the v1 signature
467scheme (JAR signature scheme) before being signed with the v2 signature scheme.
468With the v2 signature scheme, verification fails if you sign the APK with an
469 additional certificate after signing with the v2 scheme. </p>
470
471<p>APK signature scheme v2 support will be available later in the N Developer
472Preview.</p>
473
474<h2 id="scoped_directory_access">Scoped directory access</h2>
475
Daniel Yuc697a2f2016-03-09 13:45:30 -0800476<p>In Android N, apps can use new APIs to request access to specific <a
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800477href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
478storage</a> directories, including directories on removable media such as SD
479cards. The new APIs greatly simplify how your application accesses standard
480external storage directories, such as the <code>Pictures</code> directory. Apps
Daniel Yuc697a2f2016-03-09 13:45:30 -0800481like photo apps can use these APIs instead of using
482<code>READ_EXTERNAL_STORAGE</code>, which grants access to all storage
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800483directories, or the Storage Access Framework, which makes the user navigate to
484the directory.</p>
485
486<p>Additionally, the new APIs simplify the steps a user takes to grant external
487storage access to your app. When you use the new APIs, the system uses a simple
488permissions UI that clearly details what directory the application is
489requesting access to.</p>
490
Andrew Solovay9b218572016-03-09 11:17:07 -0800491<p>For more information, see the
492<a href="{@docRoot}preview/features/scoped-folder-access.html">Scoped
493Directory Access</a> developer documentation.</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800494
495<h2 id="android_for_work">Android for Work</h2>
496
497<p>Android for Work adds many new features and APIs for devices running Android N.
498Some highlights are below &mdash; for a complete list of Android for Work updates
499related to Android N, please see Android for Work Changes.</p>
500
501<h3 id="work_profile_security_challenge">Work profile security challenge </h3>
502
Andrew Solovay9b218572016-03-09 11:17:07 -0800503<p>
504 Profile owners can specify a separate security challenge for apps running in
505 the work profile. The work challenge is shown when a user attempts to open
506 any work apps. Successful completion of the security challenge unlocks the
507 work profile and decrypts it if necessary. For profile owners,
508 <code>ACTION_SET_NEW_PASSWORD</code> prompts the user to set a work
509 challenge, and <code>ACTION_SET_NEW_PARENT_PROFILE_PASSWORD</code> prompts
510 the user to set a device lock.
511</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800512
Andrew Solovay9b218572016-03-09 11:17:07 -0800513<p>
514 Profile owners can set distinct password policies for the work challenge
515 (such as how long the PIN needs to be, or whether a fingerprint can be used
516 to unlock the profile) using the <code>setPasswordQuality()</code>,
517 <code>setPasswordMinimumLength()</code> and related methods. The profile
518 owner can also set the device lock using the <code>DevicePolicyManager</code>
519 instance returned by the new <code>getParentProfileInstance()</code> method.
520 Additionally, profile owners can customize the credentials screen for the
521 work challenge using the new <code>setOrganizationColor()</code> and
522 <code>setOrganizationName()</code> methods.
523</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800524<h3 id="turn_off_work">Turn off work </h3>
525
526<p>On a device with a work profile, users can toggle work mode. When work mode is
527off the managed user is temporarily shut down, which disables work profile
528apps, background sync, and notifications. This includes the profile owner
529application. When work mode is off, the system displays a persistent status
530icon to remind the user that they can't launch work apps. The launcher
531indicates that work apps and widgets are not accessible. </p>
532
533<h3 id="always_on_vpn">Always on VPN </h3>
534
535<p>Device owners and profile owners can ensure that work apps always connect
536through a specified VPN. The system automatically starts that VPN after the
537device boots.</p>
538
Andrew Solovay9b218572016-03-09 11:17:07 -0800539<p>
540 New <code>DevicePolicyManager</code> methods are
541 <code>setAlwaysOnVpnPackage()</code> and
542 <code>getAlwaysOnVpnPackage()</code>.
543</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800544
545<p>Because VPN services can be bound directly by the system without app
546interaction, VPN clients need to handle new entry points for Always on VPN. As
547before, services are indicated to the system by an intent filter matching
548action <code>android.net.VpnService</code>. </p>
549
Andrew Solovay9b218572016-03-09 11:17:07 -0800550<p>
551 Users can also manually set Always on VPN clients that implement
552 <code>VPNService</code> methods in the primary user using
553 <strong>Settings&gt;More&gt;Vpn</strong>.
554</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800555
556
557<h2 id="jit_aot">Profile-guided JIT/AOT compilation</h2>
558
559<p>In Android N, we've added a Just in Time (JIT) compiler with code profiling to
560ART, which lets it constantly improve the performance of Android apps as they
561run. The JIT compiler complements ART's current Ahead of Time (AOT) compiler
562and helps improve runtime performance, save storage space, and speed up app
563updates and system updates.</p>
564
565<p>Profile-guided compilation lets ART manage the AOT/JIT compilation for each app
566according to its actual usage, as well as conditions on the device. For
567example, ART maintains a profile of each app's hot methods and can precompile
568and cache those methods for best performance. It leaves other parts of the app
569uncompiled until they are actually used.</p>
570
571<p>Besides improving performance for key parts of the app, profile-guided
572compilation helps reduce an app's overall RAM footprint, including associated
573binaries. This feature is especially important on low-memory devices.</p>
574
575<p>ART manages profile-guided compilation in a way that minimizes impact on the
576device battery. It does precompilation only when then the device is idle and
577charging, saving time and battery by doing that work in advance.</p>
578
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800579<h2 id="quick_path_to_app_install">Quick path to app install</h2>
580
581<p>One of the most tangible benefits of ART's JIT compiler is the speed of app
582installs and system updates. Even large apps that required several minutes to
583optimize and install in Android 6.0 can now install in just a matter of
584seconds. System updates are also faster, since there's no more optimizing step. </p>
585
586<h2 id="doze_on_the_go">Doze on the go...</h2>
587
588<p>Android 6.0 introduced Doze, a system mode that saves battery by deferring
589apps' CPU and network activities when the device is idle, such as when it's
590sitting on a table or in a drawer. </p>
591
592<p>Now in Android N, Doze takes a step further and saves battery while on the go.
593Any time the screen is off for a period of time and the device is unplugged,
594Doze applies a subset of the familiar CPU and network restrictions to apps.
595This means users can save battery even when carrying their devices in their
596pockets.</p>
597
598
599
600
601
602<p>A short time after the screen turns off while the device is on battery, Doze
603restricts network access and defers jobs and syncs. During brief maintenance
604windows, applications are allowed network access and any of their deferred
605jobs/syncs are executed. Turning the screen on or plugging in the device brings
606the device out of Doze.</p>
607
608<p>When the device is stationary again, with screen off and on battery for a
609period of time, Doze applies the full CPU and network restrictions on {@link
610android.os.PowerManager.WakeLock}, {@link android.app.AlarmManager} alarms, and
611GPS/Wi-Fi scans.</p>
612
613<p>The best practices for adapting your app to Doze are the same whether the
614device is moving or not, so if you already updated your app to gracefully
615handle Doze, you're all set. If not, start <a
Andrew Solovay9b218572016-03-09 11:17:07 -0800616href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adapting
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800617your app to Doze</a> now.</p>
618
619<h2 id="background_optimizations">Project Svelte: Background optimizations</h2>
620
621<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
622across the range of Android devices in the ecosystem. In Android N, Project
623Svelte is focused on optimizing the way apps run in the background. </p>
624
625<p>Background processing is an essential part of most apps. When handled right, it
626can make your user experience amazing &mdash; immediate, fast, and context-aware.
627When not handled right, background processing can needlessly consume RAM (and
628battery) and affect system performance for other apps. </p>
629
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800630<p>Since Android 5.0, {@link android.app.job.JobScheduler} has been the
631preferred way of performing background work in a way that's good
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800632for users. Apps can schedule jobs while letting the system optimize based on
633memory, power, and connectivity conditions. JobScheduler offers control and
634simplicity, and we want all apps to use it. </p>
635
Andrew Solovay9b218572016-03-09 11:17:07 -0800636<p>
637 Another good option is <a href=
638 "https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
639 <code>GCMNetworkManager</code></a>, part of Google Play Services, which
640 offers similar job scheduling with compatibility across legacy versions of
641 Android.
642</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800643
Andrew Solovayd6a6f962016-03-10 15:01:29 -0800644<p>We're continuing to extend <code>JobScheduler</code> and
645<code>GCMNetworkManager</code> to meet more of
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800646your use cases &mdash; for example, in Android N you can now schedule background
647work based on changes in Content Providers. At the same time we're starting to
648deprecate some of the older patterns that can reduce system performance,
649especially on low-memory devices.</p>
650
651<p>In Android N we're removing three commonly-used implicit broadcasts &mdash;
Adarsh Fernando37601562016-03-09 09:53:57 -0800652 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}, {@link
653 android.hardware.Camera#ACTION_NEW_PICTURE}, and {@link
654 android.hardware.Camera#ACTION_NEW_VIDEO} &mdash; since those can wake the
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800655background processes of multiple apps at once and strain memory and battery. If
656your app is receiving these, take advantage of the N Developer Preview to
657 migrate to <code>JobScheduler</code> and related APIs instead. </p>
658
Andrew Solovay9b218572016-03-09 11:17:07 -0800659<p>
660 Take a look at the <a href=
661 "{@docRoot}preview/features/background-optimization.html">Background
662 Optimizations</a> documentation for details.
663</p>
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800664
665<h2 id="gles_32">OpenGL&trade; ES 3.2 API</h2>
666
667<p>Android N adds framework interfaces and platform support for OpenGL ES 3.2, including:</p>
668
669<ul>
670 <li> All extensions from the <a class="external-link"
671href="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>.
672 <li> Floating-point framebuffers for HDR and deferred shading.
673 <li> BaseVertex draw calls to enable better batching and streaming.
674 <li> Robust buffer access control to reduce WebGL overhead.
675</ul>
676
677<p>The framework API for OpenGL ES 3.2 on Android N is provided with the
678<code>GLES32</code> class. When using OpenGL ES 3.2, be sure to declare the
Andrew Solovay9b218572016-03-09 11:17:07 -0800679requirement in your manifest file, using the <code>&lt;uses-feature&gt;</code> tag and
Dirk Doughertycf65e4842016-03-07 22:31:57 -0800680the <code>android:glEsVersion</code> attribute. </p>
681
682<p>For information about using OpenGL ES, including how to check a device's
683supported OpenGL ES version at runtime, see the <a
684href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
685
686