| page.title=Android KitKat |
| |
| @jd:body |
| |
| |
| <style> |
| </style> |
| |
| <script> |
| function revealSection(hashy) { |
| if (hashy != "" && !$(hashy).is(":visible")) { |
| sectionId = $(hashy).closest(".version-section").attr("id"); |
| link = $("#title-tabs a[href$="+sectionId+"]"); |
| link.parent().addClass("selected"); |
| link.parent().siblings().removeClass("selected"); |
| |
| sectionDiv = $(".version-section"+link.attr("href")); |
| if (sectionDiv.length) { |
| $(".version-section").hide(); |
| sectionDiv.show(); |
| } |
| |
| $('html, body').animate({ |
| scrollTop: $(hashy).offset().top |
| }, 100); |
| } |
| } |
| |
| $(document).ready(function() { |
| $("#title-tabs li a").each(function() { |
| $(this).click(function(){ |
| $(this).parent().addClass("selected"); |
| $(this).parent().siblings().removeClass("selected"); |
| $(".version-section").hide(); |
| $($(this).attr("href")).show(); |
| return false; |
| }); |
| }); |
| |
| hashy = escapeHTML(location.hash); |
| revealSection(hashy); |
| }); |
| |
| window.onhashchange = function () { |
| revealSection(escapeHTML(location.hash)); |
| } |
| |
| </script> |
| |
| <style> |
| |
| </style> |
| |
| <!-- BEGIN ANDROID 4.4 --> |
| <div id="44-android-44" class="version-section"> |
| |
| <div style="padding:0px 0px 0px 60px;margin-top:-20px;float:right;"> |
| <img src="{@docRoot}images/kk-devices.png" alt="Android 4.4 on phone and tablet" width="380"> |
| </div> |
| |
| <div class="landing-docs" style="float:right;clear:both;margin:22px 0 2em 3em;"> |
| <div class="col-4 normal-links highlights" style="font-size:12px;"> |
| <h3 id="thisd" >Key Developer Features</h3> |
| <ul style="list-style-type:none;"> |
| <!--<li><a href="#44-ui">UI refresh</a></li>--> |
| <li><a href="#44-hce">Host Card Emulation</a></li> |
| <li><a href="#44-printing">Printing framework</a></li> |
| <li><a href="#44-storage-access">Storage access framework</a></li> |
| <li><a href="#44-sensors">Low-power sensors</a></li> |
| <li><a href="#44-sms-provider">SMS provider</a></li> |
| <li><a href="#44-immersive">Full-screen Immersive mode</a></li> |
| <li><a href="#44-transitions">Transitions framework</a></li> |
| <li><a href="#44-webview">Chromium WebView</a></li> |
| <li><a href="#44-screen-recording">Screen recording</a></li> |
| <li><a href="#44-renderscript-ndk">RenderScript NDK</a></li> |
| <li><a href="#44-bluetooth">Bluetooth HOGP and MAP</a></li> |
| <li><a href="#44-ir-blasters">IR Blasters</a></li> |
| <li><a href="#44-closed-captioning">Closed captioning settings</a></li> |
| <li><a href="#44-international-users">RTL features</a></li> |
| <li><a href="#44-security">Security enhancements</a></li> |
| <li><a href="#44-tools">Tools for analyzing memory use</a></li> |
| </ul> |
| </div> |
| </div> |
| |
| <p>Welcome to Android 4.4 KitKat!</p> |
| |
| <p> |
| Android KitKat brings all of Android's most innovative, most beautiful, and |
| most useful features to more devices everywhere. |
| </p> |
| |
| <p> |
| This document provides a glimpse of what's new for developers. |
| </p> |
| |
| <p> |
| Find out more about KitKat for consumers at <a href= |
| "http://www.android.com/versions/kit-kat-4-4/">www.android.com</a>. |
| </p> |
| |
| |
| <h2 id="svelte" style="line-height:1.25em;">Making Android for everyone</h2> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> is designed to run fast, |
| smooth, and responsively on a much broader range of devices than ever before |
| — including on millions of entry-level devices around the world that |
| have as little as <strong>512MB RAM</strong>. |
| </p> |
| |
| <p> |
| KitKat streamlines every major component to reduce memory use and introduces |
| new APIs and tools to help you create innovative, responsive, |
| memory-efficient applications. |
| </p> |
| |
| <p> |
| OEMs building the next generation of Android devices can take advantage of |
| <strong>targeted recommendations and options</strong> to run <span style= |
| "white-space:nowrap;">Android 4.4</span> efficiently, even on low-memory |
| devices. Dalvik JIT code cache tuning, kernel samepage merging (KSM), swap to |
| zRAM, and other optimizations help manage memory. New configuration options |
| let OEMs tune out-of-memory levels for processes, set graphics cache sizes, |
| control memory reclaim, and more. |
| </p> |
| |
| <p> |
| In Android itself, changes across the system improve memory management and |
| reduce memory footprint. Core system processes are trimmed to <strong>use |
| less heap</strong>, and they now more <strong>aggressively protect system |
| memory</strong> from apps consuming large amounts of RAM. When multiple |
| services start at once — such as when network connectivity changes |
| — Android now <strong>launches the services serially</strong>, in small |
| groups, to avoid peak memory demands. |
| </p> |
| |
| <p> |
| For developers, <span style="white-space:nowrap;">Android 4.4</span> helps |
| you deliver <strong>apps that are efficient and responsive</strong> on all |
| devices. A new API, <span style= |
| "font-size:11.5px;font-family:monospace;">ActivityManager.isLowRamDevice()</span>, |
| lets you tune your app's behavior to match the device's memory configuration. |
| You can modify or disable large-memory features as needed, depending on the |
| use-cases you want to support on entry-level devices. Learn more about |
| optimizing your apps for low-memory devices <a |
| href="{@docRoot}training/articles/memory.html">here</a>. |
| </p> |
| |
| <p> |
| New tools also give you powerful insight into your app's memory use. The |
| <strong>procstats tool</strong> details memory use over time, with run times |
| and memory footprint for foreground apps and background services. An |
| on-device view is also available as a new developer option. The |
| <strong>meminfo tool</strong> is enhanced to make it easier to spot memory |
| trends and issues, and it reveals additional memory overhead that hasn't |
| previously been visible. |
| </p> |
| |
| |
| <h2 id="44-hce">New NFC capabilities through Host Card Emulation</h2> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> introduces new platform |
| support for secure NFC-based transactions through <strong>Host Card |
| Emulation</strong> (HCE), for payments, loyalty programs, card access, |
| transit passes, and other custom services. With HCE, any app on an Android |
| device can emulate an NFC smart card, letting users tap to initiate |
| transactions with an app of their choice — no provisioned secure |
| element (SE) in the device is needed. Apps can also use a new <strong>Reader |
| Mode</strong> to act as readers for HCE cards and other NFC-based |
| transactions. |
| </p> |
| |
| <div style="float:right;margin:32px;width:200px;"> |
| <img src="{@docRoot}images/kk-contactless-card.png" alt="" width="200" style= |
| "margin-bottom:0;"> |
| </div> |
| |
| <p> |
| Android HCE emulates ISO/IEC 7816 based smart cards that use the contactless |
| ISO/IEC 14443-4 (ISO-DEP) protocol for transmission. These cards are used by |
| many systems today, including the existing EMVCO NFC payment infrastructure. |
| Android uses Application Identifiers (AIDs) as defined in ISO/IEC 7816-4 as |
| the basis for routing transactions to the correct Android applications. |
| </p> |
| |
| <p> |
| Apps declare the AIDs they support in their manifest files, along with a |
| category identifier that indicates the type of support available (for |
| example, "payments"). In cases where multiple apps support the same AID in |
| the same category, Android displays a dialog that lets the user choose which |
| app to use. |
| </p> |
| |
| <p> |
| When the user taps to pay at a point-of-sale terminal, the system extracts |
| the preferred AID and routes the transaction to the correct application. The |
| app reads the transaction data and can use any local or network-based |
| services to verify and then complete the transaction. |
| </p> |
| |
| <p> |
| Android HCE requires an NFC controller to be present in the device. Support |
| for HCE is already widely available on most NFC controllers, which offer |
| dynamic support for both HCE and SE transactions. <span style= |
| "white-space:nowrap;">Android 4.4</span> devices that support NFC will |
| include Tap & Pay for easy payments using HCE. |
| </p> |
| |
| |
| <h2 id="44-printing">Printing framework</h2> |
| |
| <p> |
| Android apps can now print any type of content over Wi-Fi or |
| cloud-hosted services such as Google Cloud Print. In print-enabled apps, |
| users can discover available printers, change paper sizes, choose specific |
| pages to print, and print almost any kind of document, image, or file. |
| </p> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> introduces native |
| platform support for printing, along with APIs for managing printing and |
| adding new types of printer support. The platform provides a print manager |
| that mediates between apps requesting printing and installed print services |
| that handle print requests. The print manager provides shared services and a |
| system UI for printing, giving users consistent control over printing from |
| any app. The print manager also ensures the security of content as it's |
| passed across processes, from an app to a print service. |
| </p> |
| |
| <div style="float:right;margin:22px 0px 0px 24px;width:490px;"> |
| <img src="{@docRoot}images/kk-print-land-n5.jpg" alt="" width="471" style= |
| "margin-bottom:0;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;"> |
| You can add printing support to your apps or develop print services to |
| support specific types of printers. |
| </p> |
| </div> |
| |
| <p> |
| Printer manufacturers can use new APIs to develop their own <strong>print |
| services</strong> — pluggable components that add vendor-specific logic |
| and services for communicating with specific types of printers. They can |
| build print services and distribute them through Google Play, making it easy |
| for users to find and install them on their devices. Just as with other apps, |
| you can update print services over-the-air at any time. |
| </p> |
| |
| <p> |
| <strong>Client apps</strong> can use new APIs to add printing capabilities to |
| their apps with minimal code changes. In most cases, you would add a print |
| action to your Action Bar and a UI for choosing items to print. You would |
| also implement APIs to create print jobs, query the print manager for status, |
| and cancel jobs. This lets you print nearly any type of content, from local |
| images and documents to network data or a view rendered to a canvas. |
| </p> |
| |
| <p> |
| For broadest compatibility, Android uses PDF as its primary file format for |
| printing. Before printing, your app needs to generate a properly paginated |
| PDF version of your content. For convenience, the printing API provides |
| native and WebView helper classes to let you create PDFs using standard |
| Android drawing APIs. If your app knows how to draw the content, it can |
| quickly create a PDF for printing. |
| </p> |
| |
| <p> |
| Most devices running <span style="white-space:nowrap;">Android 4.4</span> |
| will include Google Cloud Print pre-installed as a print service, as well as |
| several Google apps that support printing, including Chrome, Drive, Gallery, |
| and QuickOffice. |
| </p> |
| |
| <h2 id="44-storage-access">Storage access framework</h2> |
| |
| <p> |
| A new <strong>storage access framework</strong> makes it simple for users to |
| browse and open documents, images, and other files across all of their their |
| preferred document storage providers. A standard, easy-to-use UI lets users |
| browse files and access recents in a consistent way across apps and |
| providers. |
| </p> |
| |
| <div style="float:right;margin:22px 0px 0px 24px;width:490px;"> |
| <img src="{@docRoot}images/kk-saf2-n5.jpg" alt="" width="240" style= |
| "margin-bottom:0;"> <img src="{@docRoot}images/kk-saf1-n5.jpg" alt="" width="240" |
| style="margin-bottom:0;padding-left:6px;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;"> |
| Box and others have integrated their services into the storage access |
| framework, giving users easy access to their documents from apps across the |
| system. |
| </p> |
| </div> |
| |
| <p> |
| Cloud or local storage services can participate in this ecosystem by |
| implementing a new document provider class that encapsulates their services. |
| The provider class includes all of the APIs needed to register the provider |
| with the system and manage browsing, reading, and writing documents in the |
| provider. The document provider can give users access to any remote or local |
| data that can be represented as files — from text, photos, and |
| wallpapers to video, audio, and more. |
| </p> |
| |
| <p> |
| If you build a <strong>document provider</strong> for a cloud or local |
| service, you can deliver it to users as part of your existing Android app. |
| After downloading and installing the app, users will have instant access to |
| your service from any app that participates in the framework. This can help |
| you gain exposure and user engagement, since users will find your services |
| more easily. |
| </p> |
| |
| <p> |
| If you develop a <strong>client app</strong> that manages files or documents, |
| you can integrate with the storage access framework just by using new |
| <span style="font-size:11.5px;">CREATE_DOCUMENT</span> or <span style= |
| "font-size:11.5px;">OPEN_DOCUMENT</span> intents to open or create files |
| — the system automatically displays the standard UI for browsing |
| documents, including all available document providers. |
| </p> |
| |
| <p> |
| You can integrate your client app one time, for all providers, without any |
| vendor-specific code. As users add or remove providers, they’ll continue to |
| have access to their preferred services from your app, without changes or |
| updates needed in your code. |
| </p> |
| |
| <p> |
| The storage access framework is integrated with the existing <span style= |
| "font-size:11.5px;">GET_CONTENT</span> intent, so users also have access to |
| all of their previous content and data sources from the new system UI for |
| browsing. Apps can continue using <span style= |
| "font-size:11.5px;">GET_CONTENT</span> as a way to let users import data. The |
| storage access framework and system UI for browsing make it easier for users |
| to find and import their data from a wider range of sources. |
| </p> |
| <p> |
| Most devices running <span style="white-space:nowrap;">Android 4.4</span> |
| will include Google Drive and local storage pre-integrated as document |
| providers, and Google apps that work with files also use the new framework. |
| </p> |
| |
| |
| <h2 id="44-sensors">Low-power sensors</h2> |
| |
| <h4 id="44-sensor-batching">Sensor batching</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> introduces platform |
| support for <strong>hardware sensor batching</strong>, a new optimization |
| that can dramatically reduce power consumed by ongoing sensor activities. |
| </p> |
| |
| <p> |
| With sensor batching, Android works with the device hardware to collect and |
| deliver sensor events efficiently in batches, rather than individually as |
| they are detected. This lets the device's application processor remain in a |
| low-power idle state until batches are delivered. You can request batched |
| events from any sensor using a standard event listener, and you can control |
| the interval at which you receive batches. You can also request immediate |
| delivery of events between batch cycles. |
| </p> |
| |
| <p> |
| Sensor batching is ideal for low-power, long-running use-cases such as |
| fitness, location tracking, monitoring, and more. It can makes your app more |
| efficient and it lets you track sensor events continuously — even while |
| the screen is off and the system is asleep. |
| </p> |
| |
| <p> |
| Sensor batching is currently available on Nexus 5, and we're working with our |
| chipset partners to bring it to more devices as soon as possible. |
| </p> |
| |
| <div style="float:right;margin:1em 0em 0em 3em;width:490px;clear:both"> |
| <img src="{@docRoot}images/kk-sensors-moves-n5.jpg" alt="" width="240" style= |
| "margin-bottom:0;"> <img src="{@docRoot}images/kk-sensors-runtastic-n5.jpg" alt="" |
| width="240" style="margin-bottom:0;padding-left:4px;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;"> |
| <strong>Moves</strong> and <strong>Runtastic Pedometer</strong> are using |
| the hardware step-detector to offer long-running, low-power services. |
| </p> |
| </div> |
| |
| <h4 id="44-step-detector">Step Detector and Step Counter</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> also adds platform |
| support for two new composite sensors — step detector |
| and step counter — that let your app track steps when |
| the user is walking, running, or climbing stairs. These new sensors are |
| implemented in hardware for low power consumption. |
| </p> |
| |
| <p> |
| The step detector analyzes accelerometer input to recognize when the user has |
| taken a step, then triggers an event with each step. The step counter tracks |
| the total number of steps since the last device reboot and triggers an event |
| with each change in the step count. Because the logic and sensor management |
| is built into the platform and underlying hardware, you don't need to |
| maintain your own detection algorithms in your app. |
| </p> |
| |
| <p> |
| Step detector and counter sensors are available on Nexus 5, and we're working |
| with our chipset partners to bring them to new devices as soon as possible. |
| </p> |
| |
| |
| <h2 id="44-sms-provider">SMS provider</h2> |
| |
| <p> |
| If you develop a messaging app that uses SMS or MMS, you can now use a |
| <strong>shared SMS provider and new APIs</strong> to manage your app's |
| message storage and retrieval. The new SMS provider and APIs define a |
| standardized interaction model for all apps that handle SMS or MMS messages. |
| </p> |
| |
| <p> |
| Along with the new provider and APIs, <span style= |
| "white-space:nowrap;">Android 4.4</span> introduces <strong>new |
| semantics</strong> for receiving messages and writing to the provider. When a |
| message is received, the system routes it directly to the user's default |
| messaging app using the new <span style= |
| "font-size:11.5px;">SMS_DELIVER</span> intent. Other apps can still listen |
| for incoming messages using the <span style= |
| "font-size:11.5px;">SMS_RECEIVED</span> intent. Also, the system now allows |
| only the default app to write message data to the provider, although other |
| apps can read at any time. Apps that are not the user's default can still |
| send messages — the system handles writing those messages to the |
| provider on behalf of the app, so that users can see them in the default app. |
| </p> |
| |
| <p> |
| The new provider and semantics help to improve the user's experience when |
| multiple messaging apps are installed, and they help you to build new |
| messaging features with fully-supported, forward-compatible APIs. |
| </p> |
| |
| |
| <h2 id="44-beautiful-apps">New ways to build beautiful apps</h2> |
| |
| <div style="float:right;margin:14px 0px 0px 24px;width:246px;"> |
| <img src="{@docRoot}images/kk-immersive-n5.jpg" alt="" width="240" style= |
| "margin-bottom:0;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;"> |
| A new <strong>immersive mode</strong> lets apps use every pixel on the |
| screen to show content and capture touch events. |
| </p> |
| </div> |
| |
| <h4 id="44-immersive">Full-screen Immersive mode</h4> |
| <p> |
| Now your apps can use <strong>every pixel on the device screen</strong> to |
| showcase your content and capture touch events. <span style= |
| "white-space:nowrap;">Android 4.4</span> adds a new full-screen immersive |
| mode that lets you create full-bleed UIs reaching from edge to edge on phones |
| and tablets, <strong>hiding all system UI</strong> such as the status bar and |
| navigation bar. It's ideal for rich visual content such as photos, videos, |
| maps, books, and games. |
| </p> |
| |
| <p> |
| In the new mode, the system UI stays hidden, even while users are interacting |
| with your app or game — you can capture touch events from anywhere |
| across the screen, even areas that would otherwise be occupied by the system |
| bars. This gives you a great way to create a larger, richer, more immersive |
| UI in your app or game and also reduce visual distraction. |
| </p> |
| |
| <p> |
| To make sure that users always have easy, consistent access to system UI from |
| full-screen immersive mode, <span style="white-space:nowrap;">Android |
| 4.4</span> supports a new gesture — in immersive mode, an edge swipe |
| from the top or bottom of the screen now reveals the system UI. |
| </p> |
| |
| <p> |
| To return to immersive mode, users can touch the screen outside of the bar |
| bounds or wait for a short period for the bars to auto-hide. For a consistent |
| user experience, the new gesture also works with previous methods of hiding |
| the status bar. |
| </p> |
| |
| <h4 id="44-transitions">Transitions framework for animating scenes</h4> |
| |
| <p> |
| Most apps structure their flows around several key UI states that expose |
| different actions. Many apps also use animation to help users understand |
| their progress through those states and the actions available in each. To |
| make it easier to create <strong>high-quality animations</strong> in your |
| app, <span style="white-space:nowrap;">Android 4.4</span> introduces a new |
| transitions framework. |
| </p> |
| |
| <p> |
| The transitions framework lets you define <strong>scenes</strong>, typically |
| view hierarchies, and transitions, which describe how to animate or transform |
| the scenes when the user enters or exits them. You can use several predefined |
| transition types to animate your scenes based on specific properties, such as |
| layout bounds, or visibility. There's also an auto-transition type that |
| automatically fades, moves, and resizes views during a scene change. In |
| addition, you can define custom transitions that animate the properties that |
| matter most to your app, and you can plug in your own animation styles if |
| needed. |
| </p> |
| |
| <p> |
| With the transitions framework you can also <strong>animate changes to your |
| UI on the fly</strong>, without needing to define scenes. For example, you |
| can make a series of changes to a view hierarchy and then have the |
| TransitionManager automatically run a delayed transition on those changes. |
| </p> |
| |
| <p> |
| Once you've set up transitions, it's straightforward to invoke them from your |
| app. For example, you can call a single method to begin a transition, make |
| various changes in your view hierarchy, and on the next frame animations will |
| automatically begin that animate the changes you specified. |
| </p> |
| |
| <div style="float:right;margin:0px 0px 22px 32px;width:340px;"> |
| <img src="{@docRoot}images/kk-home.jpg" alt="translucent system UI" widtdh="340" |
| style="margin-bottom:0"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;line-height:1.25em;margin-bottom:0;"> |
| Apps can use new window styles to request translucent system bars. |
| </p> |
| </div> |
| |
| <p> |
| For custom control over the transitions that run between specific scenes in |
| your application flow, you can use the TransitionManager. The |
| TransitionManager lets you define the relationship between scenes and the |
| transitions that run for specific scene changes. |
| </p> |
| |
| <h4 id="44-translucent-system-ui">Translucent system UI styling</h4> |
| |
| <p> |
| To get the most impact out of your content, you can now use new window styles |
| and themes to request <strong>translucent system UI</strong>, including both |
| the status bar and navigation bar. To ensure the legibility of navigation bar |
| buttons or status bar information, subtle gradients is shown behind the |
| system bars. A typical use-case would be an app that needs to show through to |
| a wallpaper. |
| </p> |
| |
| <h4 id="44-notification-access">Enhanced notification access</h4> |
| |
| <p> |
| Notification listener services can now see <strong>more information about |
| incoming notifications</strong> that were constructed using the notification |
| builder APIs. Listener services can access a notification's actions as well |
| as new extras fields — text, icon, picture, progress, chronometer, and |
| many others — to extract cleaner information about the notification and |
| present the information in a different way. |
| </p> |
| |
| <div style="float:left;margin:1em 2em 1em 2em;"> |
| <a href=""><img src="{@docRoot}images/kk-chromium-icon.png" alt="" height="160" style= |
| "margin-bottom:0em;"></a> |
| </div> |
| |
| <h4 id="44-webview">Chromium WebView</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> includes a completely |
| new implementation of WebView that's based on <a href= |
| "http://www.chromium.org/Home" class="external-link">Chromium</a>. The new |
| Chromium WebView gives you the latest in standards support, performance, and |
| compatibility to build and display your web-based content. |
| </p> |
| |
| <p> |
| Chromium WebView provides broad support for HTML5, CSS3, and JavaScript. It |
| supports most of the HTML5 features available in Chrome for Android 30. It |
| also brings an updated version of the JavaScript Engine (V8) that delivers |
| dramatically improved JavaScript performance. |
| </p> |
| |
| <p stydle="clear:both;"> |
| In addition, the new Chromium WebView supports remote debugging using |
| <a class="external-link" href= |
| "https://developers.google.com/chrome-developer-tools/docs/remote-debugging#debugging-webviews"> |
| Chrome DevTools</a>. For example, you can use Chrome DevTools on your |
| development machine to inspect, debug, and analyze your WebView content live |
| on a mobile device. |
| </p> |
| |
| <p> |
| The new Chromium WebView is included on all compatible devices running |
| <span style="white-space:nowrap;">Android 4.4</span> and higher. You can take |
| advantage of the new WebView right away, and with minimum modifications to |
| existing apps and content. In most cases, your content will migrate to the |
| new implementation seamlessly. |
| </p> |
| |
| |
| <h2 id="44-media">New media capabilities</h2> |
| |
| <h4 id="44-screen-recording">Screen recording</h4> |
| |
| <p> |
| Now it's easy to create high-quality video of your app, directly from your |
| Android device. <span style="white-space:nowrap;">Android 4.4</span> adds |
| support for screen recording and provides a <strong>screen recording |
| utility</strong> that lets you start and stop recording on a device that's |
| connected to your Android SDK environment over USB. It's a great new way to |
| create walkthroughs and tutorials for your app, testing materials, marketing |
| videos, and more. |
| </p> |
| |
| <p> |
| With the screen recording utility, you can capture video of your device screen |
| contents and store the video as an MP4 file on the device. You can record at any |
| device-supported resolution and bitrate you want, and the output retains the |
| aspect ratio of the display. By default, the utility selects a resolution |
| equal or close to the device's display resolution in the current orientation. |
| When you are done recording, you can share the video directly from your |
| device or pull the MP4 file to your host computer for post-production. |
| </p> |
| |
| <p> |
| If your app plays video or other protected content that you don’t want to be |
| captured by the screen recorder, you can use <span style= |
| "font-size:11.5px;font-family:monospace;white-space:nowrap;">SurfaceView.setSecure()</span> |
| to mark the content as secure. |
| </p> |
| |
| <p> |
| You can access screen recording through the adb tool included in the Android |
| SDK, using the command <span style= |
| "font-size:11.5px;font-family:monospace;white-space:nowrap;">adb shell |
| screenrecord</span>. You can also launch it through the DDMS panel in Android |
| Studio. |
| </p> |
| |
| <h4 id="44-adaptive-playback">Resolution switching through adaptive playback</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> brings formal support |
| for adaptive playback into the Android media framework. Adaptive playback is |
| an optional feature of video decoders for MPEG-DASH and other formats that |
| enables <strong>seamless change in resolution during playback</strong>. The |
| client can start to feed the decoder input video frames of a new resolution |
| and the resolution of the output buffers change automatically, and without a |
| significant gap. |
| </p> |
| |
| <p> |
| Resolution switching in <span style="white-space:nowrap;">Android 4.4</span> |
| lets media apps offer a significantly better streaming video experience. Apps |
| can check for adaptive playback support at runtime using existing APIs and |
| implement resolution-switching using new APIs introduced in <span style= |
| "white-space:nowrap;">Android 4.4</span>. |
| </p> |
| |
| <h4 id="44-cenc">Common Encryption for DASH</h4> |
| |
| <p> |
| Android now supports the <strong>Common Encryption (CENC)</strong> for |
| MPEG-DASH, providing a standard, multiplatform DRM scheme for managing |
| protecting content. Apps can take advantage of CENC through Android's modular |
| DRM framework and platform APIs for supporting DASH. |
| </p> |
| |
| <h4 id="44-hls">HTTP Live Streaming</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> updates the platform's |
| HTTP Live Streaming (HLS) support to a superset of version 7 of the HLS |
| specification (version 4 of the protocol). See the <a href= |
| "http://tools.ietf.org/html/draft-pantos-http-live-streaming-07" class= |
| "external-link">IETF draft</a> for details. |
| </p> |
| <h4 id="44-audio-tunneling">Audio Tunneling to DSP</h4> |
| |
| <p> |
| For high-performance, lower-power audio playback, <span style= |
| "white-space:nowrap;">Android 4.4</span> adds platform support for |
| audio tunneling to a digital signal processor (DSP) in the |
| device chipset. With tunneling, audio decoding and output effects are |
| off-loaded to the DSP, waking the application processor less often and using |
| less battery. |
| </p> |
| |
| <p> |
| Audio tunneling can <strong>dramatically improve battery life</strong> for |
| use-cases such as listening to music over a headset with the screen off. For |
| example, with audio tunneling, Nexus 5 offers a total off-network audio |
| playback time of up to 60 hours, an increase of over 50% over non-tunneled |
| audio. |
| </p> |
| |
| <p> |
| Media applications can take advantage of audio tunneling on supported devices |
| without needing to modify code. The system applies tunneling to optimize |
| audio playback whenever it's available on the device. |
| </p> |
| |
| <div style="float:right;padding-top:1em;width:372px;margin-left:2em;"> |
| <img src="{@docRoot}images/kk-loudnessEnhancerAnnotated.png" alt= |
| "Visualizer showing loudness enhancer audio effect" width="360" height="252" |
| style="border:1px solid #ddd;border-radius: 6px;"> |
| <p class="img-caption" style="margin-left:6px;line-height:1.25em;"> |
| Visualization of how the LoudnessEnhancer effect can make speech content |
| more audible. |
| </p> |
| </div> |
| |
| <p> |
| Audio tunneling requires support in the device hardware. Currently audio |
| tunneling is available on Nexus 5 and we're working with our chipset partners |
| to make it available on more devices as soon as possible. |
| </p> |
| |
| <h4 id="44-audio-monitoring">Audio monitoring</h4> |
| |
| <p> |
| Apps can use new monitoring tools in the Visualizer effect to get updates on |
| the <strong>peak and RMS levels</strong> of any currently playing audio on |
| the device. For example, you could use this creatively in music visualizers |
| or to implement playback metering in a media player. |
| </p> |
| |
| <h4 id="44-loudness">Loudness enhancer</h4> |
| |
| <p> |
| Media playback applications can <strong>increase the loudness of spoken |
| content</strong> by using the new LoudnessEnhancer effect, which acts as |
| compressor with time constants that are specifically tuned for speech. |
| </p> |
| |
| <h4 id="44-audio-timestamps">Audio timestamps for improved AV sync</h4> |
| |
| <p> |
| The audio framework can now report <strong>presentation timestamps</strong> |
| from the audio output HAL to applications, for better audio-video |
| synchronization. Audio timestamps let your app determine when a specific |
| audio frame will be (or was) presented off-device to the user; you can use |
| the timestamp information to more accurately synchronize audio with video |
| frames. |
| </p> |
| |
| <h4 id="44-miracast">Wi-Fi CERTIFIED Miracastâ„¢</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> devices can now be |
| certified to the Wi-Fi Alliance Wi-Fi Display Specification as Miracast |
| compatible. To help with testing, a new Wireless Display developer option |
| exposes advanced configuration controls and settings for Wireless Display |
| certification. You can access the option at <strong>Settings > Developer |
| options > Wireless display certification</strong>. Nexus 5 is a Miracast |
| certified wireless display device. |
| </p> |
| |
| <h2 id="44-renderscript">RenderScript Compute</h2> |
| |
| <div style="float:right;padding-top:1em;width:372px;margin-left:2em;"> |
| <img src="{@docRoot}images/kk-rs-chart-versions.png" alt= |
| "Renderscipt optimizations chart" width="360" height="252" style= |
| "border:1px solid #ddd;border-radius: 6px;"> |
| <p class="img-caption" style="margin-left:6px;line-height:1.25em;"> |
| Performance benchmarks for Android 4.4 relative to Android 4.3, |
| run on the same devices (Nexus 7, Nexus 10). |
| </p> |
| </div> |
| |
| <h4>Ongoing performance improvements</strong></h4> |
| |
| <p> |
| When your apps use RenderScript, they'll benefit from <strong>ongoing |
| performance tuning</strong> in the RenderScript runtime itself, without the |
| need for recompilation. The chart at right shows performance gains in Android |
| 4.4 on two popular chipsets. |
| </p> |
| |
| <h4>GPU acceleration</h4> |
| |
| <p> |
| Any app using RenderScript on a supported device benefits from GPU |
| acceleration, without code changes or recompiling. Since the Nexus 10 first |
| debuted RenderScript GPU acceleration, various other hardware partners have |
| added support. |
| </p> |
| |
| <p> |
| Now with <span style="white-space:nowrap;">Android 4.4</span>, GPU |
| acceleration is available on the Nexus 5, as well as the Nexus 4, Nexus 7 |
| (2013), and Nexus 10, and we're working with our partners to bring it to more |
| devices as soon as possible. |
| </p> |
| |
| <h4 id="44-renderscript-ndk">RenderScript in the Android NDK</h4> |
| |
| <p> |
| Now you can take advantage of RenderScript <strong>directly from your native |
| code</strong>. A new C++ API in the Android Native Development Kit (NDK) lets |
| you access the same RenderScript functionality available through the |
| framework APIs, including script intrinsics, custom kernels, and more. |
| </p> |
| |
| <p> |
| If you have large, performance-intensive tasks to handle in native code, you |
| can perform those tasks using RenderScript and integrate them with your |
| native code. RenderScript offers great performance across a wide range of |
| devices, with automatic support for multi-core CPUs, GPUs, and other |
| processors. |
| </p> |
| |
| <p> |
| When you build an app that uses the RenderScript through the NDK, you can |
| distribute it to any device running Android 2.2 or or higher, just like with |
| the RenderScript support library available for framework APIs. |
| </p> |
| |
| |
| <h2 id="44-graphics">Graphics</h2> |
| |
| <h4 id="44-surfaceflinger">GLES2.0 SurfaceFlinger</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> upgrades its |
| SurfaceFlinger from OpenGL ES 1.0 to OpenGL ES 2.0. |
| </p> |
| |
| <h4 id="44-composer">New Hardware Composer support for virtual displays</h4> |
| |
| <p> |
| The latest version of Android Hardware Composer, HWComposer 1.3, supports |
| hardware composition of one virtual display in addition to the primary, |
| external (e.g. HDMI) display, and has improved OpenGL ES interoperability. |
| </p> |
| |
| |
| <h2 id="44-connectivity">New Types of Connectivity</h2> |
| |
| <h4 id="44-bluetooth">New Bluetooth profiles</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> support for two new |
| Bluetooth profiles to let apps support a broader range of low-power and media |
| interactions. <strong>Bluetooth HID over GATT</strong> (HOGP) gives apps a |
| low-latency link with low-power peripheral devices such as mice, joysticks, |
| and keyboards. <strong>Bluetooth MAP</strong> lets your apps exchange |
| messages with a nearby device, for example an automotive terminal for |
| handsfree use or another mobile device. As an <strong>extension to Bluetooth |
| AVRCP 1.3</strong>, users can now set absolute volume on the system from |
| their Bluetooth devices. |
| </p> |
| |
| <p> |
| Platform support for HOGP, MAP, and AVRCP is built on the Bluedroid Bluetooth |
| stack introduced by Google and Broadcom in Android 4.2. Support is available |
| right away on Nexus devices and other Android-compatible devices that offer |
| compatible Bluetooth capabilities. |
| </p> |
| |
| <h4 id="44-ir-blasters">IR Blasters</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> introduces platform |
| support for built-in <strong>IR blasters</strong>, along with a new API and |
| system service that let you create apps to take advantage them. |
| </p> |
| |
| <p> |
| Using the new API, you can build apps that let users remotely control nearby |
| TVs, tuners, switches, and other electronic devices. The API lets your app |
| check whether the phone or tablet has an infrared emitter, query it's carrier |
| frequencies, and then send infrared signals. |
| </p> |
| |
| <p> |
| Because the API is standard across Android devices running <span style= |
| "white-space:nowrap;">Android 4.4</span> or higher, your app can support the |
| broadest possible range of vendors without writing custom integration code. |
| </p> |
| |
| <h4 id="44-wifi-tdls">Wi-Fi TDLS support</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> introduces a seamless |
| way to stream media and other data faster between devices already on the same |
| Wi-Fi network by supporting Wi-Fi Tunneled Direct Link Setup (TDLS). |
| </p> |
| |
| |
| <h2 id="44-accessibility">Accessibility</h2> |
| |
| <h4 id="44-closed-captioning">System-wide settings for closed captioning</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> now supports a better |
| accessibility experience across apps by adding system-wide preferences for |
| Closed Captioning. Users can go to <strong>Settings</strong> > |
| <strong>Accessibility</strong> > <strong>Captions</strong> to set global |
| captioning preferences, such as whether to show captions and what language, |
| text size, and text style to use. |
| </p> |
| |
| <p> |
| Apps that use video can now access the user's captioning settings and |
| <strong>adjust presentation to meet the user's preferences</strong>. A new |
| captioning manager API lets you check and monitor the user's captioning |
| preferences. The captioning manager provides you with the user's preferred |
| captioning state as well as preferred locale, scaling factor, and text style. |
| The text style includes foreground and background colors, edge properties, |
| and typeface. |
| </p> |
| |
| <div style="float:right;margin:22px 0px 0px 24px;width:490px;"> |
| <img src="{@docRoot}images/kk-captions-n5.jpg" alt="" width="471" style= |
| "margin-bottom:0;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;"> |
| Apps can now refer to the user's <strong>system-wide captions |
| preferences</strong>. An example of the expected display style is shown |
| right in the settings. |
| </p> |
| </div> |
| |
| <p> |
| In addition, apps that use <strong>VideoView</strong> can use a new API to |
| pass a captioning stream along with a video stream for rendering. The system |
| automatically handles the display of the captions on video frames according |
| to the user's systemwide settings. Currently, VideoView supports auto-display |
| of captions in WebVTT format only. |
| </p> |
| |
| <p> |
| <strong>All apps that show captions</strong> should make sure to check the |
| user's systemwide captioning preferences and render captions as closely as |
| possible to those preferences. For more insight into how specific |
| combinations of settings should look, you can look at a preview of captions |
| in different languages, sizes, and styles right in the Settings app. |
| </p> |
| |
| <h4 id="44-enhanced-apis">Enhanced Accessibility APIs</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> extends the |
| accessibility APIs to support <strong>more precise structural and semantic |
| description</strong> and observation of onscreen elements. With the new APIs, |
| developers can improve the quality of accessible feedback by providing |
| accessibility services with more information about on-screen elements. |
| </p> |
| |
| <p> |
| In accessibility nodes, developers can now determine whether a node is a |
| popup, get its input type, and more. You can also use new APIs to work with |
| nodes that contain grid-like information, such as lists and tables. For |
| example, you can now specify new supported actions, collection information, |
| live region modes, and more. |
| </p> |
| |
| <p> |
| New accessibility events let developers more closely follow the changes that |
| are taking place in window content, and they can now listen for changes in |
| the touch exploration mode on the device. |
| </p> |
| |
| |
| <h2 id="44-international-users">Support for international Users</h2> |
| |
| <h4 id="44-drawable-mirroring">Drawable mirroring for RTL locales</h4> |
| |
| <p> |
| If your app is targeting users who use RTL scripts, you can use a new API to |
| declare that a <strong>drawable should be auto-mirrored</strong> when the |
| user's locale setting includes an RTL language. |
| </p> |
| |
| <p> |
| Declaring a drawable as auto-mirrored helps you <strong>prevent duplication |
| of assets</strong> in your app and reduces the the size of your APK. When you |
| have drawables that are the reusable for both LTR and RTL presentations, you |
| can declare the default versions as auto-mirrored and then omit those |
| Drawables from your RTL resources. |
| </p> |
| |
| <div style="float:right;margin:16px 12px 0px 32px;width:260px;clear:both;"> |
| <img src="{@docRoot}images/kk-pseudolocale-rtl.png" alt="" width="260" style= |
| "margin-bottom:0;"> |
| <p class="img-caption" style="padding-top:1.5em;line-height:1.25em;"> |
| The <strong>Force RTL layout</strong> option makes it easier to test your app's localization. |
| </p> |
| </div> |
| |
| <p> |
| You can declare various types of drawables as auto-mirrored in your |
| application code, such as bitmap, nine-patch, layer, state list, and other |
| drawables. You can also declare a drawable as auto-mirrored in your resource |
| files by using a new attribute. |
| </p> |
| |
| <h4 id="44-pseudolocale-rtl">Force RTL Layout</h4> |
| |
| <p> |
| To make it easier to test and debug layout mirroring issues without switching |
| to an RTL language, Android includes a new developer option to force RTL layout |
| direction in all apps. |
| </p> |
| |
| <p> |
| The Force RTL layout option switches the device to RTL layout for all locales and |
| displays text in your current language. This can help you find layout issues |
| across your app, without having to display the app in an RTL language. You |
| can access the option in <strong>Settings > Developer |
| options > Force RTL layout direction</strong>. |
| </p> |
| |
| |
| <h2 id="44-security">Security enhancements</h2> |
| |
| <h4 id="44-selinux">SELinux (enforcing mode)</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> updates its SELinux |
| configuration from "permissive" to "enforcing." This means potential policy |
| violations within a SELinux domain that has an enforcing policy will be |
| blocked. |
| </p> |
| |
| <h4 id="44-crytpo">Improved cryptographic algorithms</h4> |
| |
| <p> |
| Android has improved its security further by adding support for two more |
| cryptographic algorithms. Elliptic Curve Digital Signature Algorithm (ECDSA) |
| support has been added to the keystore provider improving security of digital |
| signing, applicable to scenarios such as signing of an application or a data |
| connection. The Scrypt key derivation function is implemented to protect the |
| cryptographic keys used for full-disk encryption. |
| </p> |
| |
| <h4 id="44-other">Other enhancements</h4> |
| |
| <p> |
| On multiuser devices, VPNs are now applied per user. This can allow a user to |
| route all network traffic through a VPN without affecting other users on the |
| device. Also, Android now supports FORTIFY_SOURCE level 2, and all code is |
| compiled with those protections. FORTIFY_SOURCE has been enhanced to work |
| with clang. |
| </p> |
| |
| |
| <h2 id="44-tools">Tools for analyzing memory use</h2> |
| |
| <h4 id="44-procstats">Procstats</h4> |
| |
| <p> |
| A new tool called <strong>procstats</strong> helps you analyze the memory |
| resources your app uses, as well as the resources used by other apps and |
| services running on the system. |
| </p> |
| |
| <p> |
| Procstats keeps track of <strong>how apps are running over time</strong>, |
| providing data about their execution durations and memory use to help |
| determine how efficiently they are performing. This is most important for |
| apps that start services that run in the background, since it lets you |
| monitor how long they are running and how much RAM they are using while doing |
| so. Procstats will also collect data for foreground applications about memory |
| use over time to determine the overall memory profile of the app. |
| </p> |
| |
| <p> |
| Procstats can help you identify background services started by your app. You |
| can keep track of how long those services continue running and how much RAM |
| they use while doing so. Procstats also lets you profile your app while it's |
| in the foreground, using its memory use over time to determine its overall |
| memory profile. |
| </p> |
| |
| <div style="margin:2em 0em;width:780px;"> |
| <div style="float:left;width:390px;"> |
| <img src="{@docRoot}images/kk-procstats.png" alt="" width="360" style= |
| "margin-bottom:0;box-shadow: 3px 10px 18px 1px #eee;border:1px solid #ddd;border-radius: 6px;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;line-height:1.25em;width:360px;"> |
| The new <strong>procstats</strong> tool lets you check the memory use of |
| apps and services over time. |
| </p> |
| </div> |
| |
| <div style="float:right;width:390px;"> |
| <img src="{@docRoot}images/kk-meminfo.png" alt="" width="360" style= |
| "margin-bottom:0;box-shadow: 3px 10px 12px 1px #eee;border:1px solid #ddd;border-radius: 6px;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;line-height:1.25em;width:360px;"> |
| The enhanced <strong>meminfo</strong> tool lets you see details of memory |
| use for an app. |
| </p> |
| </div> |
| </div> |
| |
| <p style="clear:both;"> |
| You can access procstats from the adb tool included in the Android SDK, |
| <span style="font-size:11.5px;font-family:monospace;white-space:nowrap;">adb |
| shell dumpsys procstats</span>. Also, for on-device profiling, see the |
| Process Stats developer option, below. |
| </p> |
| |
| |
| <h4 id="44-procstats-ondevice" style="clear:both">On-device memory status and profiling</h4> |
| |
| <p> |
| <span style="white-space:nowrap;">Android 4.4</span> includes a new developer |
| option to make it easier to analyze your app's memory profile while it's |
| running on any device or emulator. It's especially useful to get a view of |
| how your app uses memory and performs on devices with low RAM. You can access |
| the option at <strong>Settings > Developer options > Process |
| stats</strong> |
| </p> |
| |
| <div style="float:right;margin:22px 0px 0px 24px;width:490px;"> |
| <img src="{@docRoot}images/kk-proc-device-overview-n5.jpg" alt="" width="240" style= |
| "margin-bottom:0;"> <img src="{@docRoot}images/kk-proc-device-detail-n5.jpg" alt="" |
| width="240" style="margin-bottom:0;padding-left:6px;"> |
| <p class="img-caption" style= |
| "padding-top:1.5em;margin-left:6px;line-height:1.25em;width:480px;"> |
| <strong>Process stats</strong> is a convenient way to check your app's |
| memory use. You can see how your app compares to other apps and zoom in on |
| specific data about your app or it's background services. |
| </p> |
| </div> |
| |
| <p> |
| The <strong>Process Stats</strong> option shows you a variety of high-level |
| metrics on your app's memory use, based on data collected using the new |
| procstats service. On the main screen you can see a summary of system memory |
| status. Green indicates relative amount of time spent with low RAM usage, |
| yellow indicates moderate RAM usage, and red indicates high (critical) RAM |
| usage |
| </p> |
| |
| <p> |
| Below the summary is a list summarizing each app's <strong>memory load on the |
| system</strong>. For each app, a blue bar indicates the relative computed |
| memory load (runtime x avg_pss) of its process, and a percentage number |
| indicates the relative amount of time spent in the background. You can filter |
| the list to show only foreground, background, or cached processes, and you |
| can include or exclude system processes. You can also change the duration of |
| the data collected to 3, 6, 12, or 24 hours, and you can include or exclude |
| uss memory. |
| </p> |
| |
| <p> |
| To take a closer look at a specific app's memory usage in isolation, tap the |
| app. For each app, you can now see a summary of the memory consumed and the |
| percentage of the collection interval that the app has been running. You can |
| also see the average and maximum usage over the collection period, and below |
| the app's services and the percentage of time they've been running. |
| </p> |
| |
| <p> |
| Analyzing your app using the data in Process Stats can reveal issues and |
| suggest possible optimizations for your app. For example, if your app is |
| running longer than it should or using too much memory over a period of time, |
| there could be bugs in your code that you can resolve to improve your app's |
| performance, especially when running on a device with low RAM. |
| </p> |
| |
| </div><!-- END ANDROID 4.4 --> |