versioning.jd revision 50e990c64fa23ce94efa76b9e72df7f8ec3cee6a
1page.title=Versioning Your Applications
2@jd:body
3
4<div id="qv-wrapper">
5<div id="qv">
6
7<h2>Quickview</h2>
8
9<ul>
10<li>Your application <em>must</em> be versioned</a></li>
11<li>You set the version in the application's manifest file</li>
12<li>How you version your applications affects how users upgrade </li>
13<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
14</ul>
15
16<h2>In this document</h2>
17
18<ol>
19<li><a href="#appversioning">Setting Application Version</a></li>
20<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
21</ol>
22
23
24<h2>See also</h2>
25
26<ol>
27<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
28<li><a href="{@docRoot}tools/publishing/publishing.html#market">Publishing On Google Play</a></li>
29<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
30</ol>
31
32</div>
33</div>
34
35<p>Versioning is a critical component of your application upgrade and maintenance
36strategy. Versioning is important because:</p>
37
38<ul>
39<li>Users need to have specific information about the application version that
40is installed on their devices and the upgrade versions available for
41installation. </li>
42<li>Other applications &mdash; including other applications that you publish as
43a suite &mdash; need to query the system for your application's version, to
44determine compatibility and identify dependencies.</li>
45<li>Services through which you will publish your application(s) may also need to
46query your application for its version, so that they can display the version to
47users. A publishing service may also need to check the application version to
48determine compatibility and establish upgrade/downgrade relationships.</li>
49</ul>
50
51<p>The Android system does not use app version information to enforce
52restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
53developer) are responsible for enforcing version restrictions within your application or by
54informing users of the version restrictions and limitations. The Android system does, however,
55enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
56manifest. This attribute allows an application to specify the minimum system API with which it is
57compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
58Version</a>.</p>
59
60<h2 id="appversioning">Setting Application Version</h2>
61<p>To define the version information for your application, you set attributes in
62the application's manifest file. Two attributes are available, and you should
63always define values for both of them: </p>
64
65<ul>
66<li><code>android:versionCode</code> &mdash; An integer value that represents
67the version of the application code, relative to other versions.
68
69<p>The value is an integer so that other applications can programmatically
70evaluate it, for example to check an upgrade or downgrade relationship. You can
71set the value to any integer you want, however you should make sure that each
72successive release of your application uses a greater value. The system does not
73enforce this behavior, but increasing the value with successive releases is
74normative. </p>
75
76<p>Typically, you would release the first version of your application with
77versionCode set to 1, then monotonically increase the value with each release,
78regardless whether the release constitutes a major or minor release. This means
79that the <code>android:versionCode</code> value does not necessarily have a
80strong resemblance to the application release version that is visible to the
81user (see <code>android:versionName</code>, below). Applications and publishing
82services should not display this version value to users.</p>
83</li>
84<li><code>android:versionName</code> &mdash; A string value that represents the
85release version of the application code, as it should be shown to users.
86<p>The value is a string so that you can describe the application version as a
87&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
88absolute or relative version identifier. </p>
89
90<p>As with <code>android:versionCode</code>, the system does not use this value
91for any internal purpose, other than to enable applications to display it to
92users. Publishing services may also extract the <code>android:versionName</code>
93value for display to users.</p>
94</li>
95</ul>
96
97<p>You define both of these version attributes in the
98<code>&lt;manifest&gt;</code> element of the manifest file. </p>
99
100<p>Here's an example manifest that shows the <code>android:versionCode</code>
101and <code>android:versionName</code> attributes in the
102<code>&lt;manifest&gt;</code> element. </p>
103
104<pre>
105&lt;?xml version="1.0" encoding="utf-8"?&gt;
106&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
107      package="com.example.package.name"
108      android:versionCode="2"
109      android:versionName="1.1"&gt;
110    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
111        ...
112    &lt;/application&gt;
113&lt;/manifest&gt;
114</pre>
115
116<p>In this example, note that <code>android:versionCode</code> value indicates
117that the current .apk contains the second release of the application code, which
118corresponds to a minor follow-on release, as shown by the
119<code>android:versionName</code> string. </p>
120
121<p>The Android framework provides an API to let applications query the system
122for version information about your application. To obtain version information,
123applications use the
124{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
125method of {@link android.content.pm.PackageManager PackageManager}. </p>
126
127<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
128
129<p>If your application requires a specific minimum version of the Android
130platform, or is designed only to support a certain range of Android platform
131versions, you can specify those version requirements as API Level identifiers
132in the application's manifest file. Doing so ensures that your
133application can only be installed on devices that
134are running a compatible version of the Android system. </p>
135
136<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
137element in the application's manifest, with one or more of these attributes: </p>
138
139<ul>
140<li><code>android:minSdkVersion</code> &mdash; The minimum version
141of the Android platform on which the application will run, specified
142by the platform's API Level identifier. </li>
143<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
144on which the application is designed to run. In some cases, this allows the
145application to use manifest elements or behaviors defined in the target
146API Level, rather than being restricted to using only those defined
147for the minimum API Level.</li>
148<li><code>android:maxSdkVersion</code> &mdash; The maximum version
149of the Android platform on which the application is designed to run,
150specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
151href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
152documentation before using this attribute. </li>
153</ul>
154
155<p>When preparing to install your application, the system checks the value of this
156attribute and compares it to the system version. If the
157<code>android:minSdkVersion</code> value is greater than the system version, the
158system aborts the installation of the application. Similarly, the system
159installs your application only if its <code>android:maxSdkVersion</code>
160is compatible with the platform version.</p>
161
162<p>If you do not specify these attributes in your manifest, the system assumes
163that your application is compatible with all platform versions, with no
164maximum API Level. </p>
165
166<p>To specify a minimum platform version for your application, add a
167<code>&lt;uses-sdk&gt;</code> element as a child of
168<code>&lt;manifest&gt;</code>, then define the
169<code>android:minSdkVersion</code> as an attribute. </p>
170
171<p>For more information, see the <a
172href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
173manifest element documentation and the <a
174href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
175