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