OSDN Git Service

Doc change: remove devices listed for vp8 hw encoder in highlights.
[android-x86/frameworks-base.git] / docs / html / about / versions / jelly-bean.jd
1 page.title=Jelly Bean
2 tab1=Android 4.3
3 tab1.link=#android-43
4 tab2=Android 4.2
5 tab2.link=#android-42
6 tab3=Android 4.1
7 tab3.link=#android-41
8
9 @jd:body
10 <div id="butterbar-wrapper" >
11   <div id="butterbar" >
12     <div id="butterbar-message">
13 <a target="_blank" href="https://docs.google.com/a/google.com/forms/d/1EHLPGqhbxj2HungHRRN4_0K9TGpc-Izy-u46vBDgS8Q/viewform">
14       Take the Android Developer Survey</a>
15     </div>
16   </div>
17 </div>
18
19 <style>
20 #android-41 {display:none;}
21 #android-42 {display:none;}
22 </style>
23
24 <script>
25 function revealSection(hashy) {
26   if (hashy != "" && !$(hashy).is(":visible")) {
27     sectionId = $(hashy).closest(".version-section").attr("id");
28     link = $("#title-tabs a[href$="+sectionId+"]");
29     link.parent().addClass("selected");
30     link.parent().siblings().removeClass("selected");
31     
32     sectionDiv = $(".version-section"+link.attr("href"));
33     if (sectionDiv.length) {
34       $(".version-section").hide();
35       sectionDiv.show();
36     }
37     
38     $('html, body').animate({
39          scrollTop: $(hashy).offset().top
40      }, 100);
41   }
42 }
43
44 $(document).ready(function() {
45   $("#title-tabs li a").each(function() {
46     $(this).click(function(){
47       $(this).parent().addClass("selected");
48       $(this).parent().siblings().removeClass("selected");
49       $(".version-section").hide();
50       $($(this).attr("href")).show();
51       return false;
52     });
53   });
54
55   hashy = escapeHTML(location.hash);
56   revealSection(hashy);
57 });
58
59 window.onhashchange = function () {
60   revealSection(escapeHTML(location.hash));
61 }
62
63 </script>
64
65
66 <!-- BEGIN ANDROID 4.3 -->
67 <div id="android-43" class="version-section">
68
69 <div style="float:right;padding:0px 0px 10px 28px;width:480px;">
70 <div>
71 <a href="{@docRoot}images/jb-android-43@2x.png"><img src="{@docRoot}images/jb-android-43.jpg" alt="Android 4.3 on phone and tablet" width="472"></a>
72
73 </div>
74 </div>
75 <p>Welcome to Android 4.3, a sweeter version of <span
76 style="white-space:nowrap;">Jelly Bean!</span></p>
77
78 <p>Android 4.3 includes performance optimizations and great
79 new features for users and developers. This document provides a glimpse of what's new for
80 developers.
81
82 <p>See the <a href="{@docRoot}about/versions/android-4.3.html">Android 4.3 APIs</a>
83 document for a detailed look at the new developer APIs.</p>
84
85 <p>Find out more about the new Jelly Bean features for users at <a
86 href="http://www.android.com/whatsnew">www.android.com</a>.</p>
87
88
89 <h2 id="43-performance" style="line-height:1.25em;">Faster, Smoother, More
90 Responsive</h2>
91
92 <p>Android 4.3 builds on the performance improvements already included in Jelly
93 Bean &mdash; <strong>vsync timing</strong>, <strong>triple buffering</strong>,
94 <strong>reduced touch latency</strong>, <strong>CPU input boost</strong>, and
95 <strong>hardware-accelerated 2D rendering</strong> &mdash; and adds new
96 optimizations that make Android even faster.</p>
97
98 <p>For a graphics performance boost, the hardware-accelerated 2D renderer now
99 <strong>optimizes the stream of drawing commands</strong>, transforming it into
100 a more efficient GPU format by rearranging and merging draw operations. For
101 multithreaded processing, the renderer can also now use <strong>multithreading
102 across multiple CPU cores</strong> to perform certain tasks.</p>
103
104 <p>Android 4.3 also improves <strong>rendering for shapes and text</strong>.
105 Shapes such as circles and rounded rectangles are now rendered at higher quality
106 in a more efficient manner. Optimizations for text include increased performance
107 when using multiple fonts or complex glyph sets (CJK), higher rendering quality
108 when scaling text, and faster rendering of drop shadows.</p>
109
110 <p><strong>Improved window buffer allocation</strong> results in a faster image
111 buffer allocation for your apps, reducing the time taken to start rendering when
112 you create a window.</p>
113
114 <p>For highest-performance graphics, Android 4.3 introduces support for
115 <strong>OpenGL ES 3.0</strong> and makes it accessible to apps through both
116 framework and native APIs. On supported devices, the hardware accelerated 2D
117 rendering engine takes advantage of OpenGL ES 3.0 to optimize <strong>texture
118 management</strong> and increase <strong>gradient rendering
119 fidelity</strong>.</p>
120
121
122 <h2 id="43-graphics">OpenGL ES 3.0 for High-Performance Graphics</h2>
123
124 <p>Android 4.3 introduces platform support for <a class="external-link"
125 href="http://www.khronos.org/opengles/3_X/" target="_android">Khronos OpenGL ES 3.0</a>,
126 providing games and other apps with highest-performance 2D and 3D graphics
127 capabilities on supported devices. You can take advantage of OpenGL ES 3.0
128 and related EGL extensions using either <strong>framework APIs</strong>
129 or <strong>native API bindings</strong> through the Android Native Development
130 Kit (NDK).</p>
131
132 <p>Key new functionality provided in OpenGL ES 3.0 includes acceleration of
133 advanced visual effects, high quality ETC2/EAC texture compression as a standard
134 feature, a new version of the GLSL ES shading language with integer and 32-bit
135 floating point support, advanced texture rendering, and standardized texture
136 size and render-buffer formats.
137
138 <p>You can use the OpenGL ES 3.0 APIs to create highly complex, highly efficient
139 graphics that run across a range of compatible Android devices, and you can
140 support a single, standard texture-compression format across those devices.</p>
141
142 <p>OpenGL ES 3.0 is an optional feature that depends on underlying graphics
143 hardware. Support is already available on Nexus 7 (2013), Nexus 4, and
144 Nexus 10 devices.</p>
145
146
147 <h2 id="43-bluetooth" style="clear:both;">Enhanced Bluetooth Connectivity</h2>
148
149 <h4 id="43-bt-le">Connectivity with Bluetooth Smart devices and sensors</h4>
150
151 <p>Now you can design and build apps that interact with the latest generation
152 of small, low-power devices and sensors that use <a
153 href="http://www.bluetooth.com/Pages/Bluetooth-Smart-Devices.aspx"
154 class="external-link" target="_android">Bluetooth Smart technology</a>. </p>
155
156 <div style="float:right;margin:0px 0px 32px 0px;width:460px;">
157 <img src="{@docRoot}images/jb-btle.png" alt="" width="450" style="padding-left:1.5em;margin-bottom:0">
158 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;margin-bottom:0;padding-left:1.5em;">Android 4.3 gives you a single, standard API for interacting with Bluetooth Smart devices. </p>
159 </div>
160
161 <p>Android 4.3 introduces built-in platform support for <strong>Bluetooth Smart
162 Ready</strong> in the central role and provides a standard set of APIs that
163 apps can use to discover nearby devices, query for GATT services, and read/write
164 characteristics.</p>
165
166 <p>With the new APIs, your apps can efficiently scan for devices and services of
167 interest. For each device, you can check for supported GATT services by UUID and
168 manage connections by device ID and signal strength. You can connect to a GATT
169 server hosted on the device and read or write characteristics, or register a
170 listener to receive notifications whenever those characteristics change.</p>
171
172 <p>You can implement support for any GATT profile. You can read or write
173 standard characteristics or add support for custom characteristics as needed.
174 Your app can function as either client or server and can transmit and receive
175 data in either mode. The APIs are generic, so you’ll be able to support
176 interactions with a variety of devices such as proximity tags, watches, fitness
177 meters, game controllers, remote controls, health devices, and more.
178 </p>
179
180 <p>Support for Bluetooth Smart Ready is already available on Nexus 7 (2013)
181 and Nexus 4 devices and will be supported in a growing number of
182 Android-compatible devices in the months ahead.</p>
183
184 <h4 id="43-bt-avrcp">AVRCP 1.3 Profile</h4>
185
186 <p>Android 4.3 adds built-in support for <strong>Bluetooth AVRCP 1.3</strong>,
187 so your apps can support richer interactions with remote streaming media
188 devices. Apps such as media players can take advantage of AVRCP 1.3 through the
189 <strong>remote control client APIs</strong> introduced in Android 4.0. In
190 addition to exposing playback controls on the remote devices connected over
191 Bluetooth, apps can now transmit metadata such as track name, composer, and
192 other types of media metadata. </p>
193
194 <p>Platform support for AVRCP 1.3 is built on the Bluedroid Bluetooth stack
195 introduced by Google and Broadcom in Android 4.2. Support is available right
196 away on Nexus devices and other Android-compatible devices that offer A2DP/AVRCP
197 capability. </p>
198
199
200 <h2 id="43-profiles">Support for Restricted Profiles</h2>
201
202 <div style="float:right;margin:22px 0px 0px 24px;width:340px;">
203 <img src="{@docRoot}images/jb-profiles-create-n713.png" alt="Setting up a Restricted Profile" width="340" style="margin-bottom:0">
204 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;margin-bottom:0;">A tablet owner can set up one or more restricted profiles in Settings and manage them independently. </p>
205 <img src="{@docRoot}images/jb-profiles-restrictions-n713.png" alt="Setting Restrictions in a Profile" width="340" style="margin-bottom:0;padding-top:1em;">
206 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Your app can offer restrictions to let owners manage your app content when it's running in a profile. </p>
207 </div>
208
209 <p>Android 4.3 extends the multiuser feature for tablets with <strong>restricted
210 profiles</strong>, a new way to manage users and their capabilities on a single
211 device. With restricted profiles, tablet owners can quickly set up
212 <strong>separate environments</strong> for each user, with the ability to
213 manage <strong>finer-grained restrictions</strong> in the apps that are
214 available in those environments. Restricted profiles are ideal for friends and
215 family, guest users, kiosks, point-of-sale devices, and more. </p>
216
217 <p>Each restricted profile offers an isolated and secure space with its own
218 local storage, home screens, widgets, and settings. Unlike with
219 users, profiles are created from the tablet owner’s environment, based on the
220 owner’s installed apps and system accounts. The owner controls which installed
221 apps are enabled in the new profile, and access to the owner’s accounts is
222 disabled by default. </p>
223
224 <p>Apps that need to access the owner’s accounts &mdash; for sign-in,
225 preferences, or other uses &mdash; can opt-in by declaring a manifest attribute,
226 and the owner can review and manage those apps from the profile configuration
227 settings.</p>
228
229 <p>For developers, restricted profiles offer a new way to deliver more value and
230 control to your users. You can implement <strong>app restrictions</strong>
231 &mdash; content or capabilities controls that are supported by your app &mdash;
232 and advertise them to tablet owners in the profile configuration settings.
233 </p>
234
235 <p>You can add app restrictions directly to the profile configuration settings
236 using predefined boolean, select, and multi-select types. If you want more
237 flexibility, you can even launch your own UI from profile configuration settings
238 to offer any type of restriction you want. </p>
239
240 <p>When your app runs in a profile, it can check for any restrictions configured
241 by the owner and enforce them appropriately. For example, a media app
242 might offer a restriction to let the owner set a maturity level for the profile.
243 At run time, the app could check for the maturity setting and then manage
244 content according to the preferred maturity level. </p>
245
246 <p>If your app is not designed for use in restricted profiles, you can opt
247 out altogether, so that your app can't be enabled in any restricted profile.</p>
248
249
250 <h2 id="43-optimized-location">Optimized Location and Sensor Capabilities</h2>
251
252 <p><a href="{@docRoot}google/play-services/index.html">Google Play services</a>
253 offers advanced location APIs that you can use in your apps. Android 4.3
254 <strong>optimizes these APIs</strong> on supported devices with new hardware and
255 software capabilities that minimize use of the battery. </p>
256
257
258 <div style="float:left;margin:22px 24px 36px 22px;width:250px;">
259 <a href=""><img src="{@docRoot}images/google/gps-location.png" alt="" height="160" style="padding-right:1.5em;margin-bottom:0"></a>
260 </div>
261
262 <p><strong>Hardware geofencing</strong> optimizes for power efficiency by
263 performing location computation in the device hardware, rather than in
264 software. On devices that support hardware geofencing, Google Play services
265 geofence APIs will be able to take advantage of this optimization to save
266 battery while the device is moving. </p>
267
268 <p><strong>Wi-Fi scan-only mode</strong> is a new platform optimization that
269 lets users keep Wi-Fi scan on without connecting to a Wi-Fi network, to improve
270 location accuracy while conserving battery. Apps that depend on Wi-Fi for
271 location services can now ask users to enable scan-only mode from Wi-Fi
272 advanced settings. Wi-Fi scan-only mode is not dependent on device hardware and
273 is available as part of the Android 4.3 platform.</p>
274
275 <p>New sensor types allow apps to better manage sensor readings. A <strong>game
276 rotation vector</strong> lets game developers sense the device’s rotation
277 without having to worry about magnetic interference.  <strong>Uncalibrated
278 gyroscope</strong> and <strong>uncalibrated magnetometer</strong> sensors report
279 raw measurements as well as estimated biases to apps. </p>
280
281 <p>The new hardware capabilities are already available on Nexus 7 (2013) and
282 Nexus 4 devices, and any device manufacturer or chipset vendor can build them
283 into their devices.</p>
284
285
286 <h2 id="43-media">New Media Capabilities</h2>
287
288 <h4 id="43-modular-drm">Modular DRM framework</h4>
289
290 <p>To meet the needs of the next generation of media services, Android 4.3
291 introduces a <strong>modular DRM framework</strong> that enables media application
292 developers to more easily integrate DRM into their own streaming protocols, such
293 as MPEG DASH (Dynamic Adaptive Streaming over HTTP, ISO/IEC 23009-1).</p>
294
295 <p>Through a combination of new APIs and enhancements to existing APIs, the
296 media DRM framework provides an <strong>integrated set of services</strong> for
297 managing licensing and provisioning, accessing low-level codecs, and decoding
298 encrypted media data. A new MediaExtractor API lets you get the PSSH metadata
299 for DASH media. Apps using the media DRM framework manage the network
300 communication with a license server and handle the streaming of encrypted data
301 from a content library. </p>
302
303 <h4 id="43-vp8-encoder">VP8 encoder</h4>
304
305 <p>Android 4.3 introduces built-in support for <strong>VP8 encoding</strong>,
306 accessible from framework and native APIs. For apps using native APIs, the
307 platform includes <strong>OpenMAX 1.1.2 extension headers</strong> to support
308 VP8 profiles and levels. VP8 encoding support includes settings for target
309 bitrate, rate control, frame rate, token partitioning, error resilience,
310 reconstruction and loop filters. The platform API introduces VP8 encoder support
311 in a range of formats, so you can take advantage of the best format for your
312 content. </p>
313
314 <p>VP8 encoding is available in software on all compatible devices running
315 Android 4.3. For highest performance, the platform also supports
316 hardware-accelerated VP8 encoding on capable devices.</p>
317
318 <h4 id="43-surface">Video encoding from a surface</h4>
319
320 <p>Starting in Android 4.3 you can use a surface as the input to a video
321 encoder. For example, you can now direct a stream from an OpenGL ES surface
322 to the encoder, rather than having to copy between buffers.</p>
323
324 <h4 id="43-media-muxer">Media muxer</h4>
325
326 <p>Apps can use new media muxer APIs to combine elementary audio and video
327 streams into a single output file. Currently apps can multiplex a single MPEG-4
328 audio stream and a single MPEG-4 video stream into a <strong>single MPEG-4 ouput
329 file</strong>. The new APIs are a counterpart to the media demuxing APIs
330 introduced in Android 4.2. </p>
331
332 <h4 id="43-progress-scrubbing">Playback progress and scrubbing in remote control
333 clients</h4>
334
335 <p>Since Android 4.0, media players and similar applications have been able to
336 offer playback controls from remote control clients such as the device lock
337 screen, notifications, and remote devices connected over Bluetooth. Starting in
338 Android 4.3, those applications can now also expose playback <strong>progress
339 and speed</strong> through their remote control clients, and receive commands to
340 jump to a specific <strong>playback position</strong>. </p>
341
342
343 <h2 id="43-beautiful-apps">New Ways to Build Beautiful Apps</h2>
344
345
346 <h3 id="43-notification-access">Access to notifications</h3>
347
348 <p>Notifications have long been a popular Android feature because they let users
349 see information and updates from across the system, all in one place. Now in
350 Android 4.3, apps can <strong>observe the stream of notifications</strong> with the
351 user's permission and display the notifications in any way they want, including
352 sending them to nearby devices connected over Bluetooth. </p>
353
354 <p>You can access notifications through new APIs that let you <strong>register a
355 notification listener</strong> service and with permission of the user, receive
356 notifications as they are displayed in the status bar. Notifications are
357 delivered to you in full, with all details on the originating app, the post
358 time, the content view and style, and priority. You can evaluate fields of
359 interest in the notifications, process or add context from your app, and route
360 them for display in any way you choose.</p>
361
362 <p>The new API gives you callbacks when a notification is added, updated, and
363 removed (either because the user dismissed it or the originating app withdrew it).
364 You'll be able to launch any intents attached to the notification or its actions,
365 as well as dismiss it from the system, allowing your app to provide a complete
366 user interface to notifications.</p>
367
368 <p><strong>Users remain in control</strong> of which apps can receive
369 notifications. At any time, they can look in Settings to see which apps have
370 notification access and <strong>enable or disable access</strong> as needed.
371 Notification access is disabled by default &mdash; apps can use a new Intent to
372 take the user directly to the Settings to enable the listener service after
373 installation.</p>
374
375 <h4 id="43-view-overlays">View overlays</h4>
376
377 <p>You can now create <strong>transparent overlays</strong> on top of Views and
378 ViewGroups to render a temporary View hierarchy or transient animation effects
379 without disturbing the underlying layout hierarchy. Overlays are particularly
380 useful when you want to create animations such as sliding a view outside of its
381 container or dragging items on the screen without affecting the view
382 hierarchy. </p>
383
384 <h4 id="43-optical-bounds">Optical bounds layout mode</h4>
385
386 <p>A new layout mode lets you manage the positioning of Views inside ViewGroups
387 according to their <strong>optical bounds</strong>, rather than their clip
388 bounds. Clip bounds represent a widget’s actual outer boundary, while the new
389 optical bounds describe the where the widget appears to be, within the clip
390 bounds. You can use the optical bounds layout mode to properly align widgets
391 that use outer visual effects such as shadows and glows.</p>
392
393 <h4 id="43-rotation-animation">Custom rotation animation types</h4>
394
395 <p>Apps can now define the exit and entry animation types used on a window when the
396 device is rotated. You can set window properties to enable
397 <strong>jump-cut</strong>, <strong>cross-fade</strong>, or
398 <strong>standard</strong> window rotation. The system uses the custom animation
399 types when the window is fullscreen and is not covered by other windows.</p>
400
401 <h4 id="43-screen-orientations">Screen orientation modes</h4>
402
403 <p>Apps can set new orientation modes for Activities to ensure that they are
404 displayed in the proper orientation when the device is flipped. Additionally,
405 apps can use a new mode to <strong>lock the screen</strong> to its current
406 orientation. This is useful for apps using the camera that want to
407 <strong>disable rotation</strong>  while shooting video. </p>
408
409 <h4 id="43-quick-responses-intent">Intent for handling Quick Responses</h4>
410
411 <p>Android 4.3 introduces a new public Intent that lets any app <strong>handle
412 Quick Responses</strong> &mdash; text messages sent by the user in response to
413 an incoming call, without needing to pick up the call or unlock the device. Your
414 app can listen for the intent and send the message to the caller over your
415 messaging system. The intent includes the recipient (caller) as well as the
416 message itself. </p>
417
418
419 <h2 id="43-intl">Support for International Users</h2>
420
421 <div style="float:right;margin:22px 0px 0px 24px;width:380px;">
422 <img src="{@docRoot}images/jb-rtl-arabic-n4.png" alt="" width="180" style="margin-bottom:0;">
423 <img src="{@docRoot}images/jb-rtl-hebrew-n4.png" alt="" width="180" style="margin-bottom:0;padding-left:10px;">
424 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">More parts of Android 4.3 are optimized for RTL languages.</p>
425 </div>
426
427 <h4 id="43-rtl">RTL improvements</h4>
428
429 <p>Android 4.3 includes RTL performance enhancements and broader RTL support
430 across framework UI widgets, including ProgressBar/Spinner and
431 ExpandableListView. More debugging information visible through the
432 <code>uiautomatorviewer</code> tool. In addition, more system UI components are
433 now RTL aware, such as notifications, navigation bar and the Action Bar.</p>
434
435 <p>To provide a better systemwide experience in RTL scripts, more default system
436 apps now support RTL layouts, including Launcher, Quick Settings, Phone, People,
437 SetupWizard, Clock, Downloads, and more.</p>
438
439 <h4 id="43-localization">Utilities for localization</h4>
440
441 <div style="float:right;margin:16px 12px 0px 32px;width:260px;clear:both;">
442 <img src="{@docRoot}images/jb-pseudo-locale-zz.png" alt="" width="260" style="margin-bottom:0;">
443 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Pseudo-locales make it easier to test your app's localization.</p>
444 </div>
445
446 <p>Android 4.3 also includes new utilities and APIs for creating better RTL
447 strings and testing your localized UIs. A new <strong>BidiFormatter</strong>
448 provides a set of simple APIs for wrapping Unicode strings so that you can
449 fine-tune your text rendering in RTL scripts. To let you use this utility more
450 broadly in your apps, the BidiFormatter APIs are also now available for earlier
451 platform versions through the Support Package in the Android SDK. </p>
452
453 <p>To assist you with managing date formatting across locales, Android 4.3
454 includes a new <strong>getBestAvaialbleDate()</strong> method that automatically
455 generates the best possible localized form of a Unicode UTS date for a locale
456 that you specify. It’s a convenient way to provide a more localized experience
457 for your users. </p>
458
459 <p>To help you test your app more easily in other locales, Android 4.3
460 introduces <strong>pseudo-locales</strong> as a new developer option.
461 Pseudo-locales simulate the language, script, and display characteristics
462 associated with a locale or language group. Currently, you can test with a
463 pseudo-locale for <strong>Accented English</strong>, which lets you see how your
464 UI works with script accents and characters used in a variety of European
465 languages. <!--To use the pseudo-locale, enable “Developer options” in Settings
466 and then select Accented English from Language and Input settings. --></p>
467
468
469 <h2 id="43-accessibility">Accessibility and UI Automation</h2>
470
471 <p>Starting in Android 4.3, accessibility services can <strong>observe and
472 filter key events</strong>, such as to handle keyboard shortcuts or provide
473 navigation parity with gesture-based input. The service receives the events and
474 can process them as needed before they are passed to the system or other
475 installed apps.</p>
476
477 <p>Accessibility services can declare <strong>new capability attributes</strong>
478 to describe what their services can do and what platform features they use. For
479 example, they can declare the capability to filter key events, retrieve window
480 content, enable explore-by-touch, or enable web accessibility features. In some
481 cases, services must declare a capability attribute before they can access
482 related platform features. The system uses the service’s capability attributes
483 to generate an opt-in dialog for users, so they can see and agree to the
484 capabilities before launch.</p>
485
486 <p>Building on the accessibility framework in Android 4.3, a new <strong>UI
487 automation framework</strong> lets tests interact with the device’s UI by
488 simulating user actions and introspecting the screen content. Through the UI
489 automation framework you can perform basic operations, set rotation of the
490 screen, generate input events, take screenshots, and much more. It’s a powerful
491 way to automate testing in realistic user scenarios, including actions or
492 sequences that span multiple apps.</p>
493
494
495 <h2 id="43-enterprise-security">Enterprise and Security</h2>
496
497 <h4 id="43-wpa2">Wi-Fi configuration for WPA2-Enterprise networks</h4>
498
499 <p>Apps can now configure the <strong>Wi-Fi credentials</strong> they need for
500 connections to <strong>WPA2 enterprise access points</strong>. Developers can
501 use new APIs to configure Extensible Authentication Protocol (EAP) and
502 Encapsulated EAP (Phase 2) credentials for authentication methods used in the
503 enterprise. Apps with permission to access and change Wi-Fi can configure
504 authentication credentials for a variety of EAP and Phase 2 authentication
505 methods. </p>
506
507 <h4 id="43-selinux">Android sandbox reinforced with SELinux</h4>
508
509 <p>Android now uses <strong>SELinux</strong>, a mandatory access control (MAC)
510 system in the Linux kernel to augment the UID based application sandbox.
511 This protects the operating system against potential security vulnerabilities.</p>
512
513 <h4 id="43-keychain">KeyChain enhancements</h4>
514
515 <p>The KeyChain API now provides a method that allows applications to confirm
516 that system-wide keys are bound to a <strong>hardware root of trust</strong> for
517 the device.  This provides a place to create or store private keys that
518 <strong>cannot be exported</strong> off the device, even in the event of a root or
519 kernel compromise.</p>
520
521 <h4 id="43-keystore">Android Keystore Provider</h4>
522
523 <p>Android 4.3 introduces a keystore provider and APIs that allow applications
524 to create exclusive-use keys. Using the APIs, apps can create or store private
525 keys that <strong>cannot be seen or used by other apps</strong>, and can be
526 added to the keystore without any user interaction. </p>
527
528 <p>The keystore provider provides the same security benefits that the KeyChain
529 API provides for system-wide credentials, such as binding credentials to a
530 device. Private keys in the keystore cannot be exported off the device.</p>
531
532 <h4 id="43-seuid">Restrict Setuid from Android Apps</h4>
533
534 <p>The <code>/system</code> partition is now mounted <code>nosuid</code> for
535 zygote-spawned processes, preventing Android applications from executing
536 <code>setuid</code> programs. This reduces root attack surface and likelihood of
537 potential security vulnerabilities.</p>
538
539
540 <h2 id="43-tools">New Ways to Analyze Performance</h2>
541
542 <div style="float:right;margin:16px 6px 0px 32px;width:390px;">
543 <img src="{@docRoot}images/jb-systrace.png" alt="" width="390" style="margin-bottom:0;">
544 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">Systrace uses a new command syntax and lets you collect more types of profiling data.</p>
545 </div>
546
547 <h4 id="43-systrace">Enhanced Systrace logging</h4>
548
549 <p>Android 4.3 supports an enhanced version of the <strong>Systrace</strong>
550 tool that’s easier to use and that gives you access to more types of information
551 to profile the performance of your app. You can now collect trace data from
552 <strong>hardware modules</strong>, <strong>kernel functions</strong>,
553 <strong>Dalvik VM</strong> including garbage collection, <strong>resources
554 loading</strong>, and more. </p>
555
556 <p>Android 4.3 also includes new Trace APIs that you can use in your apps to mark
557 specific sections of code to trace using Systrace <strong>begin/end
558 events</strong>. When the marked sections of code execute, the system writes the
559 begin/end events to the trace log. There's minimal impact on the performance of
560 your app, so timings reported give you an accurate view of what your app is
561 doing.</p>
562
563 <p>You can visualize app-specific events in a timeline in the Systrace output
564 file and analyze the events in the context of other kernel and user space trace
565 data. Together with existing Systrace tags, custom app sections can give you new
566 ways to understand the performance and behavior of your apps.</p>
567
568 <div style="float:right;margin:6px 0px 0px 32px;width:380px;">
569 <img src="{@docRoot}images/jb-gpu-profile-clk-n4.png" alt="" width="180" style="margin-bottom:0;">
570 <img src="{@docRoot}images/jb-gpu-profile-cal-n4.png" alt="" width="180" style="margin-bottom:0;padding-left:10px;">
571 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">On-screen GPU profiling in Android 4.3.</p>
572 </div>
573
574 <h4 id="43-gpu-profiling" >On-screen GPU profiling</h4>
575
576 <p>Android 4.3 adds new developer options to help you analyze your app’s
577 performance and pinpoint rendering issues on any device or emulator.</p>
578
579 <p>In the <strong>Profile GPU rendering</strong> option you can now visualize
580 your app’s effective framerate on-screen, while the app is running. You can
581 choose to display profiling data as on-screen <strong>bar or line
582 graphs</strong>, with colors indicating time spent creating drawing commands
583 (blue), issuing the commands (orange), and waiting for the commands to complete
584 (yellow). The system updates the on-screen graphs continuously, displaying a
585 graph for each visible Activity, including the navigation bar and notification
586 bar. </p>
587
588 <p>A green line highlights the <strong>60ms threshold</strong> for rendering
589 operations, so you can assess the your app’s effective framerate relative
590 to a 60 fps goal. If you see operations that cross the green line, you
591 can analyze them further using Systrace and other tools.</p>
592
593 <p class="caution" style="clear:both">On devices running Android 4.2 and higher,
594 developer options are hidden by default. You can reveal them at any time by
595 tapping 7 times on <strong>Settings &gt; About phone &gt; Build number</strong>
596 on any compatible Android device.</p>
597
598 <h4 id="43-strictmode">StrictMode warning for file URIs</h4>
599
600 <p>The latest addition to the StrictMode tool is a policy constraint that warns
601 when your app exposes a <code>file://</code> URI to the system or another app.
602 In some cases the receiving app may not have access to the <code>file://</code>
603 URI path, so when sharing files between apps, a <code>content://</code> URI should
604 be used (with the appropriate permission). This new policy helps you catch and fix
605 such cases. If you’re looking for a convenient way to store and expose files to other
606 apps, try using the <code>FileProvider</code> content provider that’s available
607 in the <a href="{@docRoot}tools/support-library/index.html">Support Library</a>.</p>
608
609 </div><!-- END ANDROID 4.3 -->
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634 <!-- BEGIN ANDROID 4.2 -->
635 <div id="android-42" class="version-section">
636 <div style="float:right;padding:0px 0px 12px 34px;">
637 <div>
638 <img src="{@docRoot}images/jb-device-2.png" alt="Android 4.2 on phone and tablet" height="348" width="400">
639 </div>
640 </div>
641 <p>Welcome to Android 4.2, the latest version of <span
642 style="white-space:nowrap;">Jelly Bean!</span></p>
643
644 <p>Android 4.2 has performance optimizations, a refreshed system UI, and great
645 new features for users and developers. This document provides a glimpse of what's new for
646 developers.
647
648 <p>See the <a href="{@docRoot}about/versions/android-4.2.html">Android 4.2 APIs</a>
649 document for a detailed look at the new developer APIs.</p>
650
651 <p>Find out more about the new Jelly Bean features for users at <a
652 href="http://www.android.com/whatsnew">www.android.com</a>.</p>
653
654
655 <h2 id="42-performance" style="line-height:1.25em;">Faster, Smoother, More Responsive</h2>
656
657 <p>Android 4.2 builds on the performance improvements already included in Jelly Bean
658 &mdash; <strong>vsync timing</strong>, <strong>triple buffering</strong>,
659 <strong>reduced touch latency</strong>, and <strong>CPU input boost</strong>
660 &mdash; and adds new optimizations that make Android even faster.</p>
661
662 <p>Improvements in the <strong>hardware-accelerated 2D renderer</strong> make
663 common animations such as scrolling and swiping smoother and faster. In
664 particular, <strong>drawing is optimized</strong> for layers, clipping and
665 certain shapes (rounded rects, circles and ovals).</p>
666
667 <p>A variety of <strong>WebView rendering optimizations</strong> make scrolling
668 of web pages smoother and free from jitter and lags.</p>
669
670 <p>Android’s <strong>Renderscript Compute</strong> is the first computation
671 platform ported to run directly on a <strong>mobile device GPU</strong>. It automatically
672 takes advantage of <strong>GPU computation</strong> resources whenever possible,
673 dramatically improving performance for graphics and image processing. Any app using
674 Renderscript on a supported device can benefit immediately from
675 this GPU integration <strong>without recompiling</strong>.</p>
676
677
678 <div style="float:left;margin:16px 24px 12px 0px;">
679 <a href="" target="_android">
680 <img src="{@docRoot}images/jb-nexus10-1.png" alt="10-inch tablet running Android 4.2" width="380" height="281" /></a>
681 </div> 
682
683 <h2 id="42-ui" style="margin-top:2em;">Refined, refreshed UI</h2>
684
685 <p>Android 4.2 refines the Jelly Bean user experience and brings familiar
686 Android UI patterns such as status bar, system bar, and notifications window to
687 all tablets.</p>
688
689 <p>All screen sizes now feature the <strong>status bar</strong> on top, with
690 pull-down access to <strong>notifications</strong> and a new <strong>Quick
691 Settings</strong> menu. The familiar </strong>system bar</strong> appears on the
692 bottom, with buttons easily accessible from either hand. The <strong>Application
693 Tray</strong> is also available on all screen sizes.</p>
694
695
696 <h2 id="42-multiuser" style="margin-top:2em;clear:left;">One tablet, many users</h2>
697
698 <p>Now several users can <strong>share a single Android tablet</strong>, with
699 each user having convenient access to a <strong>dedicated user
700 space</strong>. Users can switch to their spaces with a single touch from the
701 lock screen.</p>
702
703 <p>On a multiuser device, Android gives each user a separate environment,
704 including user-specific emulated SD card storage. Users also have their own
705 homescreens, widgets, accounts, settings, files, and apps, and the system keeps
706 these separate. All users share core system services, but the system ensures that
707 each user's applications and data remain isolated. In effect, each of the multiple
708 users has his or her own Android device.</p>
709
710 <p>Users can install and uninstall apps at any time in their own environments.
711 To save storage space, Google Play downloads an APK only if it's not already
712 installed by another user on the device. If the app is already installed, Google
713 Play records the new user's installation in the usual way but doesn't download
714 another copy of the app. Multiple users can run the same copy of an APK because
715 the system creates a new instance for each user, including a user-specific data
716 directory.</p>
717
718 <p>For developers, <strong>multi-user support is transparent</strong> &mdash;
719 your apps do not need to do anything special to run normally in a multi-user
720 environment and there are no changes you need to make in your existing or
721 published APKs. The system manages your app in each user space just as it does
722 in a single-user environment. </p>
723
724
725 <h2 id="42-engagement" style="clear:left; margin-top:1em;">New ways to engage users</h2>
726
727 <div style="float:right;margin:22px 0px 0px 24px;width:280px;">
728 <div>
729 <img src="{@docRoot}images/jb-lock-calendar.png" alt="Calendar lock screen widget" width="280" height="543" style="padding-left:1em;margin-bottom:0">
730 </div>
731 <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;">You can extend <strong>app widgets</strong> to run on the lock screen, for instant access to your content.</p>
732 </div>
733
734 <h3 id="42-lockscreen-widgets">Lock screen widgets</h3>
735
736 <p>In Android 4.2, users can place <strong>app widgets</strong> directly on
737 their <strong>lock screens</strong>, for instant access to favorite app content
738 without having to unlock. Users can add as many as five lock screen widgets,
739 choosing from widgets provided by installed apps. The lock screen displays each
740 widget in its own panel, letting users swipe left and right to view different
741 panels and their widgets.</p>
742
743 <p>Like all app widgets, lock screen widgets can display <strong>any kind of content</strong> and
744 they can accept direct user interaction. They can be entirely self-contained,
745 such as a widget that offers controls to play music, or they can let users jump
746 straight to an Activity in your app, after unlocking along the way as
747 needed.</p>
748
749 <p>For developers, lock screen widgets offer a great new way to engage users.
750 They let you put your content in front of users in a location they’ll see often,
751 and they give you more opportunities to bring users directly into your app.</p>
752
753 <p>You can take advantage of this new capability by building a new app widget or
754 by extending an existing home screen widget. If your app already includes home
755 screen widgets, you can extend them to the lock screen with minimal change. To
756 give users an optimal experience, you can update the widget to use the full lock
757 screen area when available and resize when needed on smaller screens. You can
758 also add features to your widgets that might be especially useful or convenient
759 on the lock screen.</p>
760
761 <h3 id="42-daydreams">Daydream</h3>
762
763 <p>Daydream is an <strong>interactive screensaver mode</strong> that starts when
764 a user’s device is docked or charging. In this mode, the system launches a
765 daydream &mdash; a remote content service provided by an installed app &mdash;
766 as the device screensaver. A user can enable Daydream from the Settings app and
767 then choose the daydream to display.</p>
768
769 <p>Daydreams combine the best capabilities of live wallpapers and home screen
770 widgets, but they are more powerful. They let you offer the any kind of content
771 in a completely new context, with user interactions such as flipping through
772 photos, playing audio or video, or jumping straight into your app with a single
773 touch.</p>
774
775 <p>Because daydreams can start automatically when a device is charging or
776 docked, they also give your app a great way to support new types of user
777 experiences, such as leanback or exhibition mode, demo or kiosk mode, and
778 "attract mode" &mdash; all without requiring special hardware.</p>
779
780 <div style="float:left;margin:20px 30px 0px 0px;width:460px;">
781 <div>
782 <img src="{@docRoot}images/jb-dream-1.png" alt="Daydream screensaver mode" height="300" style="padding-left:1em;">
783 </div>
784 <p class="image-caption" style="padding:.5em .5em .5em 1.5em;"><span
785 style="font-weight:500;">Daydream</span> lets you create powerful interactive screensavers that display any kind of content.</p>
786 </div>
787
788 <p>Daydreams are similar to Activities and can do anything that Activity
789 can do &mdash; from rendering a UI hierarchy (without using RemoteViews) to
790 drawing directly using Canvas, OpenGL, SurfaceTexture, and more. They can play
791 video and audio and they can even accept direct user interaction. However,
792 daydreams are not Activities, so they don’t affect the backstack or appear in
793 Recents and they cannot be launched directly from your app.</p>
794
795 <p>Implementing a daydream is straightforward and you can take advantage of UI
796 components and resources that you’ve already created for other parts of your
797 app. You can provide multiple daydreams in your app and you can offer distinct
798 content and display settings for each.</p>
799
800 <h2  id="42-external-display" style="clear:left;">External display support</h2>
801
802 <p>Android 4.2 introduces platform support for <strong>external
803 displays</strong> that goes far beyond mirroring &mdash; apps can now target
804 unique content to any one or multiple displays that are attached to an Android
805 device. Apps can build on this to deliver new kinds of interaction and
806 entertainment experiences to users.</p>
807
808 <h3 id="42-display-manager">Display manager</h3>
809
810 <p>Apps interact with displays through a new display manager system service.
811 Your app can enumerate the displays and check the capabilities of each,
812 including size, density, display name, ID, support for secure video, and more.
813 Your app can also receive callbacks when displays are added or removed or when
814 their capabilities change, to better manage your content on external
815 displays.</p>
816
817 <h3 id="42-presentation">Presentation window</h3>
818
819 <p>To make it easy to show content on an external display, the framework
820 provides a new UI object called a <strong>Presentation</strong> &mdash; a type of dialog that
821 represents a window for your app’s content on a specific external display. Your
822 app just gives the display to use, a theme for the window, and any unique
823 content to show. The Presentation handles inflating resources and rendering your
824 content according to the characteristics of the targeted display.</p>
825
826 <div style="margin:0 auto;width:569px;padding-top:1em;">
827
828 <img src="{@docRoot}images/external-display.png" alt="" width="555" height="351" style="padding-left:1em;margin-bottom:0">
829
830 <p class="image-caption" style="padding:1.25em">You can take full control of two or more independent displays using <strong>Presentation</strong>.</p>
831 </div>
832
833 <p>A Presentation gives your app full control over the remote display window and
834 its content and lets you manage it based on user input events such as key
835 presses, gestures, motion events, and more. You can use all of the normal tools
836 to create a UI and render content in the Presentation, from building an
837 arbitrary view hierarchy to using SurfaceView or SurfaceTexture to draw directly
838 into the window for streamed content or camera previews.</p>
839
840 <h3 id="42-preferred display">Preferred display selection</h3>
841
842 <p>When multiple external displays are available, you can create as many
843 Presentations as you need, with each one showing unique content on a specific
844 display. In many cases, you might only want to show your content on a single
845 external display &mdash; but always on the that’s best for Presentation content.
846 For this, the system can help your app choose the best display to use.</p>
847
848 <p>To find the best display to use, your app can query the display manager for
849 the system’s <strong>preferred Presentation display</strong> and receive callbacks when that
850 display changes. Alternatively, you can use the media router service, extended
851 in Android 4.2, to receive notifications when a system video route changes. Your
852 app can display content by default in the main Activity until a preferred
853 Presentation display is attached, at which time it can automatically switch to
854 Presentation content on the preferred display. Your apps can also use media
855 router’s MediaRouteActionProvider and MediaRouteButton to offer standard
856 display-selection UI.</p>
857
858 <h3 id="42-protected-content">Protected content</h3>
859
860 <p>For apps that handle protected or encrypted content, the display API now
861 reports the <strong>secure video capabilities</strong> of attached displays. Your app query a
862 display to find out if it offers a secure video output or provides protected
863 graphics buffers and then choose the appropriate content stream or decoding to
864 make the content viewable. For additional security on SurfaceView objects, your
865 app can set a secure flag to indicate that the contents should never appear in
866 screenshots or on a non-secure display output, even when mirrored.</p>
867
868 <h3 id="42-wireless-display">Wireless display</h3>
869
870 <p>Starting in Android 4.2, users on supported devices can connect to an
871 external display over Wi-Fi, using <a
872 href="http://www.wi-fi.org/wi-fi-certified-miracast%E2%84%A2">Miracast</a>, a
873 peer-to-peer wireless display standard created by the <a
874 href="http://www.wi-fi.org/">Wi-Fi Alliance</a>. When a wireless display is
875 connected, users can stream any type of content to the big screen, including
876 photos, games, maps, and more.</p>
877
878 <p>Apps can take advantage of <strong>wireless displays</strong> in the same way as they do other
879 external displays and no extra work is needed. The system manages the network
880 connection and streams your Presentation or other app content to the wireless
881 display as needed.</p>
882
883
884 <h2 id="42-native-rtl">Native RTL support</h2>
885
886 <div style="float:right;margin:22px 0px 0px 24px;width:340px;">
887 <div>
888 <img src="{@docRoot}images/jb-rtl.png" alt="RTL layout mirroring" width="340" height="457" style="margin-bottom:0;">
889 </div>
890 <p class="image-caption" style="padding-top:1em">Developers can now <strong>mirror their layouts</strong> for RTL languages.</p>
891 </div>
892
893 <p>Android 4.2 introduces <strong>full native support for RTL</strong>
894 (right-to-left) layouts, including layout mirroring. With native RTL support,
895 you can deliver the same great app experience to all of your users, whether
896 their language uses a script that reads right-to-left or one that reads
897 left-to-right.</p>
898
899 <p>When the user switches the system language to a right-to-left script, the
900 system now provides automatic mirroring of app UI layouts and all view widgets,
901 in addition to bidi mirroring of text elements for both reading and character
902 input.</p>
903
904 <p>Your app can take advantage of <strong>RTL layout mirroring</strong> in your app with minimal effort.
905 If you want the app to be mirrored, you simply declare a new attribute in your
906 app manifest and change all "left/right" layout properties to new "start/end"
907 equivalents. The system then handles the mirroring and display of your UI as
908 appropriate.</p>
909
910 <p>For precise control over your app UI, Android 4.2 includes new APIs that let
911 you manage layout direction, text direction, text alignment, gravity, and 
912 locale direction in View components. You can even create custom versions of
913 layout, drawables, and other resources for display when a right-to-left script
914 is in use.</p>
915
916 <p>To help you debug and optimize your custom right-to-left layouts, the
917 HierarchyViewer tool now lets you see start/end properties, layout direction,
918 text direction, and text alignment for all the Views in the hierarchy.</p>
919
920
921 <h2 id="42-intl">Enhancements for international languages</h2>
922
923 <p>Android 4.2 includes a variety of <strong>font and character
924 optimizations</strong> for international users:</p>
925 <ul>
926 <li>For Korean users, a new font choice is available &mdash; Nanum (나눔글꼴)
927 Gothic, a unicode font designed especially for the Korean-language script.</li>
928 <li>Improved support for Japanese vertical text displayed in WebViews.</li>
929 <li>Improved font kerning and positioning for Indic, Thai, Arabic, and Hebrew
930 default fonts.</li>
931 </ul>
932
933 <p>The default Android keyboard also includes an updated set of
934 dictionaries:</p>
935 <ul>
936 <li>Improved dictionaries for French (with bigram support), English, and
937 Russian</li>
938 <li>New dictionaries for Danish, Greek, Finnish, Lithuanian, Latvian, Polish,
939 Slovenian, Serbian, Swedish, Turkish</li>
940 </ul>
941
942
943 <h2 id="42-ui-tools">New ways to create beautiful UI</h2>
944
945 <h3 id="42-nested-fragments">Nested Fragments</h3>
946
947 <p>For more control over your UI components and to make them more modular,
948 Android 4.2 lets you <strong>nest Fragments inside of Fragments</strong>. For
949 any Fragment, a new Fragment manager lets you insert other Fragments as child
950 nodes in the View hierarchy.</p>
951
952 <p>You can use nested Fragments in a variety of ways, but they are especially
953 useful for implementing dynamic and reusable UI components inside of a UI
954 component that is itself dynamic and reusable. For example, if you use ViewPager
955 to create fragments that swipe left and right, you can now insert fragments into
956 each Fragment of the view pager.</p>
957
958 <p>To let you take advantage of nested Fragments more broadly in your app, this
959 capability is added to the latest version of the <strong>Android Support
960 Library</strong>.</p>
961
962
963 <h2 id="42-accessibility">Accessibility</h2>
964
965 <p>The system now helps accessibility services <strong>distinguish between touch
966 exploration and accessibility gestures</strong> while in touch-exploration mode.
967 When a user touches the screen, the system notifies the service that a generic
968 touch interaction has started. It then tracks the speed of the touch interaction
969 and determines whether it is a touch exploration (slow) or accessibility gesture
970 (fast) and notifies the service. When the touch interaction ends, the system
971 notifies the service.</p>
972
973 <p>The system provides a new global accessibility option that lets an
974 accessibility service open the Quick Settings menu based on an action by the
975 user. Also added in Android 4.2 is a new accessibility feedback type for
976 <strong>Braille devices</strong>.</p>
977
978 <p>To give accessibility services insight into the meaning of Views for
979 accessibility purposes, the framework provides new APIs for associating a View
980 as the label for another View. The label for each View is available to
981 accessibility services through AccessibilityNodeInfo.</p>
982
983
984 <h2 id="42-camera">Improved Camera with HDR</h2>
985
986 <p>Android 4.2 introduces a <strong>new camera hardware interface and
987 pipeline</strong> for improved performance. On supported devices, apps can use a
988 new <strong>HDR camera scene mode</strong> to capture an image using high
989 dynamic range imaging techniques. </p>
990
991 <p>Additionally, the framework now provides an API to let apps check whether the
992 camera shutter sound can be disabled. Apps can then let the user disable the
993 sound or choose an alternative sound  in place of the standard shutter sound,
994 which is recommended.</p>
995
996
997 <h2 id="42-renderscript">Renderscript Computation</h2>
998
999 <p>In Android 4.2, Renderscript Compute introduces new scripting features, new
1000 optimizations, and direct GPU integration for the highest performance in
1001 computation operations.</p>
1002
1003 <h3 id="42-filterscript">Filterscript</h3>
1004
1005 <p>Filterscript is a subset of Renderscript that is focused on <strong>optimized
1006 image processing across a broad range of device chipsets</strong>. Developers
1007 can write their image processing operations in Filterscript using the standard
1008 Renderscript runtime API, but within stricter constraints that ensure wider
1009 compatibility and improved optimization across CPUs, GPUs, and DSPs.</p>
1010
1011 <p>Filterscript is ideal for hardware-accelerating simple image-processing and
1012 computation operations such as those that might be written for OpenGL ES
1013 fragment shaders. Because it places a relaxed set of constraints on hardware,
1014 your operations are optimized and accelerated on more types of device chipsets. 
1015 Any app targeting API level 17 or higher can make use of Filterscript.</p>
1016
1017 <h3 id="42-rs-intrinsics">Script intrinsics</h3>
1018
1019 <p>In Android 4.2, Renderscript adds support for a set of script intrinsics
1020 &mdash; pre-implemented <strong>filtering primitives that are
1021 accelerated</strong> to reduce the amount of code that you need to write and to
1022 ensure that your app gets the maximum performance gain possible.</p>
1023
1024 <p>Intrinsics are available for blends, blur, color matrix, 3x3  and 5x5 convolve,
1025 per-channel lookup table, and converting an Android YUV buffer to RGB.</p>
1026
1027 <h3 id="42-rs-groups">Script groups</h3>
1028
1029 <p>You can now create <strong>groups of Renderscript scripts</strong> and
1030 execute them all with a single call as though they were part of a single script.
1031 This allows Renderscript to optimize execution of the scripts in ways that it
1032 could not do if the scripts were executed individually.</p>
1033
1034 <div style="float:right;padding-top:1em;width:400px;margin-left:2em;">
1035 <img src="{@docRoot}images/jb-rs-chart-versions.png" alt="Renderscipt optimizations chart" width="360" height="252"
1036 style="border:1px solid #ddd;border-radius: 6px;" />
1037 <p style="image-caption">Renderscript image-processing 
1038 benchmarks run on different Android platform versions (Android 4.0, 4.1, and 4.2)
1039 in CPU only on a Galaxy Nexus device.</p>
1040 <img src="{@docRoot}images/jb-rs-chart-gpu.png" style="border:1px solid #ddd;border-radius: 6px; alt="" width="360" height="252" />
1041 <p style="image-caption">Renderscript image-processing benchmarks comparing operations run with GPU + CPU to those run in CPU only on the same Nexus 10 device.</p>
1042 </div>
1043
1044 <p>If you have a directed acyclic graph of Renderscript operations to run, you can
1045 use a builder class to create a script group defining the operations. At
1046 execution time, Renderscript optimizes the run order and the connections between
1047 these operations for best performance.</p>
1048
1049
1050 <h3 id="42-rs-optimization">Ongoing optimization improvements</h3>
1051
1052 <p>When you use Renderscript for computation operations, you apps benefit from
1053 <strong>ongoing performance and optimization improvements</strong> in the
1054 Renderscript engine itself, without any impact on your app code or any need for
1055 recompilation.</p>
1056
1057 <p>As optimization improves, your operations execute faster and on more
1058 chipsets, without any work on your part. The chart at right highlights
1059 the performance gain delivered by ongoing Renderscript optimization improvements
1060 across successive versions of the Android platform.</p>
1061
1062 <h3 id="42-gpu-compute">GPU Compute</h3>
1063
1064 <p>Renderscript Compute is the first computation platform ported to run directly on a mobile device GPU. It now
1065 automatically takes advantage of <strong>GPU computation</strong> resources
1066 whenver possible to improve performance. With GPU integration, even the most
1067 complex computations for graphics or image processing can execute with
1068 dramatically improved performance.</p>
1069
1070 <p>Any app using Renderscript on a supported device can benefit immediately from
1071 this GPU integration, without recompiling. The Nexus 10 tablet is the first
1072 device to support this integration.</p>
1073
1074 <h2  id="42-dev-options" style="clear:right;margin-top:1em;">New built-in developer options</h2>
1075
1076 <p>The Android 4.2 system includes a variety of new developer options that make
1077 it easier to create great looking apps that perform well. The new options expose
1078 features for <strong>debugging and profiling</strong> your app from any device
1079 or emulator.</p>
1080
1081 <p class="caution" style="clear:right;">On devices running Android 4.2,
1082 developer options are hidden by default, helping to create a better experience
1083 for users. You can reveal the developer options at any time by tapping 7 times
1084 on <strong>Settings</strong> > <strong>About phone</strong> > <strong>Build
1085 number</strong> on any compatible Android device.</p>
1086
1087 <div style="float:left;margin:20px 42px 0px 0px;width:290px;">
1088 <div>
1089 <img src="{@docRoot}images/jb-dev-options-device.png" width="280" height="548">
1090 </div>
1091 <p class="image-caption" style="padding:.5em">New <span
1092 style="font-weight:500;">developer options</span> give you more ways to profile and debug on a device.</p>
1093 </div>
1094
1095 <p style="margin-top:2em;">New developer options in Android 4.2 include:</p>
1096
1097 <ul>
1098 <li><strong>Take bug report</strong> &mdash; immediately takes a screen shot and
1099 dumps device state information to local file storage, then attaches them to a
1100 new outgoing email message.</li>
1101 <li><strong>Power menu bug reports</strong> &mdash; Adds a new option to the
1102 device power menu and quick settings to take a bug report (see above).</li>
1103 <li><strong>Verify apps over usb</strong> &mdash; Allows you to disable app
1104 checks for sideloading apps over USB, while still checking apps from other
1105 sources like the browser. This can speed up the development process while
1106 keeping the security feature enabled.</li>
1107 <li><strong>Show hardware layers updates</strong> &mdash; Flashes hardware
1108 layers green when they update.</li>
1109 <li><strong>Show GPU overdraw</strong> &mdash; Highlights GPU overdraw
1110 areas.</li>
1111 <li><strong>Force 4x MSAA</strong> &mdash; Enables 4x MSAA in Open GL ES 2.0
1112 apps.</li>
1113 <li><strong>Simulate secondary displays</strong> &mdash; Creates one or more
1114 non-secure overlay windows on the current screen for use as a simulated remote
1115 display. You can control the simulated display’s size and density.</li>
1116 <li><strong>Enable OpenGL traces</strong> &mdash; Lets you trace OpenGL
1117 execution using Logcat, Systrace, or callstack on glGetError.</li>
1118 </ul>
1119
1120 <h2 id="42-platform-tech" style="padding-top:1em;clear:left;">New Platform Technologies</h2>
1121
1122 <p>Android 4.2 includes a variety of new and <strong>enhanced platform technologies</strong> to
1123 support innovative communications use-cases across a broad range of hardware
1124 devices. In most cases, the new platform technologies and enhancements do not directly
1125 affect your apps, so you can benefit from them without any modification.</p>
1126
1127 <h3 id="42-security">Security enhancements</h3>
1128
1129 <p>Every Android release includes dozens of security enhancements to protect
1130 users.  Here are some of the enhancements in Android 4.2:</p>
1131
1132 <ul>
1133 <li><strong>Application verification</strong> &mdash; Users can choose to enable
1134 “Verify Apps" and have applications screened by an application verifier, prior
1135 to installation.  App verification can alert the user if they try to install an
1136 app that might be harmful; if an application is especially bad, it can block
1137 installation.</li>
1138 <li><strong>More control of premium SMS</strong> &mdash; Android will provide a
1139 notification if an application attempts to send SMS to a short code that uses
1140 premium services which might cause additional charges.  The user can choose
1141 whether to allow the application to send the message or block it.</li>
1142 <li><strong>Always-on VPN</strong> &mdash;  VPN can be configured so that
1143 applications will not have access to the network until a VPN connection is
1144 established.  This prevents applications from sending data across other
1145 networks.</li>
1146 <li><strong>Certificate Pinning</strong> &mdash; The libcore SSL implementation
1147 now supports certificate pinning.  Pinned domains will receive a certificate
1148 validation failure if the certificate does not chain to a set of expected
1149 certificates.  This protects against possible compromise of Certificate
1150 Authorities.</li>
1151 <li><strong>Improved display of Android permissions</strong> &mdash; Permissions
1152 have been organized into groups that are more easily understood by users. 
1153 During review of the permissions, the user can click on the permission to see
1154 more detailed information about the permission.</li>
1155 <li><strong>installd hardening</strong> &mdash; The installd daemon does not run
1156 as the root user, reducing potential attack surface for root privilege
1157 escalation.</li>
1158 <li><strong>init script hardening</strong> &mdash;  init scripts now apply
1159 O_NOFOLLOW semantics to prevent symlink related attacks.</li>
1160 <li><strong>FORTIFY_SOURCE</strong> &mdash;  Android now implements
1161 FORTIFY_SOURCE. This is used by system libraries and applications to prevent
1162 memory corruption.</li>
1163 <li><strong>ContentProvider default configuration</strong> &mdash; Applications
1164 which target API level 17 will have “export” set to “false” by default for each
1165 ContentProvider, reducing default attack surface for applications.</li>
1166 <li><strong>Cryptography</strong> &mdash; Modified the default implementations
1167 of SecureRandom and Cipher.RSA to use OpenSSL.  Added  SSLSocket support for
1168 TLSv1.1 and TLSv1.2 using OpenSSL 1.0.1</li>
1169 <li><strong>Security Fixes</strong> &mdash; Upgraded open source libraries with
1170 security fixes include WebKit, libpng, OpenSSL, and LibXML. Android 4.2 also
1171 includes fixes for Android-specific vulnerabilities. Information about these
1172 vulnerabilities has been provided to Open Handset Alliance members and fixes are
1173 available in Android Open Source Project.  To improve security, some devices
1174 with earlier versions of Android may also include these fixes.</li>
1175 </ul>
1176
1177 <h3 id="42-bt-stack">New Bluetooth stack</h3>
1178
1179 Android 4.2 introduces a new Bluetooth stack optimized for use with Android
1180 devices. The new Bluetooth stack developed in collaboration between Google and
1181 Broadcom replaces the stack based on BlueZ and provides improved compatibility
1182 and reliability.
1183
1184 <h3 id="42-audio">Low-latency audio</h3>
1185
1186 <p>Android 4.2 improves support for low-latency audio playback, starting from the
1187 improvements made in Android 4.1 release for audio output latency using OpenSL
1188 ES, Soundpool and tone generator APIs. These improvements depend on hardware
1189 support &mdash; devices that offer these low-latency audio features can
1190 advertise their support to apps through a hardware feature constant. New
1191 AudioManager APIs are provided to query the native audio sample rate and buffer
1192 size, for use on devices which claim this feature.</p>
1193
1194 <h3 id="42-camera-interface">New camera hardware interface</h3>
1195
1196 Android 4.2 introduces a new implementation of the camera stack. The camera
1197 subsystem includes the implementations for components in the camera pipeline
1198 such as burst mode capture with processing controls.
1199
1200 <h3 id="42-nfc-interface">New NFC hardware interface and controller interface</h3>
1201
1202 Android 4.2 introduces support for controllers based on the NCI standard from
1203 the NFC-Forum. NCI provides a standard communication protocol between an NFC
1204 Controller (NFCC) and a device Host, and the new NFC stack developed in
1205 collaboration between Google and Broadcom supports it.  
1206
1207 <h3 id="42-dalvik">Dalvik runtime optimizations</h3>
1208
1209 <p>The Dalvik runtime includes enhancements for performance and security across
1210 a wider range of architectures:</p>
1211 <ul>
1212 <li>x86 JIT support from Intel and MIPS JIT support from MIPS</li>
1213 <li>Optimized garbage-collection parameters for devices with > 512MB</li>
1214 <li>Default implementations of SecureRandom and Cipher.RSA now use OpenSSL</li>
1215 <li>SSLSocket support for TLSv1.1 and TLSv1.2 via OpenSSL 1.0.1</li>
1216 <li>New intrinsic support for StrictMath methods abs, min, max, and sqrt</li>
1217 <li>BouncyCastle updated to 1.47</li>
1218 <li>zlib updated to 1.27</li>
1219 <li>dlmalloc updated to 2.8.6</li>
1220 </ul>
1221
1222 </div> <!-- END ANDROID 4.2 -->
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247 <!-- BEGIN ANDROID 4.1 -->
1248 <div id="android-41" class="version-section">
1249
1250 <div style="float:right;width:320px;padding:0px 0px 0px 34px;clear:both">
1251 <div>
1252 <img src="{@docRoot}images/jb-android-4.1.png" height="426" width="320">
1253 </div>
1254 </div>
1255 <p>Welcome to Android 4.1 the first version of Jelly Bean!</p>
1256
1257 <p>Android 4.1 is the fastest and smoothest version of Android yet. We’ve made 
1258 improvements throughout the platform and added great new features
1259 for users and developers. This document provides a glimpse of what's new for developers.
1260
1261 <p>See the <a href="{@docRoot}about/versions/android-4.1.html">Android 4.1 APIs</a> document for a detailed look at the new developer APIs.</p>
1262
1263 <p>Find out more about the Jelly Bean features for users at <a href="http://www.android.com/whatsnew">www.android.com</a>.</p>
1264
1265
1266 <h2 id="performance">Faster, Smoother, More Responsive</h2>
1267
1268 <p>Android 4.1 is optimized to deliver Android's best performance and lowest touch latency, in an effortless, intuitive UI.</p>
1269
1270 <p>To ensure a consistent framerate, Android 4.1 extends <strong>vsync timing</strong> across all drawing and animation done by the Android framework. Everything runs in lockstep against a 16 millisecond vsync heartbeat &mdash; application rendering, touch events, screen composition, and display refresh &mdash; so frames don’t get ahead or behind.</p>
1271
1272 <p>Android 4.1 also adds <strong>triple buffering</strong> in the graphics pipeline, for more consistent rendering that makes everything feel smoother, from scrolling to paging and animations.</p>
1273
1274 <p>Android 4.1 reduces touch latency not only by <strong>synchronizing touch</strong> to vsync timing, but also by actually <strong>anticipating</strong> where your finger will be at the time of the screen refresh. This results in a more reactive and uniform touch response. In addition, after periods of inactivity, Android applies a <strong>CPU input boost</strong> at the next touch event, to make sure there’s no latency.</p>
1275
1276 <p><strong>Tooling</strong> can help you get the absolute best performance out of your apps. Android 4.1 is designed to work with a new tool called <strong>systrace</strong>, which collects data directly from the Linux kernel to produce an overall picture of system activities. The data is represented as a group of vertically stacked time series graphs, to help isolate rendering interruptions and other issues. The tool is available now in the <a href="{@docRoot}tools/index.html">Android SDK</a> (Tools R20 or higher)</p>
1277
1278
1279 <div style="float:left;margin:12px 24px 0px 0px;">
1280 <img src="{@docRoot}images/jb-accessibility-focus-250.png" width="240px" height="469">
1281 </div>
1282
1283 <div style="width:85%;padding-top:16px;">
1284 <h2 id="accessibility">Enhanced Accessibility</h2>
1285
1286 <p>New APIs for accessibility services let you handle gestures and manage <strong>accessibility focus</strong> as the user moves through the on-screen elements and navigation buttons using accessibility gestures, accessories, and other input. The Talkback system and explore-by-touch are redesigned to use accessibility focus for easier use and offer a complete set of APIs for developers.</p>
1287
1288 <p>Accessibility services can link their own <strong>tutorials</strong> into the Accessibility settings, to help users configure and use their services.</p>
1289
1290 <p>Apps that use standard View components <strong>inherit support</strong> for the new accessibility features automatically, without any changes in their code. Apps that use custom Views can use new accessibility node APIs to indicate the parts of the View that are of interest to accessibility services. </p>
1291
1292 </div>
1293
1294 <div style="clear:both;padding-top:1px;">
1295
1296 <h2 id="intl">Support for International Users</h2>
1297
1298 <div style="clear:both;padding-top:16px;float:right;">
1299
1300 <div style="float:right;margin-left:18px;fpadding-top:90px;padding-bottom:60px">
1301 <img src="{@docRoot}images/jb-r2l.png" width="280" height="356">
1302 </div>
1303 </div>
1304
1305 <h3>Bi-Directional Text and Other Language Support</h3>
1306
1307 <p>Android 4.1 helps you to reach more users through support for <strong>bi-directional text</strong> in TextView and EditText elements. Apps can display text or handle text editing in left-to-right or right-to-left scripts. Apps can make use of new Arabic and Hebrew locales and associated fonts.</p>
1308
1309 <p>Other types of new language support include:</p>
1310 <ul>
1311 <li>Additional Indic languages: Kannada, Telugu, and Malayalam</li>
1312 <li>The new Emoji characters from Unicode version 6.0</li>
1313 <li>Better glyph support for Japanese users (renders Japanese-specific versions of glyphs when system language is set to Japanese)</li>
1314 <li>Arabic glyphs optimized for WebViews in addition to the Arabic glyphs for TextViews</li>
1315 <li>Vertical Text support in WebViews, including Ruby Text and additional Vertical Text glyphs</li>
1316 <li>Synthetic Bold is now available for all fonts that don't have dedicated bold glyphs</li>
1317 </ul>
1318
1319 <h3>User-installable keymaps</h3>
1320
1321 <p>The platform now supports <strong>user-installable keyboard maps</strong>, such as for additional international keyboards and special layout types. By default, Android 4.1 includes 27 international keymaps for keyboards, including Dvorak. When users connect a keyboard, they can go to the Settings app and select one or more keymaps that they want to use for that keyboard. When typing, users can switch between keymaps using a shortcut (ctrl-space).</p>
1322
1323 <p>You can create an app to <strong>publish additional keymaps</strong> to the system. The APK would include the keyboard layout resources in it, based on standard Android keymap format. The application can offer additional keyboard layouts to the user by declaring a suitable broadcast receiver for ACTION_QUERY_KEYBOARD_LAYOUTS in its manifest. </p>
1324 </div>
1325
1326
1327 <h2 id="ui">New Ways to Create Beautiful UI</h2>
1328
1329
1330 <div style="float:right;margin:22px 0px 0px 24px;width:280px;">
1331 <div>
1332 <!-- <img src="{@docRoot}images/jd-notif-cd.png" style="width:200px"> -->
1333 <img src="{@docRoot}images/jb-notif-ex1.png" width="280" height="548">
1334 </div>
1335 <p class="image-caption" style="padding:.5em">Developers can create custom notification styles
1336 like those shown in the examples above to display rich content and actions.</p>
1337 </div>
1338
1339 <h3>Expandable notifications</h3>
1340
1341 <p>Notifications have long been a unique and popular feature on Android. Developers can use them to place important or time-based information in front of users in the notification bar, outside of the app’s normal UI.</p>
1342
1343 <p>Android 4.1 brings a major update to the Android notifications framework. Apps can now display <strong>larger, richer notifications</strong> to users that can be expanded and collapsed with a pinch or swipe. Notifications support <strong>new types of content</strong>, including photos, have configurable priority, and can even include multiple actions.</p>
1344
1345 <p>Through an improved <strong>notification builder</strong>, apps can create notifications that use a larger area, up to 256 dp in height. Three <strong>templated notification styles</strong> are available:</p>
1346
1347 <ul>
1348 <li>BigTextStyle &mdash; a notification that includes a multiline TextView object.</li>
1349 <li>BigInboxStyle &mdash; a notification that shows any kind of list such as messages, headlines, and so on.</li>
1350 <li>BigPictureStyle &mdash; a notification that showcases visual content such as a bitmap.</li>
1351 </ul>
1352
1353 <p>In addition to the templated styles, you can create your own notification styles <strong>using any remote View</strong>.</p>
1354
1355 <p>Apps can add up to three <strong>actions</strong> to a notification, which are displayed below the notification content. The actions let the users respond directly to the information in the notification in alternative ways. such as by email or by phone call, without visiting the app.</p>
1356
1357 <p>With expandable notifications, apps can give more information to the user, effortlessly and on demand. Users remain in control and can long-press any notification to get information about the sender and optionally  disable further notifications from the app.</p>
1358
1359 <div style="float:left;margin:66px 30px 0px 0px;width:280px;">
1360 <div>
1361 <img src="{@docRoot}images/jb-appwidgets.png" width="280" height="548">
1362 </div>
1363 <p class="image-caption" style="padding:.5em"><span
1364 style="font-weight:500;">App Widgets</span> can resize automatically to fit the home screen and load different content as their sizes change.</p>
1365 </div>
1366
1367 <div style="padding-top:1px;clear:right;">
1368
1369
1370 <h3>Resizable app widgets</h3>
1371
1372 <p>Android 4.1 introduces improved App Widgets that can <strong>automatically resize</strong>, based on where the user drops them on the home screen, the size to which the user expands them, and the amount of room available on the home screen. New App Widget APIs let you take advantage of this to <strong>optimize your app widget content</strong> as the size of widgets changes.</p>
1373
1374 <p>When a widget changes size, the system notifies the host app’s widget provider, which can reload the content in the widget as needed. For example, a widget could display larger, richer graphics or additional functionality or options. Developers can still maintain control over maximum and minimum sizes and can update other widget options whenever needed. </p>
1375
1376 <p>You can also supply separate landscape and portrait layouts for your widgets, which the system inflates as appropriate when the screen orientation changes.</p>
1377
1378 <p>App widgets can now be displayed in third party launchers and other host apps through a new bind Intent (AppWidgetManager.ACTION_APPWIDGET_BIND).</p>
1379
1380 </div>
1381
1382 <h3>Simplified task navigation</h3>
1383
1384 <p>Android 4.1 makes it easy for you to manage the “Up” navigation that’s available to users from inside of your apps and helps ensure a consistent experience for users.</p>
1385
1386 <p>You can <strong>define the intended Up navigation</strong> for individual Activity components of your UI by adding a new <strong>XML attribute</strong> in the app’s manifest file. At run time, as Activities are launched, the system extracts the Up navigation tree from the manifest file and automatically creates the Up affordance navigation in the action bar. Developers who declare Up navigation in the manifest no longer need to manage navigation by callback at run time, although they can also do so if needed.</p>
1387
1388 <p>Also available is a new <strong>TaskStackBuilder</strong> class that lets you quickly put together a synthetic task stack to start immediately or to use when an Activity is launched from a PendingIntent. Creating a synthetic task stack is especially useful when users launch Activities from remote views, such as from Home screen widgets and notifications, because it lets the developer provide a managed, consistent experience on Back navigation.</p>
1389
1390 <h3>Easy animations for Activity launch</h3>
1391
1392 <p>You can use a new helper class, <strong>ActivityOptions</strong>, to create and control the animation displayed when you launch your Activities. Through the helper class, you can specify custom animation resources to be used when the activity is launched, or request new zoom animations that start from any rectangle you specify on screen and that optionally include a thumbnail bitmap.</p>
1393
1394 <h3>Transitions to Lights Out and Full Screen Modes</h3>
1395
1396 <p>New system UI flags in View let you to cleanly transition from a normal application UI (with action bar, navigation bar, and system bar visible), to "lights out mode" (with status bar and action bar hidden and navigation bar dimmed) or "full screen mode" (with status bar, action bar, and navigation bar all hidden). </p>
1397
1398 <h3>New types of remoteable Views</h3>
1399
1400 <p>Developers can now use <strong>GridLayout</strong> and <strong>ViewStub</strong> views in Home screen widgets and notifications. GridLayout lets you structure the content of your remote views and manage child views alignments with a shallower UI hierarchy. ViewStub is an invisible, zero-sized View that can be used to lazily inflate layout resources at runtime.</p>
1401
1402 <h3>Live wallpaper preview</h3>
1403
1404 <p>Android 4.1 makes it easier for users to <strong>find and install Live Wallpapers</strong> from apps that include them. If your app includes Live Wallpapers, you can now start an Activity (ACTION_CHANGE_LIVE_WALLPAPER) that shows the user a preview of the Live Wallpaper from your own app. From the preview, users can directly load the Live Wallpaper.</p>
1405
1406 <h3>Higher-resolution contact photos</h3>
1407
1408 <p>With Android 4.1, you can store <strong>contact photos</strong> that are as large as <strong>720 x 720</strong>, making contacts even richer and more personal. Apps can store and retrieve contact photos at that size or use any other size needed. The maximum photo size supported on specific devices may vary, so apps should <strong>query the built-in contacts provider</strong> at run time to obtain the max size for the current device. </p>
1409
1410
1411 <h2 id="input">New Input Types and Capabilities</h2>
1412
1413 <h3>Find out about devices being added and removed</h3>
1414
1415 <p>Apps can <strong>register to be notified</strong> when any new input devices are attached, by USB, Bluetooth, or any other connection type. They can use this information to change state or capabilities as needed. For example, a game could receive notification that a new keyboard or joystick is attached, indicating the presence of a new player.</p>
1416
1417 <h3>Query the capabilities of input devices</h3>
1418
1419 <p>Android 4.1 includes APIs that let apps and games take full advantage of all input devices that are connected and available.</p>
1420
1421 <p>Apps can query the device manager to enumerate all of the input devices currently attached and learn about the capabilities of each.</p>
1422
1423 <h3>Control vibrator on input devices</h3>
1424
1425 <p>Among other capabilities, apps can now make use of any <strong>vibrator service</strong> associated with an attached input device, such as for <strong>Rumble Pak</strong> controllers.</p>
1426
1427
1428 <h2 id="graphics">Animation and Graphics</h2>
1429
1430 <h3>Vsync for apps</h3>
1431
1432 <p>Extending vsync across the Android framework leads to a more consistent framerate and a smooth, steady UI. So that apps also benefit, Android 4.1 <strong>extends vsync timing</strong> to all drawing and animations initiated by apps. This lets them optimize operations on the UI thread and provides a stable timebase for synchronization.</p>
1433
1434 <p>Apps can take advantage of vsync timing for free, through Android’s <strong>animation framework</strong>. The animation framework now uses vsync timing to automatically handle synchronization across animators.</p>
1435
1436 <p>For specialized uses, apps can access vsync timing through APIs exposed by a new Choreographer class. Apps can request invalidation on the next vsync frame &mdash; a good way to schedule animation when the app is not using the animation framework. For more advanced uses, apps can post a callback that the Choreographer class will run on the next frame. </p>
1437
1438 <h3>New animation actions and transition types</h3>
1439
1440 <p>The animation framework now lets you define start and end actions to take when running ViewPropertyAnimator animations, to help synchronize them with other animations or actions in the application. The action can run any runnable object. For example, the runnable might specify another animation to start when the previous one finishes.</p>
1441
1442 <p>You can also now specify that a ViewPropertyAnimator use a layer during the course of its animation. Previously, it was a best practice to animate complicated views by setting up a layer prior to starting an animation and then handling an onAnimationEnd() event to remove the layer when the animation finishes. Now, the withLayer() method on ViewPropertyAnimator simplifies this process with a single method call.</p>
1443
1444 <p>A new transition type in LayoutTransition enables you to automate animations in response to all layout changes in a ViewGroup.</p>
1445
1446
1447 <h2 id="connectivity">New Types of Connectivity</h2>
1448
1449 <h3>Android Beam</h3>
1450
1451 <p>Android Beam is a popular NFC-based technology that lets users instantly share, just by touching two NFC-enabled phones together.</p>
1452
1453 <p>In Android 4.1, Android Beam makes it easier to share images, videos, or other payloads by <strong>leveraging Bluetooth for the data transfer</strong>. When the user triggers a transfer, Android Beam hands over from NFC to Bluetooth, making it really easy to manage the transfer of a file from one device to another.</p>
1454
1455 <h3>Wi-Fi Network Service Discovery</h3>
1456
1457 <p>Android 4.1 introduces support for multicast <strong>DNS-based service discovery</strong>, which lets applications find and connect to services offered by peer devices over Wi-Fi networks &mdash; including mobile devices, printers, cameras, media players, and others. Developers can take advantage of Wi-Fi network service discovery to build cross-platform or multiplayer games and application experiences.</p>
1458
1459 <p>Using the service discovery API, apps can create and register any kind of service, for any other NSD-enabled device to discover. The service is advertised by multicast across the network using a human-readable string identifier, which lets user more easily identify the type of service.  </p>
1460
1461 <p>Consumer devices can use the API to scan and discover services available from devices connected to the local Wi-Fi network. After discovery, apps can use the API to resolve the service to an IP address and port through which it can establish a socket connection.</p>
1462
1463 <p>You can take advantage of this API to build new features into your apps. For example, you could let users connect to a webcam, a printer, or an app on another mobile device that supports Wi-Fi peer-to-peer connections.  </p>
1464
1465 <h3>Wi-Fi Direct Service Discovery</h3>
1466
1467 <p>Ice Cream Sandwich introduced support for Wi-Fi Direct, a technology that lets apps <strong>discover and pair directly</strong>, over a high-bandwidth peer-to-peer connection. Wi-Fi Direct is an ideal way to share media, photos, files and other types of data and sessions, even where there is no cell network or Wi-Fi available.</p>
1468
1469 <p>Android 4.1 takes Wi-Fi Direct further, adding API support for <strong>pre-associated service discovery</strong>. Pre-associated service discovery lets your apps get more useful information from nearby devices about the services they support, before they attempt to connect.  Apps can initiate discovery for a specific service and filter the list of discovered devices to those that actually support the target service or application.</p>
1470
1471 <p>For example, this means that your app could discover only devices that are “printers” or that have a specific game available, instead of discovering all nearby Wi-Fi Direct devices. On the other hand, your app can advertise the service it provides to other devices, which can discover it and then negotiate a connection. This greatly simplifies discovery and pairing for users and lets apps take advantage of Wi-Fi Direct more effectively.</p>
1472
1473 <p>With Wi-Fi Direct service discovery, you can create apps and <strong>multiplayer games</strong> that can share photos, videos, gameplay, scores, or almost anything else &mdash; all without requiring any Internet or mobile network. Your users can connect using only a direct p2p connection, which avoids using mobile bandwidth.</p>
1474
1475 <h3>Network Bandwidth Management</h3>
1476
1477 <p>Android 4.1 helps apps <strong>manage data usage</strong> appropriately when the device is <strong>connected to a metered network</strong>, including tethering to a mobile hotspot. Apps can query whether the current network is metered before beginning a large download that might otherwise be relatively expensive to the user. Through the API, you can now get a clear picture of which networks are sensitive to data usage and manage your network activity accordingly.</p>
1478
1479
1480 <h2 id="media">New Media Capabilities</h2>
1481
1482 <h3>Media codec access</h3>
1483
1484 <p>Android 4.1 provides low-level access to platform hardware and software codecs. Apps can query the system to discover what <strong>low-level media codecs</strong> are available on the device and then and use them in the ways they need. For example, you can now create multiple instances of a media codec, queue input buffers, and receive output buffers in return. In addition, the media codec framework supports protected content. Apps can query for an available codec that is able to play protected content with a DRM solution available on the device.</p>
1485
1486 <h3>USB Audio</h3>
1487
1488 <p>USB audio output support allows hardware vendors to build hardware such as <strong>audio docks</strong> that interface with Android devices. This functionality is also exposed with the Android <strong>Open Accessory Development Kit</strong> (ADK) to give all developers the chance to create their own hardware.</p>
1489
1490 <h3>Audio record triggering</h3>
1491
1492 <p>Android now lets you <strong>trigger audio recording</strong> based on the completion of an audio playback track. This is useful for  situations such as playing back a tone to cue your users to begin speaking to record their voices. This feature helps you sync up recording so you don’t record audio that is currently being played back and prevents recordings from beginning too late.</p>
1493
1494 <h3>Multichannel audio</h3>
1495
1496 <p>Android 4.1 supports <strong>multichannel audio</strong> on devices that have hardware multichannel audio out through the <strong>HDMI port</strong>. Multichannel audio lets you deliver rich media experiences to users for applications such as games, music apps, and video players. For devices that do not have the supported hardware, Android automatically downmixes the audio to the number of channels that are supported by the device (usually stereo).</p>
1497
1498 <p>Android 4.1 also adds built-in support for encoding/decoding AAC 5.1 audio.</p>
1499
1500 <h3>Audio preprocessing</h3>
1501
1502 <p>Developers can apply <strong>preprocessing effects</strong> to audio being recorded, such as to apply noise suppression for improving speech recording quality, echo cancellation for acoustic echo, and auto gain control for audio with inconsistent volume levels. Apps that require high quality and clean audio recording will benefit from these preprocessors.</p>
1503
1504 <h3>Audio chaining</h3>
1505
1506 <p>MediaPlayer supports <strong>chaining audio streams together</strong> to play audio files without pauses. This is useful for apps that require seamless transitions between audio files such as music players to play albums with continuous tracks or games.</p>
1507
1508 <h3 id="media-router">Media Router</h3>
1509
1510 <p>The new APIs MediaRouter, MediaRouteActionProvider, and MediaRouteButton provide standard mechanisms and UI for <strong>choosing where to play media</strong>. Support is built-in for wired headsets and a2dp bluetooth headsets and speakers, and you can add your own routing options within your own app.</p>
1511
1512 <h2 id="renderscript">Renderscript Computation</h2>
1513
1514 <p>Android 4.1 extends Renderscript computation to give you more flexibility. You can now <strong>sample textures</strong> in your Renderscript compute scripts, and <strong>new pragmas</strong> are available to define the floating point precision required by your scripts. This lets you enable <strong>NEON instructions</strong> such as fast vector math operations on the CPU path, that wouldn’t otherwise be possible with the full IEEE 754-2008 standard.</p>
1515
1516 <p>You can now <strong>debug</strong> your Renderscript compute scripts on <strong>x86-based emulator and hardware devices</strong>. You can also define multiple root-style kernels in a single Renderscript source file.</p>
1517
1518
1519 <h2 id="browser">Android Browser and WebView</h2>
1520
1521 <p>In Android 4.1, the Android Browser and WebViews include these enhancements:</p>
1522 <ul>
1523 <li>Better HTML5 video user experience, including touch-to-play/pause and smooth transition from inline to full screen mode. </li>
1524 <li>Improved rendering speed and reduced memory usage for better scrolling and zooming performance.</li>
1525 <li>Improved HTML5/CSS3/Canvas animation performance.</li>
1526 <li>Improved text input.</li>
1527 <li>Updated JavaScript Engine (V8) for better JavaScript performance.</li>
1528 <li>Support for the updated HTML5 Media Capture specification (the "capture" attribute on input type=file elements).</li>
1529 </ul>
1530
1531
1532 <h2 id="google">Google APIs and services</h2>
1533
1534 <p>To extend the capabilities of Android even further, several new services for Android are available.</p>
1535
1536 <h3 id="gcm">Google Cloud Messaging for Android</h3>
1537
1538 <p>Google Cloud Messaging (GCM) is a service that lets developers send <strong>short message data</strong> to their users on Android devices, without needing a proprietary sync solution. </p>
1539
1540 <p>GCM handles all the details of <strong>queuing messages and delivering them</strong> efficiently to the targeted Android devices. It supports message <strong>multicasting</strong> and can reach up to 1000 connected devices simultaneously with a single request. It also supports message <strong>payloads</strong>, which means that in addition to sending tickle messages to an app on the device, developers can send up to 4K of data. </p>
1541
1542 <p>Google Cloud Messaging is completely <strong>free for all developers</strong> and sign-up is easy. See the <a href="{@docRoot}google/gcm/index.html">Google Cloud Messaging</a> page for registration, downloads, and documentation.</p>
1543
1544 <h3>App Encryption</h3>
1545
1546 <p>Starting with Android 4.1, Google Play will help protect application assets by encrypting all paid apps with a device-specific key before they are delivered and stored on a device.</p>
1547
1548 <h3>Smart App Updates</h3>
1549
1550 <p>Smart app updates is a new feature of Google Play that introduces a better way of delivering <strong>app updates</strong> to devices. When developers publish an update, Google Play now delivers only the <strong>bits that have changed</strong> to devices, rather than the entire APK. This makes the updates much lighter-weight in most cases, so they are faster to download, save the device’s battery, and conserve bandwidth usage on users’ mobile data plan. On average, a smart app update is about <strong>1/3 the size</strong> of a full APK update.</p>
1551
1552 <h3 id="gps">Google Play services</h3>
1553
1554 <p>Google Play services helps developers to <strong>integrate Google services</strong> such as authentication and Google+ into their apps delivered through Google Play.</p> 
1555
1556 <p>Google Play services is automatically provisioned to end user devices by Google Play, so all you need is a <strong>thin client library</strong> in your apps.</p>
1557
1558 <p>Because your app only contains the small client library, you can take advantage of these services without a big increase in download size and storage footprint. Also, Google Play will <strong>deliver regular updates</strong> to the services, without developers needing to publish app updates to take advantage of them.</p>
1559
1560 <p>For more information about the APIs included in Google Play Services, see the <a href="http://developers.google.com/android/google-play-services/index.html">Google Play services</a> developer page.</p>
1561
1562 </div> <!-- END ANDROID 4.1 -->
1563
1564
1565
1566
1567
1568