page.title=Android 2.3.4 Platform
sdk.platform.version=2.3.4
sdk.platform.apiLevel=10


@jd:body

<div id="qv-wrapper">
<div id="qv">

<h2>In this document</h2>
<ol>
  <li><a href="#relnotes">Revisions</a></li>
  <li><a href="#api">API Overview</a></li>
  <li><a href="#openaccessory">Open Accessory Library</a></li>
  <li><a href="#api-level">API Level</a></li>
  <li><a href="#apps">Built-in Applications</a></li>
  <li><a href="#locs">Locales</a></li>
  <li><a href="#skins">Emulator Skins</a></li>
</ol>

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

<h2>See Also</h2>
<ol>
  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
</ol>

</div>
</div>

<p>
<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>

<p>Android 2.3.4 is a maintenance release that adds several bug fixes and patches
to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, 
Android 2.3.4 brings support for the Open Accessory API to mobile devices,
through the optional <a href="#usb">Open Accessory Library</a>. </p>

<p>For developers, the Android {@sdkPlatformVersion} platform and the Open
Accessory Library are available together in the latest version of the Google
APIs Add-On, a downloadable component for the Android SDK.</p>

<p>To get started developing or testing against Android {@sdkPlatformVersion},
use the Android SDK Manager to download the latest version of the Google APIs
Add-On into your SDK. For more information, see <a
href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>. If you
are new to Android, <a href="{@docRoot}sdk/index.html">download the SDK Starter
Package</a> first.</p>

<p>For a high-level introduction to Android 2.3, see the <a
href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>


<h2 id="relnotes">Revisions</h2>

<p>The sections below provide notes about successive releases of
the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
revision number. To determine what revision(s) of the Android
{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
the "Installed Packages" listing in the Android SDK and AVD Manager.</p>

<script type="text/javascript">
function toggleDiv(link) {
  var toggleable = $(link).parent();
  if (toggleable.hasClass("closed")) {
    //$(".toggleme", toggleable).slideDown("fast");
    toggleable.removeClass("closed");
    toggleable.addClass("open");
    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
  } else {
    //$(".toggleme", toggleable).slideUp("fast");
    toggleable.removeClass("open");
    toggleable.addClass("closed");
    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
  }
  return false;
}
</script>
<style>
.toggleable {
  padding: .25em 1em 0em 1em;
  margin-bottom: 0;
}
.toggleme {
  padding: 1em 1em 0 2em;
  line-height:1em;
}
.toggleable a {
  text-decoration:none;
}
.toggleme a {
  text-decoration:underline;
}
.toggleable.closed .toggleme {
  display:none;
}
#jd-content .toggle-img {
  margin:0;
}
</style>

<div class="toggleable opened">
  <a href="#" onclick="return toggleDiv(this)">
        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
        Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2011)</em></a>
  <div class="toggleme">
<dl>
<dt>Dependencies:</dt>
<dd>
<p>Requires SDK Tools r11 or higher.</p>
</dd>

</dl>
 </div>
</div>


<h2 id="api">API Overview</h2>

<p>Android 2.3.4 provides the same framework API to applications as Android 2.3.3
(API level 10). For a summary of the API, see the
<a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.3 version notes</a>.</p>


<h2 id="openaccessory">Open Accessory Library</h2>

<p><em>Open Accessory</em> is a new capability for integrating
connected peripherals with applications running on the platform. The capability
is based on a USB (Universal Serial Bus) stack built into the platform and an
API exposed to applications. Peripherals that attach to Android-powered devices
as accessories connect as USB hosts. </p>

<p>Open Accessory is introduced in <a
href="{@docRoot}sdk/android-3.1.html#usb">Android 3.1</a> (API level 12), but is
made available to devices running Android 2.3.4 by means of an optional external
library, the Open Accessory Library. The library exposes a framework API that
lets applications discover, communicate with, and manage a variety of device
types connected over USB. It also provides the implementation of the API against
parts of the Android platform that are not directly exposed to applications in
Android 2.3.4.</p>

<p>The Open Accessory Library is optional on any given device. Device
manufacturers may choose whether to include the Open Accessory Library in their
products or exclude it. The library is forward-compatible with Android 3.1, so
applications developed against Android 2.3.4 will run properly on devices
running Android 3.1, if those devices support USB accessories. </p>

