summaryrefslogtreecommitdiffstats
path: root/docs/html/guide/topics/manifest/manifest-element.jd
blob: fd9f2034ebd8008f07895e33f873772157e5e1b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
page.title=<manifest>
parent.title=The AndroidManifest.xml File
parent.link=manifest-intro.html
@jd:body

<dl class="xml">
<dt>syntax:</dt>
<dd><pre class="stx">&lt;manifest xmlns:<a href="#nspace">android</a>="http://schemas.android.com/apk/res/android"
          <a href="#package">package</a>="<i>string</i>"
          android:<a href="#uid">sharedUserId</a>="<i>string</i>"
          android:<a href="#uidlabel">sharedUserLabel</a>="<i>string resource</i>" <!-- ##api level 3## -->
          android:<a href="#vcode">versionCode</a>="<i>integer</i>"
          android:<a href="#vname">versionName</a>="<i>string</i>"
          android:<a href="#install">installLocation</a>=["auto" | "internalOnly" | "preferExternal"] &gt;
    . . .
&lt;/manifest&gt;</pre></dd>

<p>
<dt>contained in:</dt>
<dd><i>none</i></dd>

<p>
<p>
<dt>must contain:</dt>
<dd><code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code></dd>

<dt>can contain:</dt>
<dd><code><a href="{@docRoot}guide/topics/manifest/instrumentation-element.html">&lt;instrumentation&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-element.html">&lt;permission&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html">&lt;permission-group&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html">&lt;permission-tree&gt;</a></code>
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>  <!-- ##api level 3## -->
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></dd>
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></dd>

<p>
<dt>description:</dt>
<dd>The root element of the AndroidManifest.xml file.  It must 
contain an <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code> element 
and specify {@code xmlns:android} and {@code package} attributes.</dd>

<dt>attributes:</dt>
<dd>
<dl class="attr">
<dt><a name="nspace"></a>{@code xmlns:android}</dt>
<dd>Defines the Android namespace.  This attribute should always be set 
to "{@code http://schemas.android.com/apk/res/android}".</dd>

<dt><a name="package"></a>{@code package}</dt>
<dd>A full Java-language-style package name for the application.  The name should 
be unique.  The name may contain uppercase or lowercase letters ('A'
through 'Z'), numbers, and underscores ('_').  However, individual
package name parts may only start with letters.

