Home | History | Annotate | Download | only in sdk
      1 page.title=Android 4.0.3 Platform
      2 sdk.platform.version=4.0.3
      3 sdk.platform.apiLevel=15
      4 @jd:body
      5 
      6 <div id="qv-wrapper">
      7 <div id="qv">
      8 
      9 <h2>In this document</h2>
     10 <ol>
     11   <li><a href="#relnotes">Revisions</a></li>
     12   <li><a href="#api">API Overview</a></li>
     13   <li><a href="#Honeycomb">Previous APIs</a></li>
     14   <li><a href="#api-level">API Level</a></li>
     15   <li><a href="#apps">Built-in Applications</a></li>
     16   <li><a href="#locs">Locales</a></li>
     17   <li><a href="#skins">Emulator Skins</a></li>
     18 </ol>
     19 
     20 <h2>Reference</h2>
     21 <ol>
     22 <li><a
     23 href="{@docRoot}sdk/api_diff/15/changes.html">API
     24 Differences Report &raquo;</a> </li>
     25 </ol>
     26 
     27 </div>
     28 </div>
     29 
     30 <p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
     31 
     32 <p>Android {@sdkPlatformVersion} is an incremental release of the Android 4.x
     33 (Ice Cream Sandwich) platform family. This release includes new features for
     34 users and developers, API changes, and various bug fixes.</p>
     35 
     36 <p>For developers, the Android {@sdkPlatformVersion} platform is available as a
     37 downloadable component for the Android SDK. The development platform includes a
     38 fully compliant Android library and system image as well as a set of emulator
     39 skins, sample applications, and more. The downloadable platform includes no
     40 external libraries.</p>
     41 
     42 <p>To start developing or testing against Android {@sdkPlatformVersion},
     43 use the Android SDK Manager to download the platform into your SDK. For more
     44 information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
     45 Components</a>. If you are new to Android, <a
     46 href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
     47 
     48 <p>For a high-level overview of the new user and developer features, see the
     49 <a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform
     50 Highlights</a>.</p>
     51 
     52 
     53 <h2 id="relnotes">Development Platform Revisions</h2>
     54 
     55 <p>The sections below provide notes about successive revisions of the Android
     56 {@sdkPlatformVersion} development platform for the Android SDK, as denoted by
     57 revision number. To determine what revisions you have installed in your SDK
     58 environment, refer to the "Installed Packages" listing in the Android SDK
     59 Manager.</p>
     60 
     61 <p class="caution"><strong>Important:</strong> To download the new Android
     62 4.0.x system components from the Android SDK Manager, you must first update the
     63 SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
     64 the Android 4.0.x system components will not be available for download.</p>
     65 
     66 <div class="toggle-content opened" style="padding-left:1em;">
     67 
     68   <p><a href="#" onclick="return toggleContent(this)">
     69     <img src="{@docRoot}assets/images/triangle-opened.png"
     70 class="toggle-content-img" alt="" />
     71     Android {@sdkPlatformVersion}, Revision 2</a> <em>(January 2012)</em>
     72   </a></p>
     73 
     74   <div class="toggle-content-toggleme" style="padding-left:2em;">
     75 
     76 <dl>
     77 <dt>Maintenance release. SDK Tools r14 or higher is required.
     78 </dt>
     79 </dl>
     80 
     81   </div>
     82 </div>
     83 
     84 <div class="toggle-content closed" style="padding-left:1em;">
     85 
     86   <p><a href="#" onclick="return toggleContent(this)">
     87     <img src="{@docRoot}assets/images/triangle-closed.png"
     88 class="toggle-content-img" alt="" />
     89     Android {@sdkPlatformVersion}, Revision 1</a> <em>(December 2011)</em>
     90   </a></p>
     91 
     92   <div class="toggle-content-toggleme" style="padding-left:2em;">
     93 
     94 <dl>
     95 <dt>Initial release. SDK Tools r14 or higher is required.
     96 </dt>
     97 </dl>
     98 
     99   </div>
    100 </div>
    101 
    102 <h2 id="api">API Overview</h2>
    103 
    104 <p>The sections below provide a technical overview of new APIs in Android 4.0.3.</p>
    105 
    106 <div class="toggle-content closed" style="padding-left:1em;">
    107 
    108   <p><a href="#" onclick="return toggleContent(this)">
    109     <img src="{@docRoot}assets/images/triangle-closed.png"
    110 class="toggle-content-img" alt="" />
    111     <strong>Table of Contents</strong>
    112   </a></p>
    113 
    114   <div class="toggle-content-toggleme" style="padding-left:2em;">
    115     <ol class="toc" style="margin-left:-1em">
    116       <li><a href="#contacts">Social stream API in Contacts Provider</a></li>
    117       <li><a href="#calendar">Calendar Provider</a></li>
    118       <li><a href="#widgets">Home screen widgets</a></li>
    119       <li><a href="#textservices">Spell-checking</a></li>
    120       <li><a href="#bluetooth">Bluetooth</a></li>
    121       <li><a href="#ui">UI toolkit</a></li>
    122       <li><a href="#accessibility">Accessibility</a></li>
    123       <li><a href="#tts">Text-to-speech</a></li>
    124       <li><a href="#database">Database</a></li>
    125       <li><a href="#intents">Intents</a></li>
    126       <li><a href="#camera">Camera</a></li>
    127       <li><a href="#permissions">Permissions</a></li>
    128     </ol>
    129   </div>
    130 </div>
    131 
    132 
    133 
    134 
    135 
    136 <h3 id="contacts">Social stream API in Contacts Provider</h3>
    137 
    138 <p>Applications that use social stream data such as status updates and check-ins
    139 can now sync that data with each of the users contacts, providing items in a
    140 stream along with photos for each.</p>
    141 
    142 <p>The database table that contains an individual contacts social stream is
    143 defined by {@link android.provider.ContactsContract.StreamItems}, the Uri for
    144 which is nested within the {@link android.provider.ContactsContract.RawContacts}
    145 directory to which the stream items belong. Each social stream table includes
    146 several columns for metadata about each stream item, such as an icon
    147 representing the source (an avatar), a label for the item, the primary text
    148 content, comments about the item (such as responses from other people), and
    149 more. Photos associated with a stream are stored in another table, defined by
    150 {@link android.provider.ContactsContract.StreamItemPhotos}, which is available
    151 as a sub-directory of the {@link android.provider.ContactsContract.StreamItems}
    152 Uri.</p>
    153 
    154 <p>See {@link android.provider.ContactsContract.StreamItems} and
    155 {@link android.provider.ContactsContract.StreamItemPhotos} for more information.</p>
    156 
    157 <p>To read or write social stream items for a contact, an application must
    158 request permission from the user by declaring <code>&lt;uses-permission
    159 android:name="android.permission.READ_SOCIAL_STREAM"&gt;</code> and/or <code>&lt;uses-permission
    160 android:name="android.permission.WRITE_SOCIAL_STREAM"&gt;</code> in their manifest files.</p>
    161 
    162 <h3 id="calendar">Calendar Provider</h4>
    163 <ul>
    164 <li>Adds the class {@link android.provider.CalendarContract.Colors} to represent
    165 a color table in the <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar
    166 Provider</a>. The class provides fields for accessing
    167 colors available for a given account. Colors are referenced by 
    168 {@link android.provider.CalendarContract.ColorsColumns#COLOR_KEY COLOR_KEY}
    169 which must be unique for a given account name/type. These values can only be
    170 updated by the sync adapter.</li>
    171 <li>Adds {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_AVAILABILITY ALLOWED_AVAILABILITY}
    172 and 
    173 {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_ATTENDEE_TYPES ALLOWED_ATTENDEE_TYPES}
    174 for exchange/sync support.</li>
    175 <li>Adds {@link android.provider.CalendarContract.AttendeesColumns#TYPE_RESOURCE}
    176 (such as conference rooms) for attendees and 
    177 {@link android.provider.CalendarContract.EventsColumns#AVAILABILITY_TENTATIVE},
    178 as well as {@link android.provider.CalendarContract.EventsColumns#EVENT_COLOR_KEY}
    179 for events.</li>
    180 </ul>
    181 
    182 <h3 id="widgets">Home screen widgets</h3>
    183 
    184 <p>Starting from Android 4.0, home screen widgets should no longer include their
    185 own padding. Instead, the system now automatically adds padding for each widget,
    186 based the characteristics of the current screen. This leads to a more uniform,
    187 consistent presentation of widgets in a grid. To assist applications that host
    188 home screen widgets, the platform provides a new method 
    189 {@link android.appwidget.AppWidgetHostView#getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect)
    190 getDefaultPaddingForWidget()}. Applications can call this method to get the
    191 system-defined padding and account for it when computing the number of cells to
    192 allocate to the widget.</p>
    193 
    194 <h3 id="textservices">Spell-checking</h3>
    195 
    196 <ul>
    197 <li>For apps that accessing spell-checker services, a new {@link
    198 android.view.textservice.SpellCheckerSession#cancel() cancel()} method cancels
    199 any pending and running spell-checker tasks in a session.</li>
    200 
    201 <li>For spell-checker services, a new suggestions flag, 
    202 {@link android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS},
    203 lets the services distinguish higher-confidence suggestions from
    204 lower-confidence ones. For example, a spell-checker could set the flag if an
    205 input word is not in the user dictionary but has likely suggestions, or not set
    206 the flag if an input word is not in the dictionary and has suggestions that are
    207 likely to be less useful.
    208 
    209 <p>Apps connected to the spell-checker can use the {@link
    210 android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS}
    211 flag in combination with other suggestion attributes, as well as the {@link
    212 android.view.textservice.SuggestionsInfo#getSuggestionsAttributes()} and {@link
    213 android.view.textservice.SuggestionsInfo#getSuggestionsCount()} methods, to
    214 determine whether to mark input words as typos and offer suggestions.</p></li>
    215 
    216 <li>A new {@link android.text.style.SuggestionSpan#FLAG_AUTO_CORRECTION} style
    217 for text spans indicates that auto correction is about to be applied to a
    218 word/text that the user is typing/composing. This type of suggestion is rendered
    219 differently, to indicate the auto correction is happening.</li>
    220 </ul>
    221 
    222 <h3 id="bluetooth">Bluetooth</h3>
    223 <p>New public methods {@link
    224 android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()} and {@link
    225 android.bluetooth.BluetoothDevice#getUuids()} let apps determine the features
    226 (UUIDs) supported by a remote device. In the case of {@link
    227 android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()}, the system performs a
    228 service discovery on the remote device to get the UUIDs supported, then
    229 broadcasts the result in an {@link
    230 android.bluetooth.BluetoothDevice#ACTION_UUID} intent.</p>
    231 
    232 <h3 id="ui">UI toolkit</h3>
    233 
    234 <p>New methods {@link android.app.Fragment#setUserVisibleHint(boolean) setUserVisibleHint()} and
    235 {@link android.app.Fragment#getUserVisibleHint() getUserVisibleHint()} allow a
    236 fragment to set a hint of whether or not it is currently user-visible. The
    237 system defers the start of fragments that are not user-visible until the loaders
    238 for visible fragments have run. The visibility hint is "true" by default.</li>
    239 </p>
    240 
    241 <h3 id="graphics">Graphics</h3>
    242 
    243 <ul>
    244 <li>New method {@link android.graphics.SurfaceTexture#setDefaultBufferSize(int
    245 width, int height)} in {@link android.graphics.SurfaceTexture} sets the default size of the image
    246 buffers. This method may be used to set the image size when producing images
    247 with {@link android.graphics.Canvas} (via {@link
    248 android.view.Surface#lockCanvas}), or OpenGL ES (via an EGLSurface).</li>
    249 <li>Adds definitions for the enums of the GL_OES_EGL_image_external OpenGL ES extension &mdash;
    250 {@link android.opengl.GLES11Ext#GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES},
    251 {@link android.opengl.GLES11Ext#GL_SAMPLER_EXTERNAL_OES},
    252 {@link android.opengl.GLES11Ext#GL_TEXTURE_BINDING_EXTERNAL_OES}, and
    253 {@link android.opengl.GLES11Ext#GL_TEXTURE_EXTERNAL_OES}.</li>
    254 </ul>
    255 
    256 <h3 id="accessibility">Accessibility</h3>
    257 
    258 <ul>
    259 <li>Clients of {@link android.widget.RemoteViews} can now use the method {@link
    260 android.widget.RemoteViews#setContentDescription(int, java.lang.CharSequence)
    261 setContentDescription()} to set and get the content description of any View in
    262 the inflated layout.</li>
    263 
    264 <li>The methods {@link android.view.accessibility.AccessibilityRecord#getMaxScrollX()},
    265 {@link android.view.accessibility.AccessibilityRecord#getMaxScrollY()},
    266 {@link android.view.accessibility.AccessibilityRecord#setMaxScrollX(int) setMaxScrollX()}, and
    267 {@link android.view.accessibility.AccessibilityRecord#setMaxScrollY(int) setMaxScrollY()}
    268 allow apps to get and set the maximum scroll offset for an
    269 {@link android.view.accessibility.AccessibilityRecord} object.</li>
    270 
    271 <li>When touch-exploration mode is enabled, a new secure setting 
    272 {@link android.provider.Settings.Secure#ACCESSIBILITY_SPEAK_PASSWORD} 
    273 indicates whether the user requests the IME to speak text entered in password fields, even when
    274 a headset is not in use. By default, no password text is spoken unless a headset
    275 is in use.</li>
    276 </ul>
    277 
    278 <h3 id="tts">Text-to-speech</h3>
    279 
    280 <ul>
    281 <li>Adds the new method {@link
    282 android.speech.tts.TextToSpeech.Engine#getFeatures(java.util.Locale)
    283 getFeatures()}for querying and enabling network TTS support.
    284 <li>Adds a new listener class, {@link
    285 android.speech.tts.UtteranceProgressListener}, that engines can register to
    286 receive notification of speech-synthesis errors.</li>
    287 </ul>
    288 
    289 <h3 id="database">Database</h3>
    290 
    291 <ul>
    292 <li>A new {@link android.database.CrossProcessCursorWrapper} class lets content
    293 providers return results for a cross-process query more efficiently. The new
    294 class is a useful building block for wrapping cursors that will be sent to
    295 processes remotely. It can also transform normal {@link android.database.Cursor}
    296 objects into {@link android.database.CrossProcessCursor} objects
    297 transparently.
    298 
    299 <p>The {@link android.database.CrossProcessCursorWrapper} class fixes common
    300 performance issues and bugs that applications have encountered when
    301 implementing content providers.</p></li>
    302 
    303 <li>The {@link android.database.CursorWindow#CursorWindow(java.lang.String)}
    304 constructor now takes a name string as input. The system no longer distinguishes
    305 between local and remote cursor windows, so {@link
    306 android.database.CursorWindow#CursorWindow(boolean)} is now deprecated.</li>
    307 </ul>
    308 
    309 <h3 id="intents">Intents</h3>
    310 
    311 <p>Adds new categories for targeting common types of applications on the
    312 device, such as {@link android.content.Intent#CATEGORY_APP_BROWSER}, {@link
    313 android.content.Intent#CATEGORY_APP_CALENDAR}, {@link
    314 android.content.Intent#CATEGORY_APP_MAPS}, and more.</li>
    315 
    316 <h3 id="camera">Camera</h3>
    317 
    318 <ul>
    319 <li>{@link android.media.MediaMetadataRetriever} adds the new constant
    320 {@link android.media.MediaMetadataRetriever#METADATA_KEY_LOCATION} to let apps
    321 access retrieve location information for an image or video. </li>
    322 
    323 <li>{@link android.media.CamcorderProfile} adds the QVGA (320x240) resolution
    324 profiles. Quality level is represented by the
    325 {@link android.media.CamcorderProfile#QUALITY_QVGA}.and
    326 {@link android.media.CamcorderProfile#QUALITY_TIME_LAPSE_QVGA} constants.</li>
    327 
    328 <li>New methods {@link android.hardware.Camera.Parameters#setVideoStabilization(boolean) setVideoStabilization()},
    329 {@link android.hardware.Camera.Parameters#getVideoStabilization() setVideoStabilization()}, and {@link android.hardware.Camera.Parameters#isVideoStabilizationSupported() isVideoStabilizationSupported()}
    330 let you check and manage video stabilization for a {@link android.hardware.Camera}.</li>
    331 </ul>
    332 
    333 <h3 id="Permissions">Permissions</h3>
    334 
    335 <p>The following are new permissions:</p>
    336 <ul>
    337 <li>{@link android.Manifest.permission#READ_SOCIAL_STREAM} and 
    338 {@link android.Manifest.permission#WRITE_SOCIAL_STREAM}: Allow a sync
    339 adapter to read and write social stream data to a contact in the shared
    340 Contacts Provider.</li>
    341 </ul>
    342 
    343 
    344 <div class="special" style="margin-top:2em">
    345 <p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
    346 {@sdkPlatformApiLevel}), see the <a
    347 href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
    348 </div>
    349 
    350 
    351 <h2 id="api-level">API Level</h2>
    352 
    353 <p>The Android {@sdkPlatformVersion} API is assigned an integer
    354 identifier&mdash;<strong>{@sdkPlatformApiLevel}</strong>&mdash;that is stored in the system itself.
    355 This identifier, called the "API level", allows the system to correctly determine whether an
    356 application is compatible with the system, prior to installing the application. </p>
    357 
    358 <p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
    359 application against an Android platform that supports API level {@sdkPlatformApiLevel} or
    360 higher. Depending on your needs, you might also need to add an
    361 <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
    362 <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
    363 element.</p>
    364 
    365 <p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
    366 document. </p>
    367 
    368 
    369 <h2 id="apps">Built-in Applications</h2>
    370 
    371 <p>The system image included in the downloadable platform provides these
    372 built-in applications:</p>
    373 
    374 <table style="border:0;padding-bottom:0;margin-bottom:0;">
    375 <tr>
    376 <td style="border:0;padding-bottom:0;margin-bottom:0;">
    377 <ul>
    378 <li>API Demos</li>
    379 <li>Browser</li>
    380 <li>Calculator</li>
    381 <li>Calendar</li>
    382 <li>Camera</li>
    383 <li>Clock</li>
    384 <li>Custom Locale</li>
    385 <li>Dev Tools</li>
    386 <li>Downloads</li>
    387 <li>Email</li>
    388 <li>Gallery</li>
    389 </ul>
    390 </td>
    391 <td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
    392 <ul>
    393 <li>Gestures Builder</li>
    394 <li>Messaging</li>
    395 <li>Music</li>
    396 <li>People</li>
    397 <li>Phone</li>
    398 <li>Search</li>
    399 <li>Settings</li>
    400 <li>Speech Recorder</li>
    401 <li>Widget Preview</li>
    402 </ul>
    403 </td>
    404 </tr>
    405 </table>
    406 
    407 
    408 <h2 id="locs" style="margin-top:.75em;">Locales</h2>
    409 
    410 <p>The system image included in the downloadable SDK platform provides a variety of built-in
    411 locales. In some cases, region-specific strings are available for the locales. In other cases, a
    412 default version of the language is used. The languages that are available in the Android 3.0 system
    413 image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
    414 
    415 <table style="border:0;padding-bottom:0;margin-bottom:0;">
    416 <tr>
    417 <td style="border:0;padding-bottom:0;margin-bottom:0;">
    418 <ul>
    419 <li>Arabic, Egypt (ar_EG)</li>
    420 <li>Arabic, Israel (ar_IL)</li>
    421 <li>Bulgarian, Bulgaria (bg_BG)</li>
    422 <li>Catalan, Spain (ca_ES)</li>
    423 <li>Czech, Czech Republic (cs_CZ)</li>
    424 <li>Danish, Denmark(da_DK)</li>
    425 <li>German, Austria (de_AT)</li>
    426 <li>German, Switzerland (de_CH)</li>
    427 <li>German, Germany (de_DE)</li>
    428 <li>German, Liechtenstein (de_LI)</li>
    429 <li>Greek, Greece (el_GR)</li>
    430 <li>English, Australia (en_AU)</li>
    431 <li>English, Canada (en_CA)</li>
    432 <li>English, Britain (en_GB)</li>
    433 <li>English, Ireland (en_IE)</li>
    434 <li>English, India (en_IN)</li>
    435 <li>English, New Zealand (en_NZ)</li>
    436 <li>English, Singapore(en_SG)</li>
    437 <li>English, US (en_US)</li>
    438 <li>English, South Africa (en_ZA)</li>
    439 <li>Spanish (es_ES)</li>
    440 <li>Spanish, US (es_US)</li>
    441 <li>Finnish, Finland (fi_FI)</li>
    442 <li>French, Belgium (fr_BE)</li>
    443 <li>French, Canada (fr_CA)</li>
    444 <li>French, Switzerland (fr_CH)</li>
    445 <li>French, France (fr_FR)</li>
    446 <li>Hebrew, Israel (he_IL)</li>
    447 <li>Hindi, India (hi_IN)</li>
    448 </ul>
    449 </td>
    450 <td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
    451 <li>Croatian, Croatia (hr_HR)</li>
    452 <li>Hungarian, Hungary (hu_HU)</li>
    453 <li>Indonesian, Indonesia (id_ID)</li>
    454 <li>Italian, Switzerland (it_CH)</li>
    455 <li>Italian, Italy (it_IT)</li>
    456 <li>Japanese (ja_JP)</li>
    457 <li>Korean (ko_KR)</li>
    458 <li>Lithuanian, Lithuania (lt_LT)</li>
    459 <li>Latvian, Latvia (lv_LV)</li>
    460 <li>Norwegian bokml, Norway (nb_NO)</li>
    461 <li>Dutch, Belgium (nl_BE)</li>
    462 <li>Dutch, Netherlands (nl_NL)</li>
    463 <li>Polish (pl_PL)</li>
    464 <li>Portuguese, Brazil (pt_BR)</li>
    465 <li>Portuguese, Portugal (pt_PT)</li>
    466 <li>Romanian, Romania (ro_RO)</li>
    467 <li>Russian (ru_RU)</li></li>
    468 <li>Slovak, Slovakia (sk_SK)</li>
    469 <li>Slovenian, Slovenia (sl_SI)</li>
    470 <li>Serbian (sr_RS)</li>
    471 <li>Swedish, Sweden (sv_SE)</li>
    472 <li>Thai, Thailand (th_TH)</li>
    473 <li>Tagalog, Philippines (tl_PH)</li>
    474 <li>Turkish, Turkey (tr_TR)</li>
    475 <li>Ukrainian, Ukraine (uk_UA)</li>
    476 <li>Vietnamese, Vietnam (vi_VN)</li>
    477 <li>Chinese, PRC (zh_CN)</li>
    478 <li>Chinese, Taiwan (zh_TW)</li>
    479 </td>
    480 </tr>
    481 </table>
    482 
    483 <p class="note"><strong>Note:</strong> The Android platform may support more
    484 locales than are included in the SDK system image. All of the supported locales
    485 are available in the <a href="http://source.android.com/">Android Open Source
    486 Project</a>.</p>
    487 
    488 <h2 id="skins">Emulator Skins</h2>
    489 
    490 <p>The downloadable platform includes the following emulator skins:</p>
    491 
    492 <ul>
    493   <li>
    494     QVGA (240x320, low density, small screen)
    495   </li>
    496   <li>
    497     WQVGA400 (240x400, low density, normal screen)
    498   </li>
    499   <li>
    500     WQVGA432 (240x432, low density, normal screen)
    501   </li>
    502   <li>
    503     HVGA (320x480, medium density, normal screen)
    504   </li>
    505   <li>
    506     WVGA800 (480x800, high density, normal screen)
    507   </li>
    508   <li>
    509     WVGA854 (480x854 high density, normal screen)
    510   </li>
    511   <li>
    512     WXGA720 (1280x720, extra-high density, normal screen) 
    513   </li>
    514   <li>
    515     WSVGA (1024x600, medium density, large screen) 
    516   </li>
    517   <li>
    518     WXGA (1280x800, medium density, xlarge screen)
    519   </li>
    520 </ul>
    521 
    522 <p>To test your application on an emulator that represents the latest Android device, you can create
    523 an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
    524 currently doesn't support the new on-screen navigation bar for devices without hardware navigation
    525 buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
    526 <em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
    527 
    528 <p>However, due to performance issues in the emulator when running high-resolution screens such as
    529 the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
    530 (hdpi, normal screen) to test your application.</p>
    531 
    532