page.title=Android 4.2 APIs
excludeFromSuggestions=true
sdk.platform.version=4.2
sdk.platform.apiLevel=17
@jd:body

<div id="qv-wrapper">
<div id="qv">
  
<h2>In this document</h2>
<ol>
  <li><a href="#Behaviors">Important Behavior Changes</a></li>
  <li><a href="#Daydream">Daydream</a></li>
  <li><a href="#SecondaryDisplays">Secondary Displays</a></li>
  <li><a href="#Lockscreen">Lockscreen Widgets</a></li>
  <li><a href="#MultipleUsers">Multiple Users</a></li>
  <li><a href="#RTL">RTL Layout Support</a></li>
  <li><a href="#NestedFragments">Nested Fragments</a></li>
  <li><a href="#Renderscript">Renderscript</a></li>
</ol>

<h2>See also</h2>
<ol>
<li><a
href="{@docRoot}sdk/api_diff/17/changes.html">API
Differences Report &raquo;</a> </li>
</ol>

</div>
</div>


<p>API Level: 17</p>

<p>Android 4.2 ({@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1})
is an update to the Jelly Bean release that offers new features for users and app
developers. This document provides an introduction to the most notable and
useful new APIs for developers.</p>

<p>As an app developer, you should download the Android 4.2 system image and SDK platform from
the <a href="{@docRoot}tools/help/sdk-manager.html">SDK Manager</a> as soon as possible. If you
don’t have a device running Android 4.2 on which to test your app, use the Android 4.2 system
image to test your app on the <a href="{@docRoot}tools/devices/emulator.html">Android emulator</a>.
Then build your apps against the Android 4.2 platform to begin using the latest APIs.</p>



<div class="sidebox-wrapper">
<div class="sidebox">  
  
<h3 id="ApiLevel">Declare your app API Level</h3>

<p>To better optimize your app for devices running Android {@sdkPlatformVersion},
  you should set your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
<code>"{@sdkPlatformApiLevel}"</code>, install it on an Android {@sdkPlatformVersion} system image,
test it, then publish an update with this change.</p>

<p>You
can use APIs in Android {@sdkPlatformVersion} while also supporting older versions by adding
conditions to your code that check for the system API level before executing
APIs not supported by your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a>. 
To learn more about
maintaining backward-compatibility, read <a
href="{@docRoot}training/backward-compatible-ui/index.html">Creating Backward-Compatible
UIs</a>.</p>

<p>More information about how API levels work is available in <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
Level?</a></p>

</div>
</div>




<h2 id="Behaviors">Important Behavior Changes</h2>

<p>If you have previously published an app for Android, be aware of the following
changes that might affect your app’s behavior:</p>

<ul>
  <li><b>Content providers</b> are no longer exported by default. That is, the default value