<p>To avoid conflicts with other developers, you should use Internet domain ownership as the
basis for your package names (in reverse). For example, applications published by Google start with
<code>com.google</code>. You should also never use the <code>com.example</code> namespace when
publishing your applications.</p>

  <p>
  The package name serves as a unique identifier for the application.
  It's also the default name for the application process (see the
  <code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
  element's
  <code><a href="{@docRoot}guide/topics/manifest/application-element.html#aff">process</a></code>
  process</a></code> attribute) and the default task affinity of an activity
  (see the
  <code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
  element's
  <code><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">taskAffinity</a></code> attribute).
  </p>

  <p class="caution"><strong>Caution:</strong> Once you publish your application, you
<strong>cannot change the package name</strong>. The package name defines your application's
identity, so if you change it, then it is considered to be a different application and users of
the previous version cannot update to the new version.</p>

</dd>

<dt><a name="uid"></a>{@code android:sharedUserId}</dt>
<dd>The name of a Linux user ID that will be shared with other applications.  
By default, Android assigns each application its own unique user ID.  
However, if this attribute is set to the same value for two or more applications, 
they will all share the same ID &mdash; provided that they are also signed 
by the same certificate.  Application with the same user ID can access each 
other's data and, if desired, run in the same process.</dd>

<dt><a name="uidlabel"></a>{@code android:sharedUserLabel}</dt>
<dd>A user-readable label for the shared user ID.  The label must be set as
a reference to a string resource; it cannot be a raw string.

  <p>
  <!-- ##api level indication## -->
  This attribute was introduced in API Level 3.  It is meaningful only if the
  <code><a href="#uid">sharedUserId</a></code> attribute is also set.
  </p>
</dd>

<dt><a name="vcode"></a>{@code android:versionCode}</dt>
<dd>An internal version number.  This number is used only to determine whether
one version is more recent than another, with higher numbers indicating more 
recent versions.  This is not the version number shown to users; that number 
is set by the {@code versionName} attribute.

  <p>
  The value must be set as an integer, such as "100".  You can define it however
  you want, as long as each successive version has a higher number.  For example,
  it could be a build number.  Or you could translate a version number in "x.y"
  format to an integer by encoding the "x" and "y" separately in the lower and
  upper 16 bits.  Or you could simply increase the number by one each time a new
  version is released.
  </p>
</dd>

<dt><a name="vname"></a>{@code android:versionName}</dt>
<dd>The version number shown to users.  This attribute can be set as a raw 
string or as a reference to a string resource.  The string has no other purpose 
than to be displayed to users.  The {@code versionCode} attribute holds 
the significant version number used internally.
</dd>

<dt><a name="install"></a>{@code android:installLocation}</dt>
<dd>The default install location for the application.

<p>The following keyword strings are accepted:</p>

<table>
<tr>
   <th>Value</th>
   <th>Description</th>
</tr><tr>
   <td>"{@code internalOnly}"</td>
   <td>The application must be installed on the internal device storage only. If this is set,
the application will never be installed on the external storage. If the internal
storage is full, then the system will not install the application. This is also the default behavior
if you do not define {@code android:installLocation}.</td>
</tr><tr>
   <td>"{@code auto}"</td>
   <td>The application may be installed on the external storage, but the system will install the
application on the internal storage by default. If the internal storage is full, then the system
will install it on the external storage. Once installed, the user can move the application
to either internal or external storage through the system settings.</td>
</tr><tr>
   <td>"{@code preferExternal}"</td>
   <td>The application prefers to be installed on the external storage (SD card). There is no
guarantee that the system will honor this request. The application might be installed on internal
storage if the external media is unavailable or full, or if the application uses the forward-locking
mechanism (not supported on external storage). Once installed, the user can move the application to
either internal or external storage through the system settings.</td>
</tr>
</table>

<p class="caution"><strong>Caution:</strong> If your application uses Google Play's Copy 
  Protection feature, it cannot be installed to a device's SD card. However, if you use Google 
  Play's <a href="{@docRoot}google/play/licensing/index.html">Application Licensing</a> instead, 
  your application <em>can</em> be installed to internal or external storage, including SD cards.</p>

<p class="note"><strong>Note:</strong> By default, your application will be installed on the
  internal storage and cannot be installed on the external storage unless you define this attribute
  to be either "{@code auto}" or "{@code preferExternal}".</p>

<p>When an application is installed on the external storage:</p>
<ul>
  <li>The {@code .apk} file is saved
to the external storage, but any application data (such as databases) is still saved on
the internal device memory.</li>
  <li>The container in which the {@code .apk} file is saved is encrypted with a key that allows
the application to operate only on the device that installed it. (A user cannot
transfer the SD card to another device and use applications installed on the card.) Though,
multiple SD cards can be used with the same device.</li>
  <li>At the user's request, the application can be moved to the internal storage.</li>
</ul>

<p>The user may also request to move an application from the internal storage to the external
storage. However, the system will not allow the user to move the application to external storage if
this attribute is set to {@code internalOnly}, which is the default setting.</p>

<p>Read <a href="{@docRoot}guide/topics/data/install-location.html">App Install Location</a> for
more information about using this attribute (including how to maintain backward compatibility).</p>

<p>Introduced in: API Level 8.</p>


</dd>

</dl>
</dd><!-- end attributes -->

<!-- ##api level indication## -->
<dt>introduced in:</dt>
<dd>API Level 1 for all attributes, unless noted otherwise in the attribute description.</dd>

<p>
<dt>see also:</dt>
<dd>
<code><a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code></dd>

</dl>