1page.title=<uses-sdk> 2parent.title=The AndroidManifest.xml File 3parent.link=manifest-intro.html 4@jd:body 5 6 7<div id="qv-wrapper"> 8<div id="qv"> 9 10<h2>In this document</h2> 11<ol> 12 <li><a href="#ApiLevels">What is API Level?</a></li> 13 <li><a href="#uses">Uses of API Level in Android</a></li> 14 <li><a href="#considerations">Development Considerations</a> 15 <ol> 16 <li><a href="#fc">Application forward compatibility</a></li> 17 <li><a href="#bc">Application backward compatibility</a></li> 18 <li><a href="#platform">Selecting a platform version and API Level</a></li> 19 <li><a href="#apilevel">Declaring a minimum API Level</a></li> 20 <li><a href="#testing">Testing against higher API Levels</a></li> 21 </ol> 22 </li> 23 <li><a href="#provisional">Using a Provisional API Level</a></li> 24 <li><a href="#filtering">Filtering the Reference Documentation by API Level</a></li> 25</ol> 26</div> 27</div> 28 29<div class="sidebox-wrapper"> 30<div class="sidebox"> 31 <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> 32 <p style="color:#669999;padding-top:1em;">Google Play Filtering</p> 33 <p style="padding-top:1em;">Google Play uses the <code><uses-sdk></code> 34 attributes declared in your app manifest to filter your app from devices 35 that do not meet it's platform version requirements. Before setting these 36 attributes, make sure that you understand 37 <a href="{@docRoot}google/play/filters.html">Google Play filters</a>. </p> 38 </div> 39</div> 40 41<dl class="xml"> 42<dt>syntax:</dt> 43<dd><pre> 44<uses-sdk android:<a href="#min">minSdkVersion</a>="<i>integer</i>" 45 android:<a href="#target">targetSdkVersion</a>="<i>integer</i>" 46 android:<a href="#max">maxSdkVersion</a>="<i>integer</i>" /></pre></dd> 47 48<dt>contained in:</dt> 49<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd> 50 51<dt>description:</dt> 52<dd>Lets you express an application's compatibility with one or more versions of the Android platform, 53by means of an API Level integer. The API Level expressed by an application will be compared to the 54API Level of a given Android system, which may vary among different Android devices. 55</p> 56 57<p>Despite its name, this element is used to specify the API Level, <em>not</em> 58the version number of the SDK (software development kit) or Android platform. 59The API Level is always a single integer. You cannot derive the API Level from 60its associated Android version number (for example, it is not the same as the 61major version or the sum of the major and minor versions).</p> 62 63<p>Also read the document about 64<a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a>. 65</p></dd> 66 67<dt>attributes:</dt> 68 69<dd> 70<dl class="attr"> 71 <dt><a name="min"></a>{@code android:minSdkVersion}</dt> 72 <dd>An integer designating the minimum API Level required 73 for the application to run. The Android system will prevent the user from installing 74 the application if the system's API Level is lower than the value specified in 75 this attribute. You should always declare this attribute. 76 77 <p class="caution"><strong>Caution:</strong> If you do not declare this 78 attribute, the system assumes a default value of "1", which indicates that your 79 application is compatible with all versions of Android. If your application is 80 <em>not</em> compatible with all versions (for instance, it uses APIs introduced 81 in API Level 3) and you have not declared the proper <code>minSdkVersion</code>, 82 then when installed on a system with an API Level less than 3, the application 83 will crash during runtime when attempting to access the unavailable APIs. For 84 this reason, be certain to declare the appropriate API Level in the 85 <code>minSdkVersion</code> attribute.</p> 86 </dd> 87 88 <dt><a name="target"></a>{@code android:targetSdkVersion}</dt> 89 <dd>An integer designating the API Level that the application targets. If not set, the default 90value equals that given to {@code minSdkVersion}. 91 92 <p>This attribute informs the system that you have tested against the target version and the 93system should not enable any compatibility behaviors to maintain your app's forward-compatibility 94with the target version. The application is still able to run on older versions (down to {@code 95minSdkVersion}).</p> 96 97 <p>As Android evolves with each new version, some behaviors and even appearances might change. 98However, if the API level of the platform is higher than the version declared by your app's {@code 99targetSdkVersion}, the system may enable compatibility behaviors to ensure that your app 100continues to work the way you expect. You can disable such compatibility 101behaviors by specifying {@code targetSdkVersion} to match the API 102level of the platform on which it's running. For example, setting this value to "11" or higher 103allows the system to apply a new default theme (Holo) to your app when running on Android 3.0 or 104higher and also disables <a href="{@docRoot}guide/practices/screen-compat-mode.html">screen 105compatibility mode</a> when running on larger screens (because support for API level 11 implicitly 106supports larger screens).</p> 107 108 <p>There are many compatibility behaviors that the system may enable based on the value you set 109for this attribute. Several of these behaviors are described by the corresponding platform versions 110in the {@link android.os.Build.VERSION_CODES} reference.</p> 111 112 <p>To maintain your application along with each Android release, you should increase 113the value of this attribute to match the latest API level, then thoroughly test your application on 114the corresponding platform version.</p> 115 116 <p>Introduced in: API Level 4</p> 117 </dd> 118 119 <dt><a name="max"></a>{@code android:maxSdkVersion}</dt> 120 <dd>An integer designating the maximum API Level on which the application is 121 designed to run. 122 123 <p>In Android 1.5, 1.6, 2.0, and 2.0.1, the system checks the value of this 124 attribute when installing an application and when re-validating the application 125 after a system update. In either case, if the application's 126 <code>maxSdkVersion</code> attribute is lower than the API Level used by 127 the system itself, then the system will not allow the application to be 128 installed. In the case of re-validation after system update, this effectively 129 removes your application from the device. 130 131 <p>To illustrate how this attribute can affect your application after system 132 updates, consider the following example: </p> 133 134 <p>An application declaring <code>maxSdkVersion="5"</code> in its 135 manifest is published on Google Play. A user whose device is running Android 136 1.6 (API Level 4) downloads and installs the app. After a few weeks, the user 137 receives an over-the-air system update to Android 2.0 (API Level 5). After the 138 update is installed, the system checks the application's 139 <code>maxSdkVersion</code> and successfully re-validates it. The 140 application functions as normal. However, some time later, the device receives 141 another system update, this time to Android 2.0.1 (API Level 6). After the 142 update, the system can no longer re-validate the application because the system's 143 own API Level (6) is now higher than the maximum supported by the application 144 (5). The system prevents the application from being visible to the user, in 145 effect removing it from the device.</p> 146 147 <p class="warning"><strong>Warning:</strong> Declaring this attribute is not 148 recommended. First, there is no need to set the attribute as means of blocking 149 deployment of your application onto new versions of the Android platform as they 150 are released. By design, new versions of the platform are fully 151 backward-compatible. Your application should work properly on new versions, 152 provided it uses only standard APIs and follows development best practices. 153 Second, note that in some cases, declaring the attribute can <strong>result in 154 your application being removed from users' devices after a system 155 update</strong> to a higher API Level. Most devices on which your application 156 is likely to be installed will receive periodic system updates over the air, so 157 you should consider their effect on your application before setting this 158 attribute.</p> 159 160 <p style="margin-bottom:1em;">Introduced in: API Level 4</p> 161 162 <div class="special">Future versions of Android (beyond Android 2.0.1) will no 163longer check or enforce the <code>maxSdkVersion</code> attribute during 164installation or re-validation. Google Play will continue to use the attribute 165as a filter, however, when presenting users with applications available for 166download. </div> 167 </dd> 168 169 170</dl></dd> 171 172<!-- ##api level indication## --> 173<dt>introduced in:</dt> 174<dd>API Level 1</dd> 175 176</dl> 177 178 179 180 181 182<!--- CONTENT FROM OLD API LEVEL DOC ----> 183 184 185 186 187<h2 id="ApiLevels">What is API Level?</h2> 188 189<p>API Level is an integer value that uniquely identifies the framework API 190revision offered by a version of the Android platform.</p> 191 192<p>The Android platform provides a framework API that applications can use to 193interact with the underlying Android system. The framework API consists of:</p> 194 195<ul> 196<li>A core set of packages and classes</li> 197<li>A set of XML elements and attributes for declaring a manifest file</li> 198<li>A set of XML elements and attributes for declaring and accessing resources</li> 199<li>A set of Intents</li> 200<li>A set of permissions that applications can request, as well as permission 201enforcements included in the system</li> 202</ul> 203 204<p>Each successive version of the Android platform can include updates to the 205Android application framework API that it delivers. </p> 206 207<p>Updates to the framework API are designed so that the new API remains 208compatible with earlier versions of the API. That is, most changes in the API 209are additive and introduce new or replacement functionality. As parts of the API 210are upgraded, the older replaced parts are deprecated but are not removed, so 211that existing applications can still use them. In a very small number of cases, 212parts of the API may be modified or removed, although typically such changes are 213only needed to ensure API robustness and application or system security. All 214other API parts from earlier revisions are carried forward without 215modification.</p> 216 217<p>The framework API that an Android platform delivers is specified using an 218integer identifier called "API Level". Each Android platform version supports 219exactly one API Level, although support is implicit for all earlier API Levels 220(down to API Level 1). The initial release of the Android platform provided 221API Level 1 and subsequent releases have incremented the API Level.</p> 222 223<p>The table below specifies the API Level supported by each version of the 224Android platform. For information about the relative numbers of devices that 225are running each version, see the <a href="{@docRoot}about/dashboards/index.html">Platform 226Versions dashboards page</a>.</p> 227 228<table> 229 <tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr> 230 231 <tr><td><a href="{@docRoot}about/versions/android-4.2.html">Android 4.2</a></td> 232 <td><a href="{@docRoot}sdk/api_diff/17/changes.html" title="Diff Report">17</a></td> 233 <td>{@link android.os.Build.VERSION_CODES#JELLY_BEAN_MR1}</td> 234 <td><a href="{@docRoot}about/versions/jelly-bean.html">Platform 235Highlights</a></td></tr> 236 237 <tr><td><a href="{@docRoot}about/versions/android-4.1.html">Android 4.1, 4.1.1</a></td> 238 <td><a href="{@docRoot}sdk/api_diff/16/changes.html" title="Diff Report">16</a></td> 239 <td>{@link android.os.Build.VERSION_CODES#JELLY_BEAN}</td> 240 <td><a href="{@docRoot}about/versions/jelly-bean.html">Platform 241Highlights</a></td></tr> 242 243 <tr><td><a href="{@docRoot}about/versions/android-4.0.3.html">Android 4.0.3, 4.0.4</a></td> 244 <td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td> 245 <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td> 246 <td rowspan="2"><a href="{@docRoot}about/versions/android-4.0-highlights.html">Platform 247Highlights</a></td></tr> 248 249 <tr><td><a href="{@docRoot}about/versions/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td> 250 <td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td> 251 <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td> 252 </tr> 253 254 <tr><td><a href="{@docRoot}about/versions/android-3.2.html">Android 3.2</a></td> 255 <td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td> 256 <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td> 257 <td><!-- <a href="{@docRoot}about/versions/android-3.2-highlights.html">Platform 258Highlights</a>--></td></tr> 259 260 <tr><td><a href="{@docRoot}about/versions/android-3.1.html">Android 3.1.x</a></td> 261 <td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td> 262 <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td> 263 <td><a href="{@docRoot}about/versions/android-3.1-highlights.html">Platform Highlights</a></td></tr> 264 265 <tr><td><a href="{@docRoot}about/versions/android-3.0.html">Android 3.0.x</td> 266 <td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td> 267 <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td> 268 <td><a href="{@docRoot}about/versions/android-3.0-highlights.html">Platform Highlights</a></td></tr> 269 270 <tr><td><a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td> 271 <td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td> 272 <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td> 273 <td rowspan="2"><a href="{@docRoot}about/versions/android-2.3-highlights.html">Platform 274Highlights</a></td></tr> 275 276 <tr><td><a href="{@docRoot}about/versions/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 2772.3</td> 278 <td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td> 279 <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td> 280 </tr> 281 282 <tr><td><a href="{@docRoot}about/versions/android-2.2.html">Android 2.2.x</td> 283 <td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td> 284 <td>{@link android.os.Build.VERSION_CODES#FROYO}</td> 285 <td><a href="{@docRoot}about/versions/android-2.2-highlights.html">Platform Highlights</a></td></tr> 286 287 <tr><td><a href="{@docRoot}about/versions/android-2.1.html">Android 2.1.x</td> 288 <td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td> 289 <td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td> 290 <td rowspan="3" ><a href="{@docRoot}about/versions/android-2.0-highlights.html">Platform 291Highlights</a></td></tr> 292 293 <tr><td><a href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1</td> 294 <td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td> 295 <td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td> 296 </tr> 297 298 <tr><td><a href="{@docRoot}about/versions/android-2.0.html">Android 2.0</td> 299 <td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td> 300 <td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td> 301 </tr> 302 303 <tr><td><a href="{@docRoot}about/versions/android-1.6.html">Android 1.6</td> 304 <td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td> 305 <td>{@link android.os.Build.VERSION_CODES#DONUT}</td> 306 <td><a href="{@docRoot}about/versions/android-1.6-highlights.html">Platform Highlights</a></td></tr> 307 308 <tr><td><a href="{@docRoot}about/versions/android-1.5.html">Android 1.5</td> 309 <td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td> 310 <td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td> 311 <td><a href="{@docRoot}about/versions/android-1.5-highlights.html">Platform Highlights</a></td></tr> 312 313 <tr><td><a href="{@docRoot}about/versions/android-1.1.html">Android 1.1</td> 314 <td>2</td> 315 <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr> 316 317 <tr><td>Android 1.0</td> 318 <td>1</td> 319 <td>{@link android.os.Build.VERSION_CODES#BASE}</td> 320 <td></td></tr> 321</table> 322 323 324<h2 id="uses">Uses of API Level in Android</h2> 325 326<p>The API Level identifier serves a key role in ensuring the best possible 327experience for users and application developers: 328 329<ul> 330<li>It lets the Android platform describe the maximum framework API revision 331that it supports</li> 332<li>It lets applications describe the framework API revision that they 333require</li> 334<li>It lets the system negotiate the installation of applications on the user's 335device, such that version-incompatible applications are not installed.</li> 336</ul> 337 338<p>Each Android platform version stores its API Level identifier internally, in 339the Android system itself. </p> 340 341<p>Applications can use a manifest element provided by the framework API — 342<code><uses-sdk></code> — to describe the minimum and maximum API 343Levels under which they are able to run, as well as the preferred API Level that 344they are designed to support. The element offers three key attributes:</p> 345 346<ul> 347<li><code>android:minSdkVersion</code> — Specifies the minimum API Level 348on which the application is able to run. The default value is "1".</li> 349<li><code>android:targetSdkVersion</code> — Specifies the API Level 350on which the application is designed to run. In some cases, this allows the 351application to use manifest elements or behaviors defined in the target 352API Level, rather than being restricted to using only those defined 353for the minimum API Level.</li> 354<li><code>android:maxSdkVersion</code> — Specifies the maximum API Level 355on which the application is able to run. <strong>Important:</strong> Please read the <a 356href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 357documentation before using this attribute. </li> 358</ul> 359 360<p>For example, to specify the minimum system API Level that an application 361requires in order to run, the application would include in its manifest a 362<code><uses-sdk></code> element with a <code>android:minSdkVersion</code> 363attribute. The value of <code>android:minSdkVersion</code> would be the integer 364corresponding to the API Level of the earliest version of the Android platform 365under which the application can run. </p> 366 367<p>When the user attempts to install an application, or when revalidating an 368appplication after a system update, the Android system first checks the 369<code><uses-sdk></code> attributes in the application's manifest and 370compares the values against its own internal API Level. The system allows the 371installation to begin only if these conditions are met:</p> 372 373<ul> 374<li>If a <code>android:minSdkVersion</code> attribute is declared, its value 375must be less than or equal to the system's API Level integer. If not declared, 376the system assumes that the application requires API Level 1. </li> 377<li>If a <code>android:maxSdkVersion</code> attribute is declared, its value 378must be equal to or greater than the system's API Level integer. 379If not declared, the system assumes that the application 380has no maximum API Level. Please read the <a 381href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 382documentation for more information about how the system handles this attribute.</li> 383</ul> 384 385<p>When declared in an application's manifest, a <code><uses-sdk></code> 386element might look like this: </p> 387 388<pre><manifest> 389 <uses-sdk android:minSdkVersion="5" /> 390 ... 391</manifest></pre> 392 393<p>The principal reason that an application would declare an API Level in 394<code>android:minSdkVersion</code> is to tell the Android system that it is 395using APIs that were <em>introduced</em> in the API Level specified. If the 396application were to be somehow installed on a platform with a lower API Level, 397then it would crash at run-time when it tried to access APIs that don't exist. 398The system prevents such an outcome by not allowing the application to be 399installed if the lowest API Level it requires is higher than that of the 400platform version on the target device.</p> 401 402<p>For example, the {@link android.appwidget} package was introduced with API 403Level 3. If an application uses that API, it must declare a 404<code>android:minSdkVersion</code> attribute with a value of "3". The 405application will then be installable on platforms such as Android 1.5 (API Level 4063) and Android 1.6 (API Level 4), but not on the Android 1.1 (API Level 2) and 407Android 1.0 platforms (API Level 1).</p> 408 409<p>For more information about how to specify an application's API Level 410requirements, see the <a 411href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 412 section of the manifest file documentation.</p> 413 414 415<h2 id="considerations">Development Considerations</h2> 416 417<p>The sections below provide information related to API level that you should 418consider when developing your application.</p> 419 420<h3 id="fc">Application forward compatibility</h3> 421 422<p>Android applications are generally forward-compatible with new versions of 423the Android platform.</p> 424 425<p>Because almost all changes to the framework API are additive, an Android 426application developed using any given version of the API (as specified by its 427API Level) is forward-compatible with later versions of the Android platform and 428higher API levels. The application should be able to run on all later versions 429of the Android platform, except in isolated cases where the application uses a 430part of the API that is later removed for some reason. </p> 431 432<p>Forward compatibility is important because many Android-powered devices 433receive over-the-air (OTA) system updates. The user may install your 434application and use it successfully, then later receive an OTA update to a new 435version of the Android platform. Once the update is installed, your application 436will run in a new run-time version of the environment, but one that has the API 437and system capabilities that your application depends on. </p> 438 439<p>In some cases, changes <em>below</em> the API, such those in the underlying 440system itself, may affect your application when it is run in the new 441environment. For that reason it's important for you, as the application 442developer, to understand how the application will look and behave in each system 443environment. To help you test your application on various versions of the Android 444platform, the Android SDK includes multiple platforms that you can download. 445Each platform includes a compatible system image that you can run in an AVD, to 446test your application. </p> 447 448<h3 id="bc">Application backward compatibility</h3> 449 450<p>Android applications are not necessarily backward compatible with versions of 451the Android platform older than the version against which they were compiled. 452</p> 453 454<p>Each new version of the Android platform can include new framework APIs, such 455as those that give applications access to new platform capabilities or replace 456existing API parts. The new APIs are accessible to applications when running on 457the new platform and, as mentioned above, also when running on later versions of 458the platform, as specified by API Level. Conversely, because earlier versions of 459the platform do not include the new APIs, applications that use the new APIs are 460unable to run on those platforms.</p> 461 462<p>Although it's unlikely that an Android-powered device would be downgraded to 463a previous version of the platform, it's important to realize that there are 464likely to be many devices in the field that run earlier versions of the 465platform. Even among devices that receive OTA updates, some might lag and 466might not receive an update for a significant amount of time. </p> 467 468<h3 id="platform">Selecting a platform version and API Level</h3> 469 470<p>When you are developing your application, you will need to choose 471the platform version against which you will compile the application. In 472general, you should compile your application against the lowest possible 473version of the platform that your application can support. 474 475<p>You can determine the lowest possible platform version by compiling the 476application against successively lower build targets. After you determine the 477lowest version, you should create an AVD using the corresponding platform 478version (and API Level) and fully test your application. Make sure to declare a 479<code>android:minSdkVersion</code> attribute in the application's manifest and 480set its value to the API Level of the platform version. </p> 481 482<h3 id="apilevel">Declaring a minimum API Level</h3> 483 484<p>If you build an application that uses APIs or system features introduced in 485the latest platform version, you should set the 486<code>android:minSdkVersion</code> attribute to the API Level of the latest 487platform version. This ensures that users will only be able to install your 488application if their devices are running a compatible version of the Android 489platform. In turn, this ensures that your application can function properly on 490their devices. </p> 491 492<p>If your application uses APIs introduced in the latest platform version but 493does <em>not</em> declare a <code>android:minSdkVersion</code> attribute, then 494it will run properly on devices running the latest version of the platform, but 495<em>not</em> on devices running earlier versions of the platform. In the latter 496case, the application will crash at runtime when it tries to use APIs that don't 497exist on the earlier versions.</p> 498 499<h3 id="testing">Testing against higher API Levels</h3> 500 501<p>After compiling your application, you should make sure to test it on the 502platform specified in the application's <code>android:minSdkVersion</code> 503attribute. To do so, create an AVD that uses the platform version required by 504your application. Additionally, to ensure forward-compatibility, you should run 505and test the application on all platforms that use a higher API Level than that 506used by your application. </p> 507 508<p>The Android SDK includes multiple platform versions that you can use, 509including the latest version, and provides an updater tool that you can use to 510download other platform versions as necessary. </p> 511 512<p>To access the updater, use the <code>android</code> command-line tool, 513located in the <sdk>/tools directory. You can launch the SDK updater by 514executing <code>android sdk</code>. You can 515also simply double-click the android.bat (Windows) or android (OS X/Linux) file. 516In ADT, you can also access the updater by selecting 517<strong>Window</strong> > <strong>Android SDK 518Manager</strong>.</p> 519 520<p>To run your application against different platform versions in the emulator, 521create an AVD for each platform version that you want to test. For more 522information about AVDs, see <a 523href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>. If 524you are using a physical device for testing, ensure that you know the API Level 525of the Android platform it runs. See the table at the top of this document for 526a list of platform versions and their API Levels. </p> 527 528<h2 id="provisional">Using a Provisional API Level</h2> 529 530<p>In some cases, an "Early Look" Android SDK platform may be available. To let 531you begin developing on the platform although the APIs may not be final, the 532platform's API Level integer will not be specified. You must instead use the 533platform's <em>provisional API Level</em> in your application manifest, in order 534to build applications against the platform. A provisional API Level is not an 535integer, but a string matching the codename of the unreleased platform version. 536The provisional API Level will be specified in the release notes for the Early 537Look SDK release notes and is case-sensitive.</p> 538 539<p>The use of a provisional API Level is designed to protect developers and 540device users from inadvertently publishing or installing applications based on 541the Early Look framework API, which may not run properly on actual devices 542running the final system image.</p> 543 544<p>The provisional API Level will only be valid while using the Early Look SDK 545and can only be used to run applications in the emulator. An application using 546the provisional API Level can never be installed on an Android device. At the 547final release of the platform, you must replace any instances of the provisional 548API Level in your application manifest with the final platform's actual API 549Level integer.</p> 550 551 552<h2 id="filtering">Filtering the Reference Documentation by API Level</h2> 553 554<p>Reference documentation pages on the Android Developers site offer a "Filter 555by API Level" control in the top-right area of each page. You can use the 556control to show documentation only for parts of the API that are actually 557accessible to your application, based on the API Level that it specifies in 558the <code>android:minSdkVersion</code> attribute of its manifest file. </p> 559 560<p>To use filtering, select the checkbox to enable filtering, just below the 561page search box. Then set the "Filter by API Level" control to the same API 562Level as specified by your application. Notice that APIs introduced in a later 563API Level are then grayed out and their content is masked, since they would not 564be accessible to your application. </p> 565 566<p>Filtering by API Level in the documentation does not provide a view 567of what is new or introduced in each API Level — it simply provides a way 568to view the entire API associated with a given API Level, while excluding API 569elements introduced in later API Levels.</p> 570 571<p>If you decide that you don't want to filter the API documentation, just 572disable the feature using the checkbox. By default, API Level filtering is 573disabled, so that you can view the full framework API, regardless of API Level. 574</p> 575 576<p>Also note that the reference documentation for individual API elements 577specifies the API Level at which each element was introduced. The API Level 578for packages and classes is specified as "Since <api level>" at the 579top-right corner of the content area on each documentation page. The API Level 580for class members is specified in their detailed description headers, 581at the right margin. </p> 582 583 584 585 586 587 588 589 590 591