for the <a href="{@docRoot}guide/topics/manifest/provider-element.html#exported">{@code
android:exported}</a> attribute is now {@code “false"}. If it’s important that other apps be
able to access your content provider, you must now explicitly set <a
href="{@docRoot}guide/topics/manifest/provider-element.html#exported">{@code
android:exported="true"}.</a>
    <p>This change takes effect only if you set either <a
    href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> to 17 or higher. Otherwise, the default value is still {@code “true"}
even when running on Android 4.2 and higher.</p>
  </li>
  
  <li>Compared to previous versions of Android, <b>user location</b> results may be less accurate
if your app requests the {@link android.Manifest.permission#ACCESS_COARSE_LOCATION} permission but
does not request the {@link android.Manifest.permission#ACCESS_FINE_LOCATION} permission.
    <p>To meet the privacy expectations of users when your app requests permission for
coarse location (and not fine location), the system will not provide a user location estimate
that’s more accurate than a city block.</p>
  </li>
  
  <li>Some <b>device settings</b> defined by {@link android.provider.Settings.System} are now
  read-only. If your app attempts to write changes to settings defined in {@link
  android.provider.Settings.System} that have moved to {@link android.provider.Settings.Global},
  the write operation will silently fail when running on Android 4.2 and higher.
    <p>Even if your value for <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> and <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> is lower than 17, your app is not able to modify the settings that have
moved to {@link android.provider.Settings.Global} when running on Android 4.2 and higher.</p>
  </li>

  <li>If your app uses {@link android.webkit.WebView}, Android 4.2 adds an additional layer of
  security so you can more safely <b>bind JavaScript to your
  Android code</b>. If you set your
  <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a>
  to 17 or higher, you must now add the {@code @JavascriptInterface} annotation to any method that you
  want available to your JavaScript (the method must also be public). If you do not provide the
  annotation, the method is not accessible by a web page in your {@link android.webkit.WebView}
  when running on Android 4.2 or higher. If you set the
  <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a>
  to 16 or lower, the annotation is not required, but we recommend that you update your target version
  and add the annotation for additional security.
    <p>Read more about <a href="{@docRoot}guide/webapps/webview.html#BindingJavaScript">binding
    JavaScript code to Android code</a>.</p></li>
</ul>






<h2 id="Daydream">Daydream</h2>

<p>Daydream is a new interactive screensaver mode for Android devices. It activates automatically
when the device is inserted into a dock or when the device is left idle while plugged in to a
charger (instead of turning the screen off). Daydream displays one dream at a time, which may
be a purely visual, passive display that dismisses upon touch, or may be interactive and responsive
to the full suite of input events. Your dreams run in your app’s process and have full access to
the Android UI toolkit, including views, layouts, and animations, so they are more flexible and
powerful than either live wallpapers or app widgets.</p>

<p>You can create a dream for Daydream by implementing a subclass of {@link
android.service.dreams.DreamService}. The {@link android.service.dreams.DreamService} APIs are
designed to be similar to those of {@link android.app.Activity}. To specify the UI for your
dream, pass a layout resource ID or {@link android.view.View} to {@link
android.service.dreams.DreamService#setContentView setContentView()} at any point after you have
a window, such as from the {@link android.service.dreams.DreamService#onAttachedToWindow()}
callback.</p>

<p>The {@link android.service.dreams.DreamService} class provides other important lifecycle callback
methods on top of the base {@link android.app.Service} APIs, such as {@link
android.service.dreams.DreamService#onDreamingStarted()}, {@link
android.service.dreams.DreamService#onDreamingStopped()}, and {@link
android.service.dreams.DreamService#onDetachedFromWindow()}.
You cannot initiate a {@link android.service.dreams.DreamService} from your
app&mdash;it is launched automatically by the system.</p>

<p>If your dream is interactive, you can start an activity from the dream to send the user into
your app’s full UI for more detail or control. You can use {@link
android.service.dreams.DreamService#finish()} to end the dream so the user can see the
new Activity.</p>

<p>To make your daydream available to the system, declare your {@link
android.service.dreams.DreamService} with a <a
href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service>}</a> element
in your manifest file. You must then include an intent filter with the action {@code
"android.service.dreams.DreamService"}. For example:</p>

<pre>
&lt;service android:name=".MyDream" android:exported="true"
    android:icon="@drawable/dream_icon" android:label="@string/dream_label" >
    &lt;intent-filter>
        &lt;action android:name="android.service.dreams.DreamService" />
        &lt;category android:name="android.intent.category.DEFAULT" />
    &lt;/intent-filter>
&lt;/service>
</pre>

<p>There are some other useful methods in {@link android.service.dreams.DreamService}
to be aware of:</p>

<ul>
  <li>{@link android.service.dreams.DreamService#setInteractive(boolean)} controls whether
the dream receives input events or exits immediately upon user input. If the dream is
interactive, the user may use the <em>Back</em> or <em>Home</em> buttons to exit the dream or you can call
{@link android.service.dreams.DreamService#finish()} to stop the dream.</li>
  <li>If you want a fully immersive display, you can call {@link
android.service.dreams.DreamService#setFullscreen
setFullscreen()} to hide the status bar.</li>
  <li>Before Daydream starts, the display dims to signal to the user that the idle timeout
is approaching. Calling {@link android.service.dreams.DreamService#setScreenBright
setScreenBright(true)} allows you to instead set the display at its usual brightness.</li>
</ul>

<p>For more information, see the {@link android.service.dreams.DreamService} documentation.</p>











<h2 id="SecondaryDisplays">Secondary Displays</h2>

<p>Android now allows your app to display unique content on additional screens that are connected
to the user’s device over either a wired connection or Wi-Fi.
 To create unique content for a secondary display, extend the {@link android.app.Presentation}
class and implement the {@link android.app.Presentation#onCreate onCreate()} callback. Within
{@link android.app.Presentation#onCreate onCreate()}, specify your UI for the secondary display
by calling {@link android.app.Presentation#setContentView setContentView()}.
As an extension of the {@link android.app.Dialog} class, the {@link
android.app.Presentation} class provides the region in which your app can display a unique UI on the
secondary display.</p>

<p>To detect secondary displays where you can display your {@link android.app.Presentation},
use either the {@link android.hardware.display.DisplayManager} or {@link android.media.MediaRouter}
APIs. While the {@link android.hardware.display.DisplayManager} APIs allow you to enumerate
multiple displays that may be connected at once, you should usually use {@link
android.media.MediaRouter} instead to quickly access the system’s default display for
presentations.</p>

<p>To get the default display for your presentation, call {@link
android.media.MediaRouter#getSelectedRoute MediaRouter.getSelectedRoute()} and pass it
{@link android.media.MediaRouter#ROUTE_TYPE_LIVE_VIDEO}. This returns a {@link
android.media.MediaRouter.RouteInfo} object that describes the system’s currently selected route
for video presentations. If the {@link android.media.MediaRouter.RouteInfo} is not null, call
{@link android.media.MediaRouter.RouteInfo#getPresentationDisplay()} to get the {@link
android.view.Display} representing the connected display.</p>

<p>You can then display your presentation by passing the {@link android.view.Display} object
to a constructor for your {@link android.app.Presentation} class. Your presentation will now
appear on the secondary display.</p>

<p>To detect at runtime when a new display has been connected, create an instance of {@link
android.media.MediaRouter.SimpleCallback} in which you implement the {@link
android.media.MediaRouter.SimpleCallback#onRoutePresentationDisplayChanged
onRoutePresentationDisplayChanged()} callback method, which the system will call when a new
presentation display is connected. Then register the {@link
android.media.MediaRouter.SimpleCallback} by passing it to {@link
android.media.MediaRouter#addCallback MediaRouter.addCallback()} along with the {@link
android.media.MediaRouter#ROUTE_TYPE_LIVE_VIDEO} route type. When you receive a call to
{@link android.media.MediaRouter.SimpleCallback#onRoutePresentationDisplayChanged
onRoutePresentationDisplayChanged()}, simply call {@link
android.media.MediaRouter#getSelectedRoute MediaRouter.getSelectedRoute()} as mentioned above.</p>

<p>To further optimize the UI in your {@link android.app.Presentation} for
secondary screens, you can apply
a different theme by specifying the {@link
android.R.attr#presentationTheme android:presentationTheme} attribute in the <a
href="{@docRoot}guide/topics/resources/style-resource.html">{@code &lt;style>}</a> that you’ve
applied to your application or activity.</p>

<p>Keep in mind that screens connected to the user’s device often have a larger screen size and
likely a different screen density. Because the screen characteristics may different, you should
provide resources that are optimized specifically for such larger displays. If you need
to request additional resources from your {@link
android.app.Presentation}, call {@link android.app.Presentation#getContext()}{@link
android.content.Context#getResources .getResources()} to get the {@link
android.content.res.Resources} object corresponding to the display. This provides
the appropriate resources from your app that are best suited for the
secondary display's screen size and density.</p>

<p>For more information and some code samples, see the {@link android.app.Presentation}
class documentation.</p>










<h2 id="Lockscreen">Lockscreen Widgets</h2>

<p>Android now allows users to add app widgets to the lock screen. To make your <a
href="{@docRoot}guide/topics/appwidgets/index.html">App Widget</a> available for use on the
lock screen, add the {@link android.appwidget.AppWidgetProviderInfo#widgetCategory
android:widgetCategory} attribute to your XML file that specifies the {@link
android.appwidget.AppWidgetProviderInfo}. This attribute supports two values: {@code home_screen}
and {@code keyguard}. By default, the attribute is set to {@code home_screen} so users can add your
app widget to the Home screen. If you want your app widget to be also available on the lock
screen, add the {@code keyguard} value:</p>

<pre>
&lt;appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:widgetCategory="keyguard|home_screen">
&lt;/appwidget-provider>
</pre>

<p>You should also specify an initial layout for your app widget when on the lock screen with
the {@link android.appwidget.AppWidgetProviderInfo#initialKeyguardLayout
android:initialKeyguardLayout} attribute. This works the same way as the {@link
android.appwidget.AppWidgetProviderInfo#initialLayout android:initialLayout}, in that it provides
a layout that can appear immediately until your app widget is initialized and able to update the
layout.</p>

<p>For more information about building app widgets for the lock screen, including to properly
size your app widget when on the lock screen, see the <a
href="{@docRoot}guide/topics/appwidgets/index.html#lockscreen">App Widgets</a> guide.</p>







<h2 id="MultipleUsers">Multiple Users</h2>

<p>Android now allows multiple user spaces on shareable devices such as tablets. Each user on a
device has his or her own set of accounts, apps, system settings, files, and any other
user-associated data.</p>

<p>As an app developer, there’s nothing different you need to do in order for your app to work
properly with multiple users on a single device. Regardless of how many users may exist on a
device, the data your app saves for a given user is kept separate from the data your app saves
for other users. The system keeps track of which user data belongs to the user process in which
your app is running and provides your app access to only that user’s data and does not allow
access to other users’ data.</p>

<h3>Saving data in a multi-user environment</h3>

<p>Whenever your app saves user preferences, creates a database, or writes a file to the user’s
internal or external storage space, that data is accessible only while running as that user.</p>

<p>To be certain that your app behaves properly in a multi-user environment, do not refer to your
internal app directory or external storage location using hard-coded paths and instead always use
the appropriate APIs:</p>
<ul>
  <li>For access to internal storage, use {@link android.content.Context#getFilesDir()}, {@link
android.content.Context#getCacheDir()}, or {@link android.content.Context#openFileOutput
openFileOutput()}.</li>
  <li>For access to external storage, use {@link android.content.Context#getExternalFilesDir
  getExternalFilesDir()} or {@link android.os.Environment#getExternalStoragePublicDirectory
  getExternalStoragePublicDirectory()}.
</ul>

<p>No matter which of these APIs you use to save data for a given user, the data will not be
accessible while running as a different user. From your app’s point of view, each user is running
on a completely separate device.</p>

<h3>Identifying users in a multi-user environment</h3>

<p>If your app wants to identify unique users such as to gather analytics or create other account
associations, you should follow the recommended practices for <a
href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">identifying
unique installations</a>. By creating a new {@link java.util.UUID} when your app starts for the
first time, you’re certain to obtain a unique ID for tracking each user, regardless of how many
users install your app on a single device. Alternatively, you can save a local token fetched from
your server or use the registrations ID provided by <a
href="{@docRoot}google/gcm/index.html">Google Cloud Messaging</a>.</p>

<p>Beware that if your app requests one of the hardware device identifiers (such as the WiFi MAC
address, the {@link android.os.Build#SERIAL} number, or the {@link
android.provider.Settings.Secure#ANDROID_ID} number), they will provide the same value for each
user because these identifiers are tied to the hardware and not the user. Not to mention the other
problems these identifiers introduce as discussed in the <a
href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">Identifying
App Installations</a> blog post.</p>

<h3>New Global Settings</h3>

<p>The system settings have been updated to support multiple users with the addition of {@link
android.provider.Settings.Global}. This collection of settings is similar to {@link
android.provider.Settings.Secure} settings because they are read-only, but applies globally across
all user spaces on the device.</p>

<p>Several existing settings were relocated here from either {@link
android.provider.Settings.System} or {@link android.provider.Settings.Secure}. If your app is
currently making changes to settings previously defined in {@link android.provider.Settings.System}
(such as {@link android.provider.Settings.System#AIRPLANE_MODE_ON}), then you should expect that
doing so will no longer work on a device running Android 4.2 or higher if those settings were
moved to {@link android.provider.Settings.Global}. You can continue to read settings that are in
{@link android.provider.Settings.Global}, but because the settings are no longer considered safe
for apps to change, attempting to do so will fail silently and the system will write a warning to
the system log when running your app on Android 4.2 or higher.</p>









<h2 id="RTL">RTL Layout Support</h2>

<p>Android now offers several APIs that allow you to build user interfaces that gracefully
transform layout orientation to support languages that use right-to-left (RTL) UIs and reading
direction, such as Arabic and Hebrew.</p>

<p>To begin supporting RTL layouts in your app, set the {@link android.R.attr#supportsRtl
android:supportsRtl} attribute to the {@code &lt;application>} element in your manifest file
and set it {@code “true"}. Once you enable this, the system will enable various RTL APIs to
display your app with RTL layouts. For instance, the action bar will show the icon and title
on the right side and action buttons on the left, and any layouts you’ve created with the
framework-provided {@link android.view.View} classes will also be reversed.</p>

<p>If you need to further optimize the appearance of your app when displayed with an RTL layout,
there are two basic levels of optimization:</p>

<ol>
  <li>Convert left- and right-oriented layout properties to start- and end-oriented layout
properties.   
    <p>For example, use {@link android.R.attr#layout_marginStart android:layout_marginStart}
in place of {@code android:layout_marginLeft} and {@link android.R.attr#layout_marginEnd
android:layout_marginEnd} in place of  {@code android:layout_marginRight}.
    <p>The {@link android.widget.RelativeLayout} class also provides the corresponding layout
attributes to replace left/right positions, such as {@code android:layout_alignParentStart} to
replace {@code android:layout_alignParentLeft} and {@code android:layout_toStartOf} instead of
{@code android:layout_toLeftOf}.
  </li>
  <li>Or to provide complete optimization for RTL layouts, you can provide entirely separate
layout files using the {@code ldrtl} resource qualifier ({@code ldrtl} stands for
layout-direction-right-to-left}). For example, you can save your default layout files in
{@code res/layout/} and your RTL optimized layouts in {@code res/layout-ldrtl/}.
    <p>The {@code ldrtl} qualifier is great for drawable resources, so that you can provide
graphics that are oriented in the direction corresponding to the reading direction.</p>
  </li>
</ol>

<p>Various other APIs are available across the framework to support RTL layouts, such as in
the {@link android.view.View} class so that you can implement the proper behaviors for custom
views and in {@link android.content.res.Configuration} to query the current layout direction.</p>

<p><strong>Note:</strong> If you are using SQlite and have tables or column names that are
“number only," be
careful: using <a href="{@docRoot}reference/java/lang/String.html#format(String, Object...)">{@code
String.format(String, Object...)}</a> can lead to errors where the numbers
have been converted to their Arabic equivalents if your device has been set to the Arabic locale.
You must use <a href="{@docRoot}reference/java/lang/String.html#format(Locale,String,Object...)">{@code
String.format(Locale,String,Object...)}</a> to ensure numbers are
preserved as ASCII. Also use <a href="{@docRoot}reference/java/lang/String.html#format(String,int)">{@code
String.format("%d", int)}</a> instead of using
<a href="{@docRoot}reference/java/lang/String.html#valueOf(int)">{@code String.valueOf(int)}</a> for
formatting numbers.</p>













<h2 id="NestedFragments">Nested Fragments</h2>

<p>You can now embed fragments inside fragments. This is useful for a variety of situations in
which you want to place dynamic and re-usable UI components into a UI component that is itself
dynamic and re-usable. For example, if you use {@link android.support.v4.view.ViewPager} to
create fragments that swipe left and right and consume a majority of the screen space, you can
now insert fragments into each fragment page.</p>

<p>To nest a fragment, simply call {@link android.app.Fragment#getChildFragmentManager()} on
the {@link android.app.Fragment} in which you want to add a fragment. This returns a {@link
android.app.FragmentManager} that you can use like you normally do from the top-level activity
to create fragment transactions. For example, here’s some code that adds a fragment from within
an existing {@link android.app.Fragment} class:</p>

<pre>
Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();
</pre>

<p>From within a nested fragment, you can get a reference to the parent fragment by calling
{@link android.app.Fragment#getParentFragment()}.</p>

<p>The Android Support Library also now supports nested fragments, so you can implement nested
fragment designs on Android 1.6 and higher.</p>

<p><strong>Note:</strong> You cannot inflate a layout into a fragment when that layout
includes a {@code &lt;fragment>}. Nested fragments are only supported when added to a
fragment dynamically.</p>






<h2 id="Renderscript">Renderscript</h2>

<p>Renderscript computation functionality has been enhanced with the following features:</p>
<dl>
  <dt><b>Script intrinsics</b></dt>
  <dd><p>You can use Renderscript's built-in script intrinsics that implement
common operations for you such as:</p>
    <ul>
    <li>{@link android.renderscript.ScriptIntrinsicBlend Blends}</li>
    <li>{@link android.renderscript.ScriptIntrinsicBlur Blur}</li>
    <li>{@link android.renderscript.ScriptIntrinsicColorMatrix Color matrix}</li>
    <li>{@link android.renderscript.ScriptIntrinsicConvolve3x3 3x3 convolve}</li>
    <li>{@link android.renderscript.ScriptIntrinsicConvolve5x5 5x5 convolve}</li>
    <li>{@link android.renderscript.ScriptIntrinsicLUT Per-channel lookup table}</li>
    <li>{@link android.renderscript.ScriptIntrinsicYuvToRGB Converting an Android YUV buffer to RGB}</li>
    </ul>
  <p>To use a script intrinsic, call the static <code>create()</code> method of each instrinsic
  to create an instance of the script. You then call the available <code>set()</code>
  methods of each script intrinsic to set any necessary inputs and options.
  Finally, call the {@link android.renderscript.ScriptC#forEach forEach()}</code>
  method to execute the script.</p>
  </dd>


<dt><b>Script Groups</b></dt>
<dd>
<p>{@link android.renderscript.ScriptGroup}s allow you to chain together related Renderscript
scripts and execute them with one call.</p>

<p>Use a {@link android.renderscript.ScriptGroup.Builder} to add all of the scripts to the group
by calling {@link android.renderscript.ScriptGroup.Builder#addKernel addKernel()}. Once you
add all the scripts, create the connections between the
scripts by calling {@link android.renderscript.ScriptGroup.Builder#addConnection addConnection()}.
When you are done adding the connections, call {@link android.renderscript.ScriptGroup.Builder#create create()}
to create the script group. Before executing the script group, specify the input
{@link android.renderscript.Allocation} and initial script to run with the 
{@link android.renderscript.ScriptGroup#setInput} method and provide the output
{@link android.renderscript.Allocation} where the result will be written to and final script to
run with {@link android.renderscript.ScriptGroup#setOutput setOutput()}. Finally, call
{@link android.renderscript.ScriptGroup#execute execute()} to run the script group.
</p>
</dd>

<dt><b>Filterscript</b></dt>
<dd>
<p>Filterscript defines constraints on the existing Renderscript APIs that allow the resulting code to run
on a wider variety of processors (CPUs, GPUs, and DSPs). To create Filterscript files, create <code>.fs</code>
files instead of <code>.rs</code> files, and specify <code>#pragma rs_fp_relaxed</code> to
tell the Renderscript runtime your scripts do not require strict IEEE 754-2008 floating point precision.
This precision allows flush-to-zero for denorms and round-towards-zero. In addition, your Filterscript
scripts must not use 32-bit built-in types and must specify a custom root function by using the
<code>__attribute__((kernel))</code> attribute because Filterscript does not support pointers, which
the default signature of the <code>root()</code> function defines.</p>
</dd>

</dl>

<p class="note"><strong>Note:</strong> Although Filterscript support is in the platform, developer
support will be available in ADT and SDK Tools Release 21.0.1. </p>


<p>For a detailed view of all API changes in Android 4.2, see the
<a href="{@docRoot}sdk/api_diff/17/changes.html">API Differences Report</a>.</p>



