docs: Added page on DAC describing ARC manifest file considerations.
Bug: 30114799 Change-Id: I9b8d67d09e4627f22a9fc58421dd52aa3650c235
This commit is contained in:
@@ -6,50 +6,53 @@ page.title=App Manifest
|
||||
|
||||
<h2>In this document</h2>
|
||||
<ol>
|
||||
<li><a href="#filestruct">Structure of the Manifest File</a></li>
|
||||
<li><a href="#filec">File Conventions</a>
|
||||
<li><a href="#filef">File Features</a>
|
||||
<ol>
|
||||
<li><a href="#ifs">Intent Filters</a></li>
|
||||
<li><a href="#iconlabel">Icons and Labels</a></li>
|
||||
<li><a href="#perms">Permissions</a></li>
|
||||
<li><a href="#libs">Libraries</a></li>
|
||||
</ol></li>
|
||||
<li><a href="#filestruct">Manifest file structure</a></li>
|
||||
<li><a href="#filec">File conventions</a>
|
||||
<li><a href="#filef">File features</a>
|
||||
<ol>
|
||||
<li><a href="#ifs">Intent filters</a></li>
|
||||
<li><a href="#iconlabel">Icons and labels</a></li>
|
||||
<li><a href="#perms">Permissions</a></li>
|
||||
<li><a href="#libs">Libraries</a></li>
|
||||
</ol></li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Every application must have an AndroidManifest.xml file (with precisely that
|
||||
Every application must have an {@code AndroidManifest.xml} file (with precisely that
|
||||
name) in its root directory. <span itemprop="description">The manifest file
|
||||
presents essential information about your app to the Android system,
|
||||
information the system must have before it can run any of the app's
|
||||
code.</span> Among other things, the manifest does the following:
|
||||
provides essential information about your app to the Android system, which
|
||||
the system must have before it can run any of the app's
|
||||
code.</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Among other things, the manifest file does the following:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>It names the Java package for the application.
|
||||
The package name serves as a unique identifier for the application.</li>
|
||||
|
||||
<li>It describes the components of the application — the activities,
|
||||
services, broadcast receivers, and content providers that the application is
|
||||
composed of. It names the classes that implement each of the components and
|
||||
publishes their capabilities (for example, which {@link android.content.Intent
|
||||
Intent} messages they can handle). These declarations let the Android system
|
||||
know what the components are and under what conditions they can be launched.</li>
|
||||
<li>It describes the components of the application, which include the activities,
|
||||
services, broadcast receivers, and content providers that compose the application.
|
||||
It also names the classes that implement each of the components and
|
||||
publishes their capabilities, such as the {@link android.content.Intent
|
||||
Intent} messages that they can handle. These declarations inform the Android system
|
||||
of the components and the conditions in which they can be launched.</li>
|
||||
|
||||
<li>It determines which processes will host application components.</li>
|
||||
<li>It determines the processes that host the application components.</li>
|
||||
|
||||
<li>It declares which permissions the application must have in order to
|
||||
access protected parts of the API and interact with other applications.</li>
|
||||
|
||||
<li>It also declares the permissions that others are required to have in
|
||||
<li>It declares the permissions that the application must have in order to
|
||||
access protected parts of the API and interact with other applications. It also declares
|
||||
the permissions that others are required to have in
|
||||
order to interact with the application's components.</li>
|
||||
|
||||
<li>It lists the {@link android.app.Instrumentation} classes that provide
|
||||
profiling and other information as the application is running. These declarations
|
||||
profiling and other information as the application runs. These declarations
|
||||
are present in the manifest only while the application is being developed and
|
||||
tested; they're removed before the application is published.</li>
|
||||
are removed before the application is published.</li>
|
||||
|
||||
<li>It declares the minimum level of the Android API that the application
|
||||
requires.</li>
|
||||
@@ -57,16 +60,27 @@ requires.</li>
|
||||
<li>It lists the libraries that the application must be linked against.</li>
|
||||
</ul>
|
||||
|
||||
<p class="note"><strong>Note</strong>: As you prepare your Android app to run on Chromebooks,
|
||||
there are some important hardware and software feature limitations that you should consider. See
|
||||
the <a href="{@docRoot}topic/arc/manifest.html">
|
||||
App Manifest Compatibility for Chromebooks</a> document for more information.
|
||||
</p>
|
||||
|
||||
<h2 id="filestruct">Structure of the Manifest File</h2>
|
||||
<h2 id="filestruct">Manifest file structure</h2>
|
||||
|
||||
<p>
|
||||
The diagram below shows the general structure of the manifest file and
|
||||
every element that it can contain. Each element, along with all of its
|
||||
attributes, is documented in full in a separate file. To view detailed
|
||||
information about any element, click on the element name in the diagram,
|
||||
in the alphabetical list of elements that follows the diagram, or on any
|
||||
other mention of the element name.
|
||||
The code snippet below shows the general structure of the manifest file and
|
||||
every element that it can contain. Each element, along with all of its
|
||||
attributes, is fully documented in a separate file.
|
||||
</p>
|
||||
|
||||
<p class="note"><strong>Tip</strong>: To view detailed
|
||||
information about any of the elements that are mentioned within the text of this document,
|
||||
simply click the element name.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Here is an example of the manifest file:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
@@ -126,45 +140,45 @@ other mention of the element name.
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
All the elements that can appear in the manifest file are listed below
|
||||
in alphabetical order. These are the only legal elements; you cannot
|
||||
The following list contains all of the elements that can appear in the manifest file,
|
||||
in alphabetical order:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/action-element.html"><action></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/category-element.html"><category></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/data-element.html"><data></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/instrumentation-element.html"><instrumentation></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code> <!-- ##api level 4## --></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code> <!-- ##api level 3## --></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a></code> <!-- ##api level 4## --></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code></li>
|
||||
<li><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a></code></li>
|
||||
</ul>
|
||||
|
||||
<p class="note"><strong>Note</strong>: These are the only legal elements – you cannot
|
||||
add your own elements or attributes.
|
||||
</p>
|
||||
|
||||
<p style="margin-left: 2em">
|
||||
<code><a href="{@docRoot}guide/topics/manifest/action-element.html"><action></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/category-element.html"><category></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/data-element.html"><data></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/instrumentation-element.html"><instrumentation></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens></a></code> <!-- ##api level 4## -->
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration></a></code> <!-- ##api level 3## -->
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature></a></code> <!-- ##api level 4## -->
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
<br/><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a></code>
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 id="filec">File Conventions</h2>
|
||||
<h2 id="filec">File conventions</h2>
|
||||
|
||||
<p>
|
||||
Some conventions and rules apply generally to all elements and attributes
|
||||
in the manifest:
|
||||
This section describes the conventions and rules that apply generally to all of the elements and
|
||||
attributes in the manifest file.
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
@@ -172,29 +186,28 @@ in the manifest:
|
||||
<dd>Only the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> and
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
elements are required, they each must be present and can occur only once.
|
||||
Most of the others can occur many times or not at all — although at
|
||||
least some of them must be present for the manifest to accomplish anything
|
||||
meaningful.
|
||||
elements are required. They each must be present and can occur only once.
|
||||
Most of the other elements can occur many times or not at all. However, at
|
||||
least some of them must be present before the manifest file becomes useful.
|
||||
|
||||
<p>
|
||||
If an element contains anything at all, it contains other elements.
|
||||
All values are set through attributes, not as character data within an element.
|
||||
All of the values are set through attributes, not as character data within an element.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Elements at the same level are generally not ordered. For example,
|
||||
Elements at the same level are generally not ordered. For example, the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>,
|
||||
<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>, and
|
||||
<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>
|
||||
elements can be intermixed in any sequence. There are two key exceptions to this
|
||||
rule, however:
|
||||
rule:
|
||||
<ul>
|
||||
<li>
|
||||
An <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code>
|
||||
element must follow the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
it is an alias for.
|
||||
for which it is an alias.
|
||||
</li>
|
||||
<li>
|
||||
The <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
@@ -207,15 +220,15 @@ rule, however:
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Attributes</b></dt>
|
||||
<dd>In a formal sense, all attributes are optional. However, there are some
|
||||
that must be specified for an element to accomplish its purpose. Use the
|
||||
documentation as a guide. For truly optional attributes, it mentions a default
|
||||
<dd>In a formal sense, all attributes are optional. However, there are some attributes
|
||||
that must be specified so that an element can accomplish its purpose. Use the
|
||||
documentation as a guide. For truly optional attributes, it mentions a default
|
||||
value or states what happens in the absence of a specification.
|
||||
|
||||
<p>Except for some attributes of the root
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||
element, all attribute names begin with an {@code android:} prefix —
|
||||
for example, {@code android:alwaysRetainTaskState}. Because the prefix is
|
||||
element, all attribute names begin with an {@code android:} prefix.
|
||||
For example, {@code android:alwaysRetainTaskState}. Because the prefix is
|
||||
universal, the documentation generally omits it when referring to attributes
|
||||
by name.</p></dd>
|
||||
|
||||
@@ -223,7 +236,7 @@ by name.</p></dd>
|
||||
<dd>Many elements correspond to Java objects, including elements for the
|
||||
application itself (the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
element) and its principal components — activities
|
||||
element) and its principal components: activities
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>),
|
||||
services
|
||||
(<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>),
|
||||
@@ -238,7 +251,7 @@ If you define a subclass, as you almost always would for the component classes
|
||||
{@link android.content.BroadcastReceiver}, and {@link android.content.ContentProvider}),
|
||||
the subclass is declared through a {@code name} attribute. The name must include
|
||||
the full package designation.
|
||||
For example, an {@link android.app.Service} subclass might be declared as follows:
|
||||
For example, a {@link android.app.Service} subclass might be declared as follows:
|
||||
</p>
|
||||
|
||||
<pre><manifest . . . >
|
||||
@@ -251,12 +264,12 @@ For example, an {@link android.app.Service} subclass might be declared as follow
|
||||
</manifest></pre>
|
||||
|
||||
<p>
|
||||
However, as a shorthand, if the first character of the string is a period, the
|
||||
string is appended to the application's package name (as specified by the
|
||||
However, if the first character of the string is a period, the
|
||||
application's package name (as specified by the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code>
|
||||
element's
|
||||
<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code>
|
||||
attribute). The following assignment is the same as the one above:
|
||||
attribute) is appended to the string. The following assignment is the same as that shown above:
|
||||
</p>
|
||||
|
||||
<pre><manifest package="com.example.project" . . . >
|
||||
@@ -269,13 +282,13 @@ attribute). The following assignment is the same as the one above:
|
||||
</manifest></pre>
|
||||
|
||||
<p>
|
||||
When starting a component, Android creates an instance of the named subclass.
|
||||
When starting a component, the Android system creates an instance of the named subclass.
|
||||
If a subclass isn't specified, it creates an instance of the base class.
|
||||
</p></dd>
|
||||
|
||||
<dt><b>Multiple values</b></dt>
|
||||
<dd>If more than one value can be specified, the element is almost always
|
||||
repeated, rather than listing multiple values within a single element.
|
||||
repeated, rather than multiple values being listed within a single element.
|
||||
For example, an intent filter can list several actions:
|
||||
|
||||
<pre><intent-filter . . . >
|
||||
@@ -286,108 +299,105 @@ For example, an intent filter can list several actions:
|
||||
</intent-filter></pre></dd>
|
||||
|
||||
<dt><b>Resource values</b></dt>
|
||||
<dd>Some attributes have values that can be displayed to users — for
|
||||
example, a label and an icon for an activity. The values of these attributes
|
||||
should be localized and therefore set from a resource or theme. Resource
|
||||
values are expressed in the following format,</p>
|
||||
<dd>Some attributes have values that can be displayed to users, such as
|
||||
a label and an icon for an activity. The values of these attributes
|
||||
should be localized and set from a resource or theme. Resource
|
||||
values are expressed in the following format:</p>
|
||||
|
||||
<p style="margin-left: 2em">{@code @[<i>package</i>:]<i>type</i>/<i>name</i>}</p>
|
||||
|
||||
<p>
|
||||
where the <i>package</i> name can be omitted if the resource is in the same package
|
||||
as the application, <i>type</i> is a type of resource — such as "string" or
|
||||
"drawable" — and <i>name</i> is the name that identifies the specific resource.
|
||||
For example:
|
||||
You can ommit the <i>package</i> name if the resource is in the same package
|
||||
as the application. The <i>type</i> is a type of resource, such as <em>string</em> or
|
||||
<em>drawable</em>, and the <i>name</i> is the name that identifies the specific resource.
|
||||
Here is an example:
|
||||
</p>
|
||||
|
||||
<pre><activity android:icon="@drawable/smallPic" . . . ></pre>
|
||||
|
||||
<p>
|
||||
Values from a theme are expressed in a similar manner, but with an initial '{@code ?}'
|
||||
rather than '{@code @}':
|
||||
The values from a theme are expressed similarly, but with an initial {@code ?}
|
||||
instead of {@code @}:
|
||||
</p>
|
||||
|
||||
<p style="margin-left: 2em">{@code ?[<i>package</i>:]<i>type</i>/<i>name</i>}
|
||||
</p></dd>
|
||||
|
||||
<dt><b>String values</b></dt>
|
||||
<dd>Where an attribute value is a string, double backslashes ('{@code \\}')
|
||||
must be used to escape characters — for example, '{@code \\n}' for
|
||||
a newline or '{@code \\uxxxx}' for a Unicode character.</dd>
|
||||
<dd>Where an attribute value is a string, you must use double backslashes ({@code \\})
|
||||
to escape characters, such as {@code \\n} for
|
||||
a newline or {@code \\uxxxx} for a Unicode character.</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h2 id="filef">File Features</h2>
|
||||
<h2 id="filef">File features</h2>
|
||||
|
||||
<p>
|
||||
The following sections describe how some Android features are reflected
|
||||
The following sections describe the way that some Android features are reflected
|
||||
in the manifest file.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="ifs">Intent Filters</h3>
|
||||
<h3 id="ifs">Intent filters</h3>
|
||||
|
||||
<p>
|
||||
The core components of an application (its activities, services, and broadcast
|
||||
receivers) are activated by <i>intents</i>. An intent is a
|
||||
The core components of an application, such as its activities, services, and broadcast
|
||||
receivers, are activated by <i>intents</i>. An intent is a
|
||||
bundle of information (an {@link android.content.Intent} object) describing a
|
||||
desired action — including the data to be acted upon, the category of
|
||||
desired action, including the data to be acted upon, the category of
|
||||
component that should perform the action, and other pertinent instructions.
|
||||
Android locates an appropriate component to respond to the intent, launches
|
||||
The Android system locates an appropriate component that can respond to the intent, launches
|
||||
a new instance of the component if one is needed, and passes it the
|
||||
Intent object.
|
||||
{@link android.content.Intent} object.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Components advertise their capabilities — the kinds of intents they can
|
||||
respond to — through <i>intent filters</i>. Since the Android system
|
||||
must learn which intents a component can handle before it launches the component,
|
||||
The components advertise the types of intents that they can
|
||||
respond to through <i>intent filters</i>. Since the Android system
|
||||
must learn the intents that a component can handle before it launches the component,
|
||||
intent filters are specified in the manifest as
|
||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||
elements. A component may have any number of filters, each one describing
|
||||
elements. A component can have any number of filters, each one describing
|
||||
a different capability.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
An intent that explicitly names a target component will activate that component;
|
||||
the filter doesn't play a role. But an intent that doesn't specify a target by
|
||||
An intent that explicitly names a target component activates that component, so
|
||||
the filter doesn't play a role. An intent that doesn't specify a target by
|
||||
name can activate a component only if it can pass through one of the component's
|
||||
filters.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For information on how Intent objects are tested against intent filters,
|
||||
see a separate document,
|
||||
<a href="{@docRoot}guide/components/intents-filters.html">Intents
|
||||
and Intent Filters</a>.
|
||||
For information about how {@link android.content.Intent} objects are tested against intent filters,
|
||||
see the <a href="{@docRoot}guide/components/intents-filters.html">Intents
|
||||
and Intent Filters</a> document.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="iconlabel">Icons and Labels</h3>
|
||||
<h3 id="iconlabel">Icons and labels</h3>
|
||||
|
||||
<p>
|
||||
A number of elements have {@code icon} and {@code label} attributes for a
|
||||
small icon and a text label that can be displayed to users. Some also have a
|
||||
{@code description} attribute for longer explanatory text that can also be
|
||||
shown on-screen. For example, the
|
||||
small icon and a text label that can be displayed to users. Some also have a
|
||||
{@code description} attribute for longer, explanatory text that can also be
|
||||
shown on-screen. For example, the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
element has all three of these attributes, so that when the user is asked whether
|
||||
element has all three of these attributes so that when the user is asked whether
|
||||
to grant the permission to an application that has requested it, an icon representing
|
||||
the permission, the name of the permission, and a description of what it
|
||||
entails can all be presented to the user.
|
||||
entails are all presented to the user.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
In every case, the icon and label set in a containing element become the default
|
||||
In every case, the icon and label that are set in a containing element become the default
|
||||
{@code icon} and {@code label} settings for all of the container's subelements.
|
||||
Thus, the icon and label set in the
|
||||
Thus, the icon and label that are set in the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
element are the default icon and label for each of the application's components.
|
||||
Similarly, the icon and label set for a component — for example, an
|
||||
Similarly, the icon and label that are set for a component, such as an
|
||||
<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>
|
||||
element — are the default settings for each of the component's
|
||||
element, are the default settings for each of the component's
|
||||
<code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code>
|
||||
elements. If an
|
||||
elements. If an
|
||||
<code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>
|
||||
element sets a label, but an activity and its intent filter do not,
|
||||
the application label is treated as the label for both the activity and
|
||||
@@ -395,62 +405,62 @@ the intent filter.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The icon and label set for an intent filter are used to represent a component
|
||||
whenever the component is presented to the user as fulfilling the function
|
||||
advertised by the filter. For example, a filter with
|
||||
"{@code android.intent.action.MAIN}" and
|
||||
"{@code android.intent.category.LAUNCHER}" settings advertises an activity
|
||||
as one that initiates an application — that is, as
|
||||
one that should be displayed in the application launcher. The icon and label
|
||||
set in the filter are therefore the ones displayed in the launcher.
|
||||
The icon and label that are set for an intent filter represent a component
|
||||
whenever the component is presented to the user and fulfills the function
|
||||
that is advertised by the filter. For example, a filter with
|
||||
{@code android.intent.action.MAIN} and
|
||||
{@code android.intent.category.LAUNCHER} settings advertises an activity
|
||||
as one that initiates an application. That is, as
|
||||
one that should be displayed in the application launcher. The icon and label
|
||||
that are set in the filter are displayed in the launcher.
|
||||
</p>
|
||||
|
||||
|
||||
<h3 id="perms">Permissions</h3>
|
||||
|
||||
<p>
|
||||
A <i>permission</i> is a restriction limiting access to a part of the code
|
||||
or to data on the device. The limitation is imposed to protect critical
|
||||
A <i>permission</i> is a restriction that limits access to a part of the code
|
||||
or to data on the device. The limitation is imposed to protect critical
|
||||
data and code that could be misused to distort or damage the user experience.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Each permission is identified by a unique label. Often the label indicates
|
||||
the action that's restricted. For example, here are some permissions defined
|
||||
Each permission is identified by a unique label. Often the label indicates
|
||||
the action that's restricted. Here are some permissions that are defined
|
||||
by Android:
|
||||
</p>
|
||||
|
||||
<p style="margin-left: 2em">{@code android.permission.CALL_EMERGENCY_NUMBERS}
|
||||
<br/>{@code android.permission.READ_OWNER_DATA}
|
||||
<br/>{@code android.permission.SET_WALLPAPER}
|
||||
<br/>{@code android.permission.DEVICE_POWER}</p>
|
||||
<ul>
|
||||
<li>{@code android.permission.CALL_EMERGENCY_NUMBERS}</li>
|
||||
<li>{@code android.permission.READ_OWNER_DATA}</li>
|
||||
<li>{@code android.permission.SET_WALLPAPER}</li>
|
||||
<li>{@code android.permission.DEVICE_POWER}</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
A feature can be protected by at most one permission.
|
||||
A feature can be protected by only one permission.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If an application needs access to a feature protected by a permission,
|
||||
it must declare that it requires that permission with a
|
||||
If an application needs access to a feature that is protected by a permission,
|
||||
it must declare that it requires the permission with a
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
element in the manifest. Then, when the application is installed on
|
||||
the device, the installer determines whether or not to grant the requested
|
||||
element in the manifest. When the application is installed on
|
||||
the device, the installer determines whether to grant the requested
|
||||
permission by checking the authorities that signed the application's
|
||||
certificates and, in some cases, asking the user.
|
||||
If the permission is granted, the application is able to use the protected
|
||||
features. If not, its attempts to access those features will simply fail
|
||||
features. If not, its attempts to access those features fail
|
||||
without any notification to the user.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
An application can also protect its own components (activities, services,
|
||||
broadcast receivers, and content providers) with permissions. It can employ
|
||||
any of the permissions defined by Android (listed in
|
||||
{@link android.Manifest.permission android.Manifest.permission}) or declared
|
||||
by other applications. Or it can define its own. A new permission is declared
|
||||
An application can also protect its own components with permissions. It can employ
|
||||
any of the permissions that are defined by Android, as listed in
|
||||
{@link android.Manifest.permission android.Manifest.permission}, or declared
|
||||
by other applications. It can also define its own. A new permission is declared
|
||||
with the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
element. For example, an activity could be protected as follows:
|
||||
element. For example, an activity could be protected as follows:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
@@ -474,34 +484,34 @@ declared with the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
element, its use is also requested with the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>
|
||||
element. Its use must be requested in order for other components of the
|
||||
element. You must request its use in order for other components of the
|
||||
application to launch the protected activity, even though the protection
|
||||
is imposed by the application itself.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If, in the same example, the {@code permission} attribute was set to a
|
||||
permission declared elsewhere
|
||||
(such as {@code android.permission.CALL_EMERGENCY_NUMBERS}, it would not
|
||||
have been necessary to declare it again with a
|
||||
If, in the same example shown above, the {@code permission} attribute was set to a
|
||||
permission that is declared elsewhere,
|
||||
such as {@code android.permission.CALL_EMERGENCY_NUMBERS}, it would not
|
||||
be necessary to declare it again with a
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
element. However, it would still have been necessary to request its use with
|
||||
element. However, it would still be necessary to request its use with
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code>
|
||||
element declares a namespace for a group of permissions that will be defined in
|
||||
code. And
|
||||
element declares a namespace for a group of permissions that are defined in
|
||||
code, and the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
||||
defines a label for a set of permissions (both those declared in the manifest with
|
||||
defines a label for a set of permissions, both those declared in the manifest with
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
elements and those declared elsewhere). It affects only how the permissions are
|
||||
grouped when presented to the user. The
|
||||
elements and those declared elsewhere. This affects only how the permissions are
|
||||
grouped when presented to the user. The
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code>
|
||||
element does not specify which permissions belong to the group;
|
||||
it just gives the group a name. A permission is placed in the group
|
||||
element does not specify the permissions that belong to the group, but
|
||||
it gives the group a name. You can place a permission in the group
|
||||
by assigning the group name to the
|
||||
<code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code>
|
||||
element's
|
||||
@@ -515,15 +525,14 @@ attribute.
|
||||
<p>
|
||||
Every application is linked against the default Android library, which
|
||||
includes the basic packages for building applications (with common classes
|
||||
such as Activity, Service, Intent, View, Button, Application, ContentProvider,
|
||||
and so on).
|
||||
such as Activity, Service, Intent, View, Button, Application, and ContentProvider).
|
||||
</p>
|
||||
|
||||
<p>
|
||||
However, some packages reside in their own libraries. If your application
|
||||
uses code from any of these packages, it must explicitly asked to be linked
|
||||
against them. The manifest must contain a separate
|
||||
However, some packages reside in their own libraries. If your application
|
||||
uses code from any of these packages, it must explicitly ask to be linked
|
||||
against them. The manifest must contain a separate
|
||||
<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code>
|
||||
element to name each of the libraries. (The library name can be found in the
|
||||
documentation for the package.)
|
||||
element to name each of the libraries. You can find the library name in the
|
||||
documentation for the package.
|
||||
</p>
|
||||
|
||||
341
docs/html/topic/arc/manifest.jd
Normal file
341
docs/html/topic/arc/manifest.jd
Normal file
@@ -0,0 +1,341 @@
|
||||
page.title=App Manifest Compatibility for Chromebooks
|
||||
@jd:body
|
||||
|
||||
<div id="qv-wrapper">
|
||||
<div id="qv">
|
||||
<h2>On this page</h2>
|
||||
|
||||
<ol>
|
||||
<li><a href="#incompat-entries">Incompatible Manifest Entries</a></li>
|
||||
<li>
|
||||
<a href="#implied-features">Permissions That Imply Feature
|
||||
Requirements</a>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
As you prepare your Android app to run on Chromebooks, you should consider the
|
||||
device features that your app uses. Chromebooks don't support all of the
|
||||
hardware and software features that are available on other devices running
|
||||
Android. If your app requires specific features that aren't supported on
|
||||
Chromebooks, it won't be available for installation on Chromebooks.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
You declare your app's requirements for hardware features and certain software
|
||||
features in the <a
|
||||
href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a>.
|
||||
This document describes the app manifest feature declarations that aren't
|
||||
compatible with Chromebooks.
|
||||
</p>
|
||||
|
||||
<h2 id="incompat-entries">Incompatible Manifest Entries</h2>
|
||||
|
||||
<p>
|
||||
The manifest entries listed in this section aren't currently compatible with
|
||||
Chromebooks. If your app uses any of these entries, consider removing them or
|
||||
including the <code>required="false"</code> attribute value with them so that
|
||||
your app can be installed on Chromebooks. For more information about declaring
|
||||
feature use without requiring that the feature be available on the device, see
|
||||
the guide for the <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html#market-feature-filtering">
|
||||
<code><uses-feature></code></a> manifest element.
|
||||
</p>
|
||||
|
||||
<p class="note"><strong>Note</strong>: See the <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html#features-reference">
|
||||
Features Reference</a> for a complete list of app manifest features and
|
||||
descriptions.
|
||||
</p>
|
||||
|
||||
<h3 id="incompat-hardware-features">Hardware features</h3>
|
||||
|
||||
<p>
|
||||
Support for hardware features varies on Chromebooks. Some features aren't
|
||||
supported on any Chromebooks while others are supported on some Chromebooks.
|
||||
</p>
|
||||
|
||||
<h4>Unsupported hardware features</h4>
|
||||
|
||||
<p>
|
||||
The following list includes the hardware features that aren't currently
|
||||
supported on Chromebooks:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>android.hardware.camera</code> – Back-facing camera
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.autofocus</code> – Camera that uses
|
||||
autofocus
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.capability.manual_post_processing</code>
|
||||
– Camera that uses the <code>MANUAL_POST_PROCESSING</code> feature,
|
||||
including functionality for overriding auto white balance
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.capability.manual_sensor</code> – Camera
|
||||
that uses the <code>MANUAL_SENSOR</code> feature, including auto-exposure
|
||||
locking support
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.capability.raw</code> – Camera that uses
|
||||
the <code>RAW</code> feature, including the ability to save DNG (raw) files
|
||||
and provide DNG-related metadata
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.flash</code> – Camera that uses flash
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.camera.level.full</code> – Camera that uses
|
||||
<code>FULL</code>-level image-capturing support
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.consumerir</code> – Infrared (IR)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.location.gps</code> – GPS
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.nfc</code> – Near-Field Communication (NFC)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.nfc.hce</code> – NFC card emulation
|
||||
(<em>deprecated</em>)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.barometer</code> – Barometer (air
|
||||
pressure)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.telephony</code> – Telephony, including radio
|
||||
with data communication services
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.telephony.cdma</code> – Telephony Code Division
|
||||
Multiple Access (CDMA) network support
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.telephony.gsm</code> – Telephony Global System
|
||||
for Mobile Communications (GSM) network support
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.type.automotive</code> – Android Auto user
|
||||
interface
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.type.television</code> – Television
|
||||
(<em>deprecated</em>)
|
||||
<li>
|
||||
<code>android.hardware.usb.accessory</code> – USB accessory mode
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.usb.host</code> – USB host mode
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Partially-supported hardware features</h4>
|
||||
|
||||
<p>
|
||||
The following list includes the hardware features that may be available on some
|
||||
Chromebooks:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>android.hardware.sensor.accelerometer</code> – Accelerometer
|
||||
(device orientation)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.compass</code> – Compass
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.gyroscope</code> – Gyroscope (device
|
||||
rotation and twist)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.light</code> – Light
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.proximity</code> – Proximity (to user)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.stepcounter</code> – Step counter
|
||||
</li>
|
||||
<li>
|
||||
<code>android.hardware.sensor.stepdetector</code> – Step detector
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>Touchscreen hardware support</h4>
|
||||
|
||||
<p>
|
||||
As of Chrome OS version M53, all Android apps that don't explicitly require the
|
||||
<a href="{@docRoot}guide/topics/manifest/uses-feature-element.html#touchscreen-hw-features">
|
||||
<code>android.hardware.touchscreen</code></a> feature will also work on Chrome
|
||||
OS devices that support the <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html#touchscreen-hw-features">
|
||||
<code>android.hardware.faketouch</code></a> feature. Devices that have fake
|
||||
touch interfaces provide a user input system that emulates basic touch events.
|
||||
For example, the user could interact with a mouse or remote control to move an
|
||||
on-screen cursor, scroll through a list, and drag elements from one part of the
|
||||
screen to another.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you don't want your app to be installed on devices that have fake touch
|
||||
interfaces but not touchscreens, you can complete one of the following actions:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>Exclude specific devices in the <a class="external-link"
|
||||
href="https://play.google.com/apps/publish">Google Play Developer Console.</a>
|
||||
</li>
|
||||
<li>Filter devices with no touchscreen hardware by explicitly declaring <a
|
||||
href="{@docRoot}guide/topics/manifest/uses-feature-element.html#touchscreen-hw-features">
|
||||
<code>android.hardware.touchscreen</code></a> as being required in order to
|
||||
install your app.</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="incompat-software-features">Software features</h3>
|
||||
|
||||
<p>
|
||||
The following list includes the software features that aren't currently
|
||||
supported on Chromebooks:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<code>android.software.app_widgets</code> – App Widgets on the Home
|
||||
screen
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.device_admin</code> – Device policy
|
||||
administration
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.home_screen</code> – Replaces device's Home
|
||||
screen
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.input_methods</code> – Custom input methods
|
||||
(instances of <a href="{@docRoot}reference/android/inputmethodservice/InputMethodService.html">
|
||||
<code>InputMethodService</code></a>)
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.leanback</code> – UI designed for large-screen
|
||||
viewing
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.live_wallpaper</code> – Animated wallpapers
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.live_tv</code> – Streaming live TV programs
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.managed_users</code> – Secondary users and
|
||||
managed profiles
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.midi</code> – Musical Instrument Digital
|
||||
Interface (MIDI) protocol, which supports connecting to musical instruments
|
||||
and providing sound
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.sip</code> – Session Initiation Protocol (SIP)
|
||||
service, which supports video conferencing and instant messaging
|
||||
</li>
|
||||
<li>
|
||||
<code>android.software.sip.voip</code> – Voice Over Internet Protocol
|
||||
(VoIP) service based on SIP, which supports two-way video conferencing
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="implied-features">Permissions That Imply Feature Requirements</h2>
|
||||
|
||||
<p>
|
||||
Some permissions that you request in your manifest files can create implied
|
||||
requests for hardware and software features. By requesting these permissions,
|
||||
you'll prevent your app from being installed on Chromebooks.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
For details about how to prevent permission requests from making your app
|
||||
unavailable on Chromebooks, see the <a href="#incompat-entries">Incompatible
|
||||
Manifest Entries</a> section of this page.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The following table shows the permissions that imply certain feature
|
||||
requirements which make an app incompatible with Chromebooks:
|
||||
</p>
|
||||
|
||||
<p class="table-caption">
|
||||
<strong>Table 1. </strong>Device permissions that imply hardware features which
|
||||
are incompatible with Chromebooks.
|
||||
</p>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th scope="col">Category</th>
|
||||
<th scope="col">This Permission...</th>
|
||||
<th scope="col">...Implies This Feature Requirement</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Camera</td>
|
||||
<td><code>CAMERA</code></td>
|
||||
<td>
|
||||
<code>android.hardware.camera</code> and<br>
|
||||
<code>android.hardware.camera.autofocus</code>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td rowspan="11">Telephony</td>
|
||||
<td><code>CALL_PHONE</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CALL_PRIVILEGED</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>MODIFY_PHONE_STATE</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PROCESS_OUTGOING_CALLS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>READ_SMSREAD_SMS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RECEIVE_SMS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RECEIVE_MMS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RECEIVE_WAP_PUSH</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>SEND_SMS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>WRITE_APN_SETTINGS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>WRITE_SMS</code></td>
|
||||
<td><code>android.hardware.telephony</code></td>
|
||||
</tr>
|
||||
</table>
|
||||
Reference in New Issue
Block a user