<p>The API provided by the Open Accessory Library is based on the Open Accessory
API provided in Android 3.1. In most areas, you can use the same techniques and
APIs. However, developing for the Open Accessory Library on Android 2.3.4 differs
from the standard USB API in these ways:

<ul>
<li>Obtaining a {@link android.hardware.usb.UsbManager} object &mdash; To obtain
a {@link android.hardware.usb.UsbManager} object when using the add-on library,
use the helper method <code>getInstance()</code> rather than {@link
android.content.Context#getSystemService(java.lang.String) getSystemService()}
For example:

<pre>UsbManager manager = UsbManager.getInstance(this);</pre></li>

<li>Obtaining a {@link android.hardware.usb.UsbAccessory} from a filtered intent
&mdash; When you filter for a connected device or accessory with an intent
filter, the {@link android.hardware.usb.UsbAccessory} object is contained
inside the intent that is passed to your application. If you are using the
add-on library, you can get the {@link android.hardware.usb.UsbAccessory} object
in the following manner:

<pre>UsbAccessory accessory = UsbManager.getAccessory(intent)</pre></li>

<li>No USB host support &mdash; Android 2.3.4 and the Open Accessory Library do
not support USB host mode (for example, through {@link
android.hardware.usb.UsbDevice}), although USB host mode is supported in Android
3.1. An Android-powered device running Android 2.3.4 can not function as a USB
host. The library enables the Android-powered device to function as
a peripheral only, with the connected accessory functioning as USB host
(through {@link android.hardware.usb.UsbAccessory}).</li>
</ul>

<p>To develop apps using the Open Accessory Library, you need:</p>

<ul>
<li>The latest version of the Android SDK tools</li>
<li>The latest version of the Google APIs add-on, which includes the library
itself (for linking)</li>
<li>An actual hardware device running Android 2.3.4 (or Android 3.1) with USB
accessories support, for runtime testing against connected devices</li>
</ul>

<p>For a full discussion of how to develop applications that interact with USB
accessories, please see the related <a
href="{@docRoot}guide/topics/usb/index.html">developer documentation</a>.</p>

<p>Additionally, developers can request filtering on Android Market, such that
their applications are not available to users whose devices do not provide the
appropriate accessory support. To request filtering, add the element below
to the application manifest:</p>

<pre>&lt;uses-feature
  android:name="android.hardware.usb.accessory"
  android:required="true"&gt;</pre>


<h2 id="api-level">API Level</h2>

<p>The Android 2.3.4 platform does <em>not</em> increment the API level &mdash;
it uses the same API level as Android 2.3.3, API level 10.

<p>To use APIs introduced in API level 10 in your application,
you need compile the application against the Android library that is provided in
the latest version of the Google APIs Add-On, which also includes the Open
Accessory Library.</p>

<p>Depending on your needs, you might
also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
manifest. If your application is designed to run only on Android 2.3.3 and higher,
declaring the attribute prevents the application from being installed on earlier
versions of the platform.</p>

<p>For more information about how to use API Level, see the <a
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>

<h2 id="apps">Built-in Applications</h2>

<p>The system image included in the downloadable platform provides these
built-in applications:</p>

<table style="border:0;padding-bottom:0;margin-bottom:0;">
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
<li>Browser</li>
<li>Calculator</li>
<li>Camera</li>
<li>Clock</li>
<li>Contacts</li>
<li>Custom Locale</li>
<li>Dev Tools</li>
<li>Downloads</li>
<li>Email</li>
</ul>
</td>
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<ul>
<li>Gallery</li>
<li>IMEs for Japanese, Chinese, and Latin text input</li>
<li>Messaging</li>
<li>Music</li>
<li>Phone</li>
<li>Search</li>
<li>Settings</li>
<li>Spare Parts (developer app)</li>
<li>Speech Recorder</li>
</ul>
</td>
</tr>
</table>


<h2 id="locs" style="margin-top:.75em;">Locales</h2>

<p>The system image included in the downloadable SDK platform provides a variety of
built-in locales. In some cases, region-specific strings are available for the
locales. In other cases, a default version of the language is used. The
languages that are available in the Android {@sdkPlatformVersion} system
image are listed below (with <em>language</em>_<em>country/region</em> locale
descriptor).</p>

<table style="border:0;padding-bottom:0;margin-bottom:0;">
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
<li>Arabic, Egypt (ar_EG)</li>
<li>Arabic, Israel (ar_IL)</li>
<li>Bulgarian, Bulgaria (bg_BG)</li>
<li>Catalan, Spain (ca_ES)</li>
<li>Czech, Czech Republic (cs_CZ)</li>
<li>Danish, Denmark(da_DK)</li>
<li>German, Austria (de_AT)</li>
<li>German, Switzerland (de_CH)</li>
<li>German, Germany (de_DE)</li>
<li>German, Liechtenstein (de_LI)</li>
<li>Greek, Greece (el_GR)</li>
<li>English, Australia (en_AU)</li>
<li>English, Canada (en_CA)</li>
<li>English, Britain (en_GB)</li>
<li>English, Ireland (en_IE)</li>
<li>English, India (en_IN)</li>
<li>English, New Zealand (en_NZ)</li>
<li>English, Singapore(en_SG)</li>
<li>English, US (en_US)</li>
<li>English, South Africa (en_ZA)</li>
<li>Spanish (es_ES)</li>
<li>Spanish, US (es_US)</li>
<li>Finnish, Finland (fi_FI)</li>
<li>French, Belgium (fr_BE)</li>
<li>French, Canada (fr_CA)</li>
<li>French, Switzerland (fr_CH)</li>
<li>French, France (fr_FR)</li>
<li>Hebrew, Israel (he_IL)</li>
<li>Hindi, India (hi_IN)</li>
</ul>
</td>
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<ul>
<li>Croatian, Croatia (hr_HR)</li>
<li>Hungarian, Hungary (hu_HU)</li>
<li>Indonesian, Indonesia (id_ID)</li>
<li>Italian, Switzerland (it_CH)</li>
<li>Italian, Italy (it_IT)</li>
<li>Japanese (ja_JP)</li>
<li>Korean (ko_KR)</li>
<li>Lithuanian, Lithuania (lt_LT)</li>
<li>Latvian, Latvia (lv_LV)</li>
<li>Norwegian-Bokmol, Norway(nb_NO)</li>
<li>Dutch, Belgium (nl_BE)</li>
<li>Dutch, Netherlands (nl_NL)</li>
<li>Polish (pl_PL)</li>
<li>Portuguese, Brazil (pt_BR)</li>
<li>Portuguese, Portugal (pt_PT)</li>
<li>Romanian, Romania (ro_RO)</li>
<li>Russian (ru_RU)</li></li>
<li>Slovak, Slovakia (sk_SK)</li>
<li>Slovenian, Slovenia (sl_SI)</li>
<li>Serbian (sr_RS)</li>
<li>Swedish, Sweden (sv_SE)</li>
<li>Thai, Thailand (th_TH)</li>
<li>Tagalog, Philippines (tl_PH)</li>
<li>Turkish, Turkey (tr_TR)</li>
<li>Ukrainian, Ukraine (uk_UA)</li>
<li>Vietnamese, Vietnam (vi_VN)</li>
<li>Chinese, PRC (zh_CN)</li>
<li>Chinese, Taiwan (zh_TW)</li>
</ul>
</td>
</tr>
</table>

<p class="note"><strong>Note:</strong> The Android platform may support more
locales than are included in the SDK system image. All of the supported locales
are available in the <a href="http://source.android.com/">Android Open Source
Project</a>.</p>

<h2 id="skins">Emulator Skins</h2>

<p>The downloadable platform includes a set of emulator skins that you can use
for modeling your application in different screen sizes and resolutions. The
emulator skins are:</p>

<ul>
  <li>
    QVGA (240x320, low density, small screen)
  </li>
  <li>
    WQVGA400 (240x400, low density, normal screen)
  </li>
  <li>
    WQVGA432 (240x432, low density, normal screen)
  </li>
  <li>
    HVGA (320x480, medium density, normal screen)
  </li>
  <li>
    WVGA800 (480x800, high density, normal screen)
  </li>
  <li>
    WVGA854 (480x854 high density, normal screen)
  </li>
</ul>

<p>For more information about how to develop an application that displays
and functions properly on all Android-powered devices, see <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a>.</p>
