19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpage.title=<uses-sdk> 22a1b706ec11e53689a2f86cc8e558e74591b462aScott Mainparent.title=The AndroidManifest.xml File 32a1b706ec11e53689a2f86cc8e558e74591b462aScott Mainparent.link=manifest-intro.html 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@jd:body 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<div id="qv-wrapper"> 850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<div id="qv"> 950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 1050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2>In this document</h2> 1150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<ol> 1250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#ApiLevels">What is API Level?</a></li> 1350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#uses">Uses of API Level in Android</a></li> 1450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#considerations">Development Considerations</a> 1550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <ol> 1650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#fc">Application forward compatibility</a></li> 1750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#bc">Application backward compatibility</a></li> 1850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#platform">Selecting a platform version and API Level</a></li> 1950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#apilevel">Declaring a minimum API Level</a></li> 2050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#testing">Testing against higher API Levels</a></li> 2150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </ol> 2250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </li> 2350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#provisional">Using a Provisional API Level</a></li> 2450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <li><a href="#filtering">Filtering the Reference Documentation by API Level</a></li> 2550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</ol> 2650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</div> 2750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</div> 2850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dl class="xml"> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>syntax:</dt> 314e60d012c95f50ddd2a1ba6202e4fec3c9cfd3dfScott Main<dd><pre> 324e60d012c95f50ddd2a1ba6202e4fec3c9cfd3dfScott Main<uses-sdk android:<a href="#min">minSdkVersion</a>="<i>integer</i>" 337500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty android:<a href="#target">targetSdkVersion</a>="<i>integer</i>" 347500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty android:<a href="#max">maxSdkVersion</a>="<i>integer</i>" /></pre></dd> 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>contained in:</dt> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dd><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></dd> 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<dt>description:</dt> 40135d2335409d8bf23f7391078c0c09038815ab39Scott Main<dd>Lets you express an application's compatibility with one or more versions of the Android platform, 41135d2335409d8bf23f7391078c0c09038815ab39Scott Mainby means of an API Level integer. The API Level expressed by an application will be compared to the 4271d4b289a7a934ecd16c3036b812d40db6d3a74dScott MainAPI Level of a given Android system, which may vary among different Android devices. 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</p> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 457500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty<p>Despite its name, this element is used to specify the API Level, <em>not</em> 467500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertythe version number of the SDK (software development kit) or Android platform. 477500f341dd65de97ac4272e7a9c5474423cef89fDirk DoughertyThe API Level is always a single integer. You cannot derive the API Level from 487500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertyits associated Android version number (for example, it is not the same as the 497500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertymajor version or the sum of the major and minor versions).</p> 5071d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main 5150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Also read the document about 5250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a>. 5371d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main</p></dd> 5471d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main 557500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <div class="sidebox-wrapper" xstyle="margin-bottom:2em;margin-top:.5em;width:90%;"> 567500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png"> 577500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <div id="qv-sub-rule"> 584d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Dougherty <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;"> 594d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Dougherty <p style="color:#669999;padding-top:1em;">Google Play and <uses-sdk> attributes</p> 604d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Dougherty <p style="padding-top:1em;">Google Play filters the applications that are visible to users, so 617500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertythat users can only see and download applications that are compatible with their 624d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Doughertydevices. One of the ways it filters applications is by Android 634d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Doughertyversion-compatibility. To do this, Google Play checks the <code><uses-sdk></code> 647500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertyattributes in each application's manifest to establish its version-compatibility 657500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertyrange, then shows or hides the application based on a comparison with the API 665305627d5b78b8d63ce344c4eb5d1a28ef44d3d0Dirk DoughertyLevel of the user's Android system version. For more information, see <a 6750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhref="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>.</p> 687500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty </div> 697500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty</div> 70135d2335409d8bf23f7391078c0c09038815ab39Scott Main 7171d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main<dt>attributes:</dt> 72135d2335409d8bf23f7391078c0c09038815ab39Scott Main 7371d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main<dd> 7471d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main<dl class="attr"> 7571d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main <dt><a name="min"></a>{@code android:minSdkVersion}</dt> 76d56760ce1ecb949a258e1c667eb46446e2575269Scott Main <dd>An integer designating the minimum API Level required 77d56760ce1ecb949a258e1c667eb46446e2575269Scott Main for the application to run. The Android system will prevent the user from installing 78d56760ce1ecb949a258e1c667eb46446e2575269Scott Main the application if the system's API Level is lower than the value specified in 79d56760ce1ecb949a258e1c667eb46446e2575269Scott Main this attribute. You should always declare this attribute. 807500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 817500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <p class="caution"><strong>Caution:</strong> If you do not declare this 827500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty attribute, the system assumes a default value of "1", which indicates that your 837500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty application is compatible with all versions of Android. If your application is 847500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <em>not</em> compatible with all versions (for instance, it uses APIs introduced 85d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main in API Level 3) and you have not declared the proper <code>minSdkVersion</code>, 867500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty then when installed on a system with an API Level less than 3, the application 877500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty will crash during runtime when attempting to access the unavailable APIs. For 887500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty this reason, be certain to declare the appropriate API Level in the 897500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <code>minSdkVersion</code> attribute.</p> 9071d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main </dd> 917500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 9271d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main <dt><a name="target"></a>{@code android:targetSdkVersion}</dt> 93d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <dd>An integer designating the API Level that the application targets. If not set, the default 94d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainvalue equals that given to {@code minSdkVersion}. 95d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main 96d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <p>This attribute informs the system that you have tested against the target version and the 97d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainsystem should not enable any compatibility behaviors to maintain your app's forward-compatibility 98d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainwith the target version. The application is still able to run on older versions (down to {@code 99d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott MainminSdkVersion}).</p> 100d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main 101d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <p>As Android evolves with each new version, some behaviors and even appearances might change. 102d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott MainHowever, if the API level of the platform is higher than the version declared by your app's {@code 103d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott MaintargetSdkVersion}, the system may enable compatibility behaviors to ensure that your app 104d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Maincontinues to work the way you expect. You can disable such compatibility 105d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainbehaviors by specifying {@code targetSdkVersion} to match the API 106d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainlevel of the platform on which it's running. For example, setting this value to "11" or higher 107d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainallows the system to apply a new default theme (Holo) to your app when running on Android 3.0 or 108d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainhigher and also disables <a href="{@docRoot}guide/practices/screen-compat-mode.html">screen 109d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Maincompatibility mode</a> when running on larger screens (because support for API level 11 implicitly 110d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainsupports larger screens).</p> 111d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main 112d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <p>There are many compatibility behaviors that the system may enable based on the value you set 113d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainfor this attribute. Several of these behaviors are described by the corresponding platform versions 114d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainin the {@link android.os.Build.VERSION_CODES} reference.</p> 115d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main 116d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <p>To maintain your application along with each Android release, you should increase 117d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainthe value of this attribute to match the latest API level, then thoroughly test your application on 118d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainthe corresponding platform version.</p> 1197500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 12071d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main <p>Introduced in: API Level 4</p> 12171d4b289a7a934ecd16c3036b812d40db6d3a74dScott Main </dd> 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1237500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <dt><a name="max"></a>{@code android:maxSdkVersion}</dt> 1247500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <dd>An integer designating the maximum API Level on which the application is 1257500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty designed to run. 1267500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1277500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <p>In Android 1.5, 1.6, 2.0, and 2.0.1, the system checks the value of this 128d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main attribute when installing an application and when re-validating the application 1297500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty after a system update. In either case, if the application's 130d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <code>maxSdkVersion</code> attribute is lower than the API Level used by 1317500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty the system itself, then the system will not allow the application to be 132d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main installed. In the case of re-validation after system update, this effectively 1337500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty removes your application from the device. 1347500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1357500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <p>To illustrate how this attribute can affect your application after system 1367500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty updates, consider the following example: </p> 1377500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 138d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <p>An application declaring <code>maxSdkVersion="5"</code> in its 1394d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Dougherty manifest is published on Google Play. A user whose device is running Android 1407500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1.6 (API Level 4) downloads and installs the app. After a few weeks, the user 1417500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty receives an over-the-air system update to Android 2.0 (API Level 5). After the 1427500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty update is installed, the system checks the application's 143d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main <code>maxSdkVersion</code> and successfully re-validates it. The 1447500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty application functions as normal. However, some time later, the device receives 1457500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty another system update, this time to Android 2.0.1 (API Level 6). After the 146d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main update, the system can no longer re-validate the application because the system's 1477500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty own API Level (6) is now higher than the maximum supported by the application 1487500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty (5). The system prevents the application from being visible to the user, in 1497500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty effect removing it from the device.</p> 1507500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1517500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <p class="warning"><strong>Warning:</strong> Declaring this attribute is not 1527500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty recommended. First, there is no need to set the attribute as means of blocking 1537500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty deployment of your application onto new versions of the Android platform as they 1547500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty are released. By design, new versions of the platform are fully 1557500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty backward-compatible. Your application should work properly on new versions, 1567500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty provided it uses only standard APIs and follows development best practices. 1577500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty Second, note that in some cases, declaring the attribute can <strong>result in 1587500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty your application being removed from users' devices after a system 159d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Main update</strong> to a higher API Level. Most devices on which your application 1607500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty is likely to be installed will receive periodic system updates over the air, so 1617500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty you should consider their effect on your application before setting this 1627500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty attribute.</p> 1637500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1647500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <p style="margin-bottom:1em;">Introduced in: API Level 4</p> 1657500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1667500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty <div class="special">Future versions of Android (beyond Android 2.0.1) will no 167d4eb682b5fa06f476d6f091b7df1213e7f1e07f8Scott Mainlonger check or enforce the <code>maxSdkVersion</code> attribute during 1684d7bc65538c7cd9fbb1fbbcf22d1da47fcee1219Dirk Doughertyinstallation or re-validation. Google Play will continue to use the attribute 1697500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertyas a filter, however, when presenting users with applications available for 1707500f341dd65de97ac4272e7a9c5474423cef89fDirk Doughertydownload. </div> 1717500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty </dd> 1727500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1737500f341dd65de97ac4272e7a9c5474423cef89fDirk Dougherty 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project</dl></dd> 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 176dc52312ce3f9c7bd306c58264f82d6eb7ccd661aDirk Dougherty<!-- ##api level indication## --> 177dc52312ce3f9c7bd306c58264f82d6eb7ccd661aDirk Dougherty<dt>introduced in:</dt> 178dc52312ce3f9c7bd306c58264f82d6eb7ccd661aDirk Dougherty<dd>API Level 1</dd> 179dc52312ce3f9c7bd306c58264f82d6eb7ccd661aDirk Dougherty 180dc52312ce3f9c7bd306c58264f82d6eb7ccd661aDirk Dougherty</dl> 18150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<!--- CONTENT FROM OLD API LEVEL DOC ----> 18750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 18950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 19050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 19150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2 id="ApiLevels">What is API Level?</h2> 19250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 19350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>API Level is an integer value that uniquely identifies the framework API 19450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainrevision offered by a version of the Android platform.</p> 19550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 19650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The Android platform provides a framework API that applications can use to 19750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininteract with the underlying Android system. The framework API consists of:</p> 19850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 19950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<ul> 20050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>A core set of packages and classes</li> 20150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>A set of XML elements and attributes for declaring a manifest file</li> 20250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>A set of XML elements and attributes for declaring and accessing resources</li> 20350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>A set of Intents</li> 20450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>A set of permissions that applications can request, as well as permission 20550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainenforcements included in the system</li> 20650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</ul> 20750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 20850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Each successive version of the Android platform can include updates to the 20950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAndroid application framework API that it delivers. </p> 21050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 21150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Updates to the framework API are designed so that the new API remains 21250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincompatible with earlier versions of the API. That is, most changes in the API 21350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainare additive and introduce new or replacement functionality. As parts of the API 21450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainare upgraded, the older replaced parts are deprecated but are not removed, so 21550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthat existing applications can still use them. In a very small number of cases, 21650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainparts of the API may be modified or removed, although typically such changes are 21750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainonly needed to ensure API robustness and application or system security. All 21850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainother API parts from earlier revisions are carried forward without 21950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainmodification.</p> 22050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 22150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The framework API that an Android platform delivers is specified using an 22250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininteger identifier called "API Level". Each Android platform version supports 22350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainexactly one API Level, although support is implicit for all earlier API Levels 22450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main(down to API Level 1). The initial release of the Android platform provided 22550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAPI Level 1 and subsequent releases have incremented the API Level.</p> 22650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 22750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The following table specifies the API Level supported by each version of the 22850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAndroid platform.</p> 22950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 23050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<table> 23150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr> 23250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 233cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez <tr><td><a href="{@docRoot}about/versions/android-4.1.html">Android 4.1, 4.1.1</a></td> 234cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez <td><a href="{@docRoot}sdk/api_diff/16/changes.html" title="Diff Report">16</a></td> 235cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez <td>{@link android.os.Build.VERSION_CODES#JELLY_BEAN}</td> 236cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez <td><a href="{@docRoot}about/versions/jelly-bean.html">Platform 237cd940ef36c417f43ff8b2042abd88d6709138649Joe FernandezHighlights</a></td></tr> 238cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez 239cd940ef36c417f43ff8b2042abd88d6709138649Joe Fernandez <tr><td><a href="{@docRoot}about/versions/android-4.0.3.html">Android 4.0.3, 4.0.4</a></td> 24050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td> 24150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td> 24250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td rowspan="2"><a href="{@docRoot}about/versions/android-4.0-highlights.html">Platform 24350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainHighlights</a></td></tr> 24450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 24550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td> 24650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td> 24750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td> 24850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </tr> 24950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 25050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-3.2.html">Android 3.2</a></td> 25150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td> 25250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td> 25350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><!-- <a href="{@docRoot}about/versions/android-3.2-highlights.html">Platform 25450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainHighlights</a>--></td></tr> 25550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 25650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-3.1.html">Android 3.1.x</a></td> 25750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td> 25850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td> 25950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}about/versions/android-3.1-highlights.html">Platform Highlights</a></td></tr> 26050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 26150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-3.0.html">Android 3.0.x</td> 26250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td> 26350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td> 26450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}about/versions/android-3.0-highlights.html">Platform Highlights</a></td></tr> 26550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 26650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td> 26750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td> 26850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td> 26950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td rowspan="2"><a href="{@docRoot}about/versions/android-2.3-highlights.html">Platform 27050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainHighlights</a></td></tr> 27150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 27250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 27350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main2.3</td> 27450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td> 27550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td> 27650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </tr> 27750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 27850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.2.html">Android 2.2.x</td> 27950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td> 28050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#FROYO}</td> 28150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}about/versions/android-2.2-highlights.html">Platform Highlights</a></td></tr> 28250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 28350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.1.html">Android 2.1.x</td> 28450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td> 28550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td> 28650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td rowspan="3" ><a href="{@docRoot}about/versions/android-2.0-highlights.html">Platform 28750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainHighlights</a></td></tr> 28850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 28950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1</td> 29050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td> 29150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td> 29250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </tr> 29350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 29450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-2.0.html">Android 2.0</td> 29550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td> 29650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td> 29750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main </tr> 29850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 29950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-1.6.html">Android 1.6</td> 30050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td> 30150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#DONUT}</td> 30250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}about/versions/android-1.6-highlights.html">Platform Highlights</a></td></tr> 30350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 30450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-1.5.html">Android 1.5</td> 30550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td> 30650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td> 30750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td><a href="{@docRoot}about/versions/android-1.5-highlights.html">Platform Highlights</a></td></tr> 30850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 30950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td><a href="{@docRoot}about/versions/android-1.1.html">Android 1.1</td> 31050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>2</td> 31150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr> 31250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 31350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <tr><td>Android 1.0</td> 31450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>1</td> 31550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td>{@link android.os.Build.VERSION_CODES#BASE}</td> 31650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <td></td></tr> 31750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</table> 31850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 31950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 32050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2 id="uses">Uses of API Level in Android</h2> 32150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 32250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The API Level identifier serves a key role in ensuring the best possible 32350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainexperience for users and application developers: 32450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 32550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<ul> 32650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>It lets the Android platform describe the maximum framework API revision 32750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthat it supports</li> 32850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>It lets applications describe the framework API revision that they 32950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainrequire</li> 33050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>It lets the system negotiate the installation of applications on the user's 33150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindevice, such that version-incompatible applications are not installed.</li> 33250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</ul> 33350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 33450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Each Android platform version stores its API Level identifier internally, in 33550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe Android system itself. </p> 33650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 33750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Applications can use a manifest element provided by the framework API — 33850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code><uses-sdk></code> — to describe the minimum and maximum API 33950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainLevels under which they are able to run, as well as the preferred API Level that 34050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthey are designed to support. The element offers three key attributes:</p> 34150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 34250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<ul> 34350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li><code>android:minSdkVersion</code> — Specifies the minimum API Level 34450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainon which the application is able to run. The default value is "1".</li> 34550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li><code>android:targetSdkVersion</code> — Specifies the API Level 34650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainon which the application is designed to run. In some cases, this allows the 34750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication to use manifest elements or behaviors defined in the target 34850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAPI Level, rather than being restricted to using only those defined 34950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainfor the minimum API Level.</li> 35050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li><code>android:maxSdkVersion</code> — Specifies the maximum API Level 35150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainon which the application is able to run. <strong>Important:</strong> Please read the <a 35250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhref="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 35350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindocumentation before using this attribute. </li> 35450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</ul> 35550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 35650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>For example, to specify the minimum system API Level that an application 35750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainrequires in order to run, the application would include in its manifest a 35850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code><uses-sdk></code> element with a <code>android:minSdkVersion</code> 35950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainattribute. The value of <code>android:minSdkVersion</code> would be the integer 36050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincorresponding to the API Level of the earliest version of the Android platform 36150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainunder which the application can run. </p> 36250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 36350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>When the user attempts to install an application, or when revalidating an 36450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainappplication after a system update, the Android system first checks the 36550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code><uses-sdk></code> attributes in the application's manifest and 36650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincompares the values against its own internal API Level. The system allows the 36750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininstallation to begin only if these conditions are met:</p> 36850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 36950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<ul> 37050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>If a <code>android:minSdkVersion</code> attribute is declared, its value 37150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainmust be less than or equal to the system's API Level integer. If not declared, 37250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe system assumes that the application requires API Level 1. </li> 37350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<li>If a <code>android:maxSdkVersion</code> attribute is declared, its value 37450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainmust be equal to or greater than the system's API Level integer. 37550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainIf not declared, the system assumes that the application 37650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhas no maximum API Level. Please read the <a 37750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhref="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 37850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindocumentation for more information about how the system handles this attribute.</li> 37950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</ul> 38050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 38150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>When declared in an application's manifest, a <code><uses-sdk></code> 38250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainelement might look like this: </p> 38350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 38450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<pre><manifest> 38550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main <uses-sdk android:minSdkVersion="5" /> 38650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main ... 38750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</manifest></pre> 38850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 38950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The principal reason that an application would declare an API Level in 39050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code>android:minSdkVersion</code> is to tell the Android system that it is 39150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainusing APIs that were <em>introduced</em> in the API Level specified. If the 39250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication were to be somehow installed on a platform with a lower API Level, 39350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthen it would crash at run-time when it tried to access APIs that don't exist. 39450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainThe system prevents such an outcome by not allowing the application to be 39550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininstalled if the lowest API Level it requires is higher than that of the 39650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform version on the target device.</p> 39750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 39850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>For example, the {@link android.appwidget} package was introduced with API 39950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainLevel 3. If an application uses that API, it must declare a 40050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code>android:minSdkVersion</code> attribute with a value of "3". The 40150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication will then be installable on platforms such as Android 1.5 (API Level 40250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main3) and Android 1.6 (API Level 4), but not on the Android 1.1 (API Level 2) and 40350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAndroid 1.0 platforms (API Level 1).</p> 40450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 40550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>For more information about how to specify an application's API Level 40650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainrequirements, see the <a 40750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhref="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code><uses-sdk></code></a> 40850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main section of the manifest file documentation.</p> 40950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 41050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 41150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2 id="considerations">Development Considerations</h2> 41250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 41350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The sections below provide information related to API level that you should 41450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainconsider when developing your application.</p> 41550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 41650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h3 id="fc">Application forward compatibility</h3> 41750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 41850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Android applications are generally forward-compatible with new versions of 41950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe Android platform.</p> 42050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 42150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Because almost all changes to the framework API are additive, an Android 42250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication developed using any given version of the API (as specified by its 42350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAPI Level) is forward-compatible with later versions of the Android platform and 42450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhigher API levels. The application should be able to run on all later versions 42550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainof the Android platform, except in isolated cases where the application uses a 42650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainpart of the API that is later removed for some reason. </p> 42750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 42850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Forward compatibility is important because many Android-powered devices 42950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainreceive over-the-air (OTA) system updates. The user may install your 43050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication and use it successfully, then later receive an OTA update to a new 43150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainversion of the Android platform. Once the update is installed, your application 43250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainwill run in a new run-time version of the environment, but one that has the API 43350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainand system capabilities that your application depends on. </p> 43450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 43550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>In some cases, changes <em>below</em> the API, such those in the underlying 43650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainsystem itself, may affect your application when it is run in the new 43750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainenvironment. For that reason it's important for you, as the application 43850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindeveloper, to understand how the application will look and behave in each system 43950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainenvironment. To help you test your application on various versions of the Android 44050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform, the Android SDK includes multiple platforms that you can download. 44150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainEach platform includes a compatible system image that you can run in an AVD, to 44250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maintest your application. </p> 44350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 44450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h3 id="bc">Application backward compatibility</h3> 44550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 44650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Android applications are not necessarily backward compatible with versions of 44750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe Android platform older than the version against which they were compiled. 44850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</p> 44950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 45050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Each new version of the Android platform can include new framework APIs, such 45150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainas those that give applications access to new platform capabilities or replace 45250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainexisting API parts. The new APIs are accessible to applications when running on 45350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe new platform and, as mentioned above, also when running on later versions of 45450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe platform, as specified by API Level. Conversely, because earlier versions of 45550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe platform do not include the new APIs, applications that use the new APIs are 45650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainunable to run on those platforms.</p> 45750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 45850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Although it's unlikely that an Android-powered device would be downgraded to 45950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maina previous version of the platform, it's important to realize that there are 46050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainlikely to be many devices in the field that run earlier versions of the 46150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform. Even among devices that receive OTA updates, some might lag and 46250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainmight not receive an update for a significant amount of time. </p> 46350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 46450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h3 id="platform">Selecting a platform version and API Level</h3> 46550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 46650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>When you are developing your application, you will need to choose 46750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe platform version against which you will compile the application. In 46850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maingeneral, you should compile your application against the lowest possible 46950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainversion of the platform that your application can support. 47050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 47150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>You can determine the lowest possible platform version by compiling the 47250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication against successively lower build targets. After you determine the 47350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainlowest version, you should create an AVD using the corresponding platform 47450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainversion (and API Level) and fully test your application. Make sure to declare a 47550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code>android:minSdkVersion</code> attribute in the application's manifest and 47650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainset its value to the API Level of the platform version. </p> 47750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 47850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h3 id="apilevel">Declaring a minimum API Level</h3> 47950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 48050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>If you build an application that uses APIs or system features introduced in 48150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe latest platform version, you should set the 48250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<code>android:minSdkVersion</code> attribute to the API Level of the latest 48350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform version. This ensures that users will only be able to install your 48450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainapplication if their devices are running a compatible version of the Android 48550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform. In turn, this ensures that your application can function properly on 48650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maintheir devices. </p> 48750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 48850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>If your application uses APIs introduced in the latest platform version but 48950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindoes <em>not</em> declare a <code>android:minSdkVersion</code> attribute, then 49050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainit will run properly on devices running the latest version of the platform, but 49150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<em>not</em> on devices running earlier versions of the platform. In the latter 49250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincase, the application will crash at runtime when it tries to use APIs that don't 49350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainexist on the earlier versions.</p> 49450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 49550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h3 id="testing">Testing against higher API Levels</h3> 49650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 49750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>After compiling your application, you should make sure to test it on the 49850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform specified in the application's <code>android:minSdkVersion</code> 49950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainattribute. To do so, create an AVD that uses the platform version required by 50050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainyour application. Additionally, to ensure forward-compatibility, you should run 50150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainand test the application on all platforms that use a higher API Level than that 50250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainused by your application. </p> 50350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 50450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The Android SDK includes multiple platform versions that you can use, 50550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainincluding the latest version, and provides an updater tool that you can use to 50650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindownload other platform versions as necessary. </p> 50750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 50850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>To access the updater, use the <code>android</code> command-line tool, 50950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainlocated in the <sdk>/tools directory. You can launch the SDK updater by 51050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainexecuting <code>android sdk</code>. You can 51150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainalso simply double-click the android.bat (Windows) or android (OS X/Linux) file. 51250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainIn ADT, you can also access the updater by selecting 51350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<strong>Window</strong> > <strong>Android SDK 51450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainManager</strong>.</p> 51550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 51650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>To run your application against different platform versions in the emulator, 51750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincreate an AVD for each platform version that you want to test. For more 51850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininformation about AVDs, see <a 51950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainhref="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>. If 52050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainyou are using a physical device for testing, ensure that you know the API Level 52150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainof the Android platform it runs. See the table at the top of this document for 52250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maina list of platform versions and their API Levels. </p> 52350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 52450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2 id="provisional">Using a Provisional API Level</h2> 52550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 52650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>In some cases, an "Early Look" Android SDK platform may be available. To let 52750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainyou begin developing on the platform although the APIs may not be final, the 52850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform's API Level integer will not be specified. You must instead use the 52950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainplatform's <em>provisional API Level</em> in your application manifest, in order 53050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainto build applications against the platform. A provisional API Level is not an 53150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maininteger, but a string matching the codename of the unreleased platform version. 53250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainThe provisional API Level will be specified in the release notes for the Early 53350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainLook SDK release notes and is case-sensitive.</p> 53450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 53550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The use of a provisional API Level is designed to protect developers and 53650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindevice users from inadvertently publishing or installing applications based on 53750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe Early Look framework API, which may not run properly on actual devices 53850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainrunning the final system image.</p> 53950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 54050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>The provisional API Level will only be valid while using the Early Look SDK 54150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainand can only be used to run applications in the emulator. An application using 54250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe provisional API Level can never be installed on an Android device. At the 54350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainfinal release of the platform, you must replace any instances of the provisional 54450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAPI Level in your application manifest with the final platform's actual API 54550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainLevel integer.</p> 54650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 54750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 54850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<h2 id="filtering">Filtering the Reference Documentation by API Level</h2> 54950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 55050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Reference documentation pages on the Android Developers site offer a "Filter 55150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainby API Level" control in the top-right area of each page. You can use the 55250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maincontrol to show documentation only for parts of the API that are actually 55350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainaccessible to your application, based on the API Level that it specifies in 55450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainthe <code>android:minSdkVersion</code> attribute of its manifest file. </p> 55550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 55650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>To use filtering, select the checkbox to enable filtering, just below the 55750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainpage search box. Then set the "Filter by API Level" control to the same API 55850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainLevel as specified by your application. Notice that APIs introduced in a later 55950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott MainAPI Level are then grayed out and their content is masked, since they would not 56050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainbe accessible to your application. </p> 56150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 56250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Filtering by API Level in the documentation does not provide a view 56350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainof what is new or introduced in each API Level — it simply provides a way 56450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainto view the entire API associated with a given API Level, while excluding API 56550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainelements introduced in later API Levels.</p> 56650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 56750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>If you decide that you don't want to filter the API documentation, just 56850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindisable the feature using the checkbox. By default, API Level filtering is 56950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maindisabled, so that you can view the full framework API, regardless of API Level. 57050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main</p> 57150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 57250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main<p>Also note that the reference documentation for individual API elements 57350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainspecifies the API Level at which each element was introduced. The API Level 57450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainfor packages and classes is specified as "Since <api level>" at the 57550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Maintop-right corner of the content area on each documentation page. The API Level 57650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainfor class members is specified in their detailed description headers, 57750e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Mainat the right margin. </p> 57850e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 57950e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58050e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58150e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58250e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58350e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58450e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58550e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 58650e990c64fa23ce94efa76b9e72df7f8ec3cee6aScott Main 587