blob: 9e3d4613cdba2fbff345f9cece34fe13e51f89ad [file] [log] [blame]
Dirk Doughertya0711e72010-05-07 15:14:56 -07001page.title=Android Compatibility
Scott Main6afeb0e2013-04-16 21:05:51 -07002excludeFromSuggestions=true
Dirk Doughertya0711e72010-05-07 15:14:56 -07003@jd:body
4
5<div id="qv-wrapper">
6<div id="qv">
7
8<h2>See also</h2>
9 <ol>
10<li><a
Dirk Dougherty2b286bb2012-11-29 17:25:09 -080011href="{@docRoot}google/play/filters.html">Filtering on Google Play</a></li>
Dirk Doughertya0711e72010-05-07 15:14:56 -070012<li><a
13href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing Alternative Resources</a></li>
14<li><a
15href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
16<li style="margin-top:3px;"><code><a
17href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
18<li><code><a
19href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
20<li><code><a
21href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
22<li><code><a
23href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
24<li><code><a
25href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
26<li><code><a
27href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
28</ol>
29
30
31</div> </div>
32
33<p>Android is designed to run on many different types of devices. For
34developers, the range and number of devices means a huge potential audience: the
35more devices that run Android apps, the more users who can access your app. In
36exchange, however, it also means that your apps will have to cope with that same
37variety of hardware.</p>
38
39<p>Fortunately, Android has built-in tools and support that make it easy for
Dirk Dougherty44108b52010-05-18 16:53:06 -070040your apps to do that, while at the same time letting you maintain control of
41what types of devices your app is available to. With a bit of forethought and
42some minor changes in your app's manifest file, you can ensure that users
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080043whose devices can’t run your app will never see it on Google Play, and
Dirk Doughertya0711e72010-05-07 15:14:56 -070044will not get in trouble by downloading it. This page explains how you can
45control which devices have access to your apps, and how to prepare your apps to
46make sure they reach the right audience.</p>
47
48
Dirk Dougherty44108b52010-05-18 16:53:06 -070049<h3 id="defined">What does “compatibility” mean?</h3>
Dirk Doughertya0711e72010-05-07 15:14:56 -070050
Dirk Dougherty51d812b832010-05-14 13:52:30 -070051<p>A device is “Android compatible” if it can correctly run apps written for the
Dirk Dougherty6750bb72010-05-17 17:09:41 -070052<em>Android execution environment</em>. The exact details of the Android execution
53environment</em> are defined by the Android Compatibility Definition Document,
54but the single most important characteristic of a compatible device is the
55ability to install and correctly run an Android <code>.apk</code> file.</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -070056
57<p>There is exactly one Android API for each <a
Scott Main50e990c2012-06-21 17:14:39 -070058href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a>, and it’s the same
Dirk Doughertya0711e72010-05-07 15:14:56 -070059API no matter what kind of device it’s installed on. No parts of the API are
60optional, and you never have to worry about parts of the API missing on some
61devices. Every compatible Android device your app will land on will include
62every class and every API for that API level.</p>
63
64<p>Of course, some APIs won’t work correctly if a particular device lacks the
65corresponding hardware or feature. But that’s not a problem: we also designed
66Android to prevent apps from being visible to devices which don’t have features
67the apps require. We’ve built support for this right into the SDK tools, and
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080068it’s part of the Android platform itself, as well as part of Google Play.</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -070069
70<p>As a developer, you have complete control of how and where your apps are
71available. Android provides tools as a first-class part of the platform that let
72you manage this. You control the availability of your apps, so that they reach
73only the devices capable of running them.</p>
74
75<h3 id="how">How does it work?</h3>
76
77<p>You manage your app’s availability through a simple three-step process:</p>
78
79<ol>
80<li>You state the features your app requires by declaring <a
81href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
82elements its manifest file.</li>
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -080083<li>Devices are required to declare the features they include to Google
84Play.</li>
85<li>Google Play uses your app’s stated requirements to filter it from devices
Dirk Doughertya0711e72010-05-07 15:14:56 -070086that don’t meet those requirements.</li>
87</ol>
88
89<p>This way, users never even see apps that won’t work properly on their
90devices. As long as you accurately describe your app’s requirements, you don’t
91need to worry about users blaming you for compatibility problems.</p>
92
93<p>If you’re familiar with web development, you may recognize this model as
94“capability detection”. Web developers typically prefer this approach to
95“browser detection”, because it’s very difficult to keep up as new browsers and
96new versions of current browsers are released. By checking for support for
97specific required capabilities instead of the current browser, web developers
98get better fine-grained control. That’s the same approach Android uses: since
99it’s impossible to keep up with all the Android devices being released, you
100instead use the fine-grained controls Android provides.</p>
101
102<h3>Filtering for technical reasons</h3>
103
104 <div class="sidebox-wrapper">
105 <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
106 <div id="qv-sub-rule">
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800107 <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0;">
108 <p style="color:#669999;">Filtering on Google Play</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -0700109
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800110 <p>Google Play filters the applications that are visible to users, so
Dirk Doughertya0711e72010-05-07 15:14:56 -0700111that users can see and download only those applications that are compatible with
112their devices.</p>
113
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800114 <p style="margin-top:1em;">One of the ways Google Play filters applications is by
115feature compatibility. To do this, Google Play checks the
Dirk Doughertya0711e72010-05-07 15:14:56 -0700116<code>&lt;uses-feature&gt;</code> elements in each application's manifest, to
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800117establish the app's feature needs. Google Play then shows or hides the application to
Dirk Doughertya0711e72010-05-07 15:14:56 -0700118each user, based on a comparison with the features available on the user's
119device.
120
121<p style="margin-top:1em;">For information about other filters that you can
122use to control the availability of your apps, see the
Dirk Dougherty2b286bb2012-11-29 17:25:09 -0800123<a href="{@docRoot}google/play/filters.html">Filters on Google Play</a>
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800124document.</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -0700125 </div>
126</div>
127
128<p>Android includes support for a lot of features, some hardware and some
129software. Examples include compass and accelerometer sensors, cameras, and Live
130Wallpapers. However, not every device will support every feature. For instance,
131some devices don’t have the hardware horsepower to display Live Wallpapers
132well.</p>
133
134<p>To manage this, Android defines <em>feature IDs</em>. Every capability has a
135corresponding feature ID defined by the Android platform. For instance, the
136feature ID for compass is <code>“android.hardware.sensor.compass”</code>,
137while the feature
138ID for Live Wallpapers is <code>“android.software.live_wallpapers”</code>. Each of these IDs
139also has a corresponding Java-language constant on the
140{@link android.content.pm.PackageManager} class that you can use to query whether
141feature is supported at runtime. As Android adds support for new features in
142future versions, new feature IDs will be added as well.</p>
143
144<p>When you write your application, you specify which features your app requires
145by listing their feature IDs in <code>&lt;uses-feature&gt;</code> elements in
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800146the <code>AndroidManifest.xml</code> file. This is the information that Google
147Play uses to match your app to devices that can run it. For instance, if you
Dirk Doughertya0711e72010-05-07 15:14:56 -0700148state that your app requires android.software.live_wallpapers, it won’t be shown
149to devices that don’t support Live Wallpapers.</p>
150
151<p>This puts you in total control of your app &mdash; because you don’t have to
152declare these features. Consider an example involving cameras.</p>
153
154<p>If you’re building a really impressive next-generation augmented-reality app,
155your app won’t function at all without a camera. However, if you’re building a
156shopping app that only uses the camera for barcode scanning, users without
157cameras might still find it useful even if they can’t scan barcodes. While both
158apps need to acquire the permission to access the camera, only the first app
159needs to state that it requires a camera. (The shopping app can simply check at
160runtime and disable the camera-related features if there’s no camera
161present.)</p>
162
163<p>Since only you can say what the best approach is for your app, Android
164provides the tools and lets you make your own tradeoff between maximizing
165audience size and minimizing development costs.</p>
166
167
168<h3 id="filtering">Filtering for business reasons</h3>
169
170<p>It’s possible that you may need to restrict your app’s availability for
171business or legal reasons. For instance, an app that displays train schedules
172for the London Underground is unlikely to be useful to users outside the United
173Kingdom. Other apps might not be permitted in certain countries for business or
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800174legal reasons. For cases such as these, Google Play itself provides
Dirk Doughertya0711e72010-05-07 15:14:56 -0700175developers with filtering options that allow them control their app’s
176availability for non-technical reasons.</p>
177
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800178<p>The help information for Google Play provides full details, but in a
179nutshell, developers can use the Google Play publisher UI to:</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -0700180
181<ul>
182<li>List the countries an app is available in.</li>
183<li>Select which carrier’s users are able to access the app.</li>
184</ul>
185
186<p>Filtering for technical compatibility (such as required hardware components)
187is always based on information contained within your <code>.apk</code> file. But
188filtering for non-technical reasons (such as geographic restrictions) is always
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800189handled in the Google Play user interface.</p>
Dirk Doughertya0711e72010-05-07 15:14:56 -0700190
191<h3 id="futureproofing">Future-proofing</h3>
192
193<p>There’s one additional quirk that we haven’t yet addressed: protecting apps
194from changes made to future versions of Android. If the Android platform
195introduces a new feature or changes how existing features are handled, what
196happens to existing apps that were written without any knowledge of the new
197behavior?</p>
198
199<p>Simply put, Android commits to not making existing apps available to devices
200where they won’t work properly, even when the platform changes. The best way to
201explain this is through examples, so here are two:</p>
202
203<ul>
204<li>Android 1.0 through 1.5 required a 2 megapixel camera with auto-focus.
205However, with version 1.6, Android devices were permitted to omit the auto-focus
206capability, though a (fixed-focus) camera was still required. Some apps such as
207barcode scanners do not function as well with cameras that do not auto-focus. To
208prevent users from having a bad experience with those apps, existing apps that
209obtain permission to use the Camera were assumed by default to require
Dirk Dougherty4d7bc6552012-01-27 17:56:49 -0800210auto-focus. This allowed Google Play to filter those apps from devices that
Dirk Doughertya0711e72010-05-07 15:14:56 -0700211lack auto-focus.</li>
212
213<li>Android 2.2, meanwhile, allowed the microphone to be optional on some
214devices, such as set-top boxes. Android 2.2 included a new feature ID for the
215microphone which allows developers to filter their apps if necessary, but
216&mdash; as with camera &mdash; apps that obtain permission to record audio are
217assumed to require the microphone feature by default. If your app can use a
218microphone but doesn’t strictly need it, you can explicitly state that you don’t
219require it; but unless you do that, your app won’t be shown to devices without
220microphones.</li>
221</ul>
222
223<p>In other words, whenever Android introduces new features or changes existing
224ones, we will always take steps to protect existing applications so that they
225don’t end up being available to devices where they won’t work.</p>
226
Dirk Dougherty6750bb72010-05-17 17:09:41 -0700227<p>This is implemented, in part, using the <code>aapt</code> tool in the SDK.
228To see which features your app explicitly requires or is implicitly assumed to
229require, you can use the command <code>aapt dump badging</code>.</p>
230
Dirk Doughertya0711e72010-05-07 15:14:56 -0700231<h3 id="conclusion">Conclusion</h3>
232
233<p>The goal of Android is to create a huge installed base for developers to take
234advantage of. One of the ways we will achieve this is through different kinds of
235hardware running the same software environment. But we also recognize that only
236developers know which kinds of devices their apps make sense on. We’ve built in
237tools to the SDK and set up policies and requirements to ensure that developers
238remain in control of their apps, today and in the future. With the information
239you just read, and the resources listed in the sidebar of this document, you
240can publish your app with the confidence that only users who can run it will
241see it.</p>
242
Dirk Dougherty6750bb72010-05-17 17:09:41 -0700243<p>For more information about Android device compatibility, please visit:</p>
244
245<p style="margin-left:2em;"><a href="http://source.android.com/compatibility/index.html">http://source.android.com/compatibility/index.html</a></p>
246
Dirk Doughertya0711e72010-05-07 15:14:56 -0700247
248