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