page.title=МанифеÑÑ‚ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ @jd:body <div id="qv-wrapper"> <div id="qv"> <h2>Содержание документа</h2> <ol> <li><a href="#filestruct">Структура файла манифеÑта</a></li> <li><a href="#filec">Ð¡Ð¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¾ компонентах файла</a> <li><a href="#filef">Отображение функций в файле</a> <ol> <li><a href="#ifs">Фильтры объектов Intent</a></li> <li><a href="#iconlabel">Значки и метки</a></li> <li><a href="#perms">РазрешениÑ</a></li> <li><a href="#libs">Библиотеки</a></li> </ol></li> </ol> </div> </div> <p> Ð’ корневой папке каждого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ находитьÑÑ Ñ„Ð°Ð¹Ð» AndroidManifest.xml (который именно так и называетÑÑ ). <span itemprop="description">Файл манифеÑта Ñодержит важную информацию о приложении, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ‚Ñ€ÐµÐ±ÑƒÐµÑ‚ÑÑ ÑиÑтеме Android. Только получив Ñту информацию, ÑиÑтема может выполнить какой-либо код приложениÑ.</span> Среди прочего файл манифеÑта выполнÑет Ñледующие дейÑтвиÑ: </p> <ul> <li>Он задает Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Java Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ. Ðто Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Ñлужит уникальным идентификатором приложениÑ.</li> <li>Он опиÑывает компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ — операции, Ñлужбы, приемники широковещательных Ñообщений и поÑтавщиков контента, из которых ÑоÑтоит приложение. Он Ñодержит имена клаÑÑов, которые реализуют каждый компонент, и публикует их возможноÑти (указывает, например, какие ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ {@link android.content.Intent Intent} они могут принимать). Ðа оÑновании Ñтих деклараций ÑиÑтема Android может определить, из каких компонентов ÑоÑтоит приложение и при каких уÑловиÑÑ… их можно запуÑкать.</li> <li>Он определÑет, в каких процеÑÑах будут размещатьÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ñ‹ приложениÑ.</li> <li>Он объÑвлÑет, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть выданы приложению, чтобы оно могло получить доÑтуп к защищенным чаÑÑ‚Ñм API-интерфейÑа и взаимодейÑтвовать Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ приложениÑми.</li> <li>Он также объÑвлÑет разрешениÑ, требуемые Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°Ð¼Ð¸ данного приложениÑ.</li> <li>Он Ñодержит ÑпиÑок клаÑÑов {@link android.app.Instrumentation}, которые при выполнении Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑтавлÑÑŽÑ‚ ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ профиле и прочую информацию. Ðти объÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ÑутÑтвуют в файле манифеÑта только во Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°Ð·Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ и отладки Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ удалÑÑŽÑ‚ÑÑ Ð¿ÐµÑ€ÐµÐ´ его публикацией.</li> <li>Он объÑвлÑет минимальный уровень API-интерфейÑа Android, который требуетÑÑ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÑŽ.</li> <li>Он Ñодержит ÑпиÑок библиотек, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ должно быть ÑвÑзано приложение.</li> </ul> <h2 id="filestruct">Структура файла манифеÑта</h2> <p> ÐŸÑ€Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ð°Ñ Ð´Ð°Ð»ÐµÐµ Ñхема позволÑет ознакомитьÑÑ Ñ Ð¾Ð±Ñ‰ÐµÐ¹ Ñтруктурой файла манифеÑта и вÑеми Ñлементами, которые могут в нем ÑодержатьÑÑ. Каждый Ñлемент вмеÑте Ñо вÑеми Ñвоими атрибутами, полноÑтью опиÑываетÑÑ Ð² отдельном файле. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ñмотра подробных Ñведений о любом Ñлементе, щелкните Ð¸Ð¼Ñ Ñлемента на Ñхеме, в алфавитном ÑпиÑке Ñлементов, приведенном поÑле Ñхемы, или в любом другом меÑте, где Ñтот Ñлемент упоминаетÑÑ. </p> <pre> <?xml version="1.0" encoding="utf-8"?> <a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a> <a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission /></a> <a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission /></a> <a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree /></a> <a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group /></a> <a href="{@docRoot}guide/topics/manifest/instrumentation-element.html"><instrumentation /></a> <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk /></a> <a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><uses-configuration /></a> <!-- ##api level 3## --> <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><uses-feature /></a> <!-- ##api level 4## --> <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><supports-screens /></a> <!-- ##api level 4## --> <a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html"><compatible-screens /></a> <!-- ##api level 9## --> <a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html"><supports-gl-texture /></a> <!-- ##api level 11## --> <a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a> <a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a> <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> <a href="{@docRoot}guide/topics/manifest/action-element.html"><action /></a> <a href="{@docRoot}guide/topics/manifest/category-element.html"><category /></a> <a href="{@docRoot}guide/topics/manifest/data-element.html"><data /></a> <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a> <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a> <a href="{@docRoot}guide/topics/manifest/activity-element.html"></activity></a> <a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a> <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a> <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a> <a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"></activity-alias></a> <a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a> <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a> <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data/></a> <a href="{@docRoot}guide/topics/manifest/service-element.html"></service></a> <a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a> <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a> . . . <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"></intent-filter></a> <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a> <a href="{@docRoot}guide/topics/manifest/receiver-element.html"></receiver></a> <a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a> <a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html"><grant-uri-permission /></a> <a href="{@docRoot}guide/topics/manifest/meta-data-element.html"><meta-data /></a> <a href="{@docRoot}guide/topics/manifest/path-permission-element.html"><path-permission /></a> <a href="{@docRoot}guide/topics/manifest/provider-element.html"></provider></a> <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library /></a> <a href="{@docRoot}guide/topics/manifest/application-element.html"></application></a> <a href="{@docRoot}guide/topics/manifest/manifest-element.html"></manifest></a> </pre> <p> Далее приведен ÑпиÑок вÑех Ñлементов, раÑположенных в алфавитном порÑдке, которые могут приÑутÑтвовать в файле манифеÑта. Там могут находитьÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñти Ñлементы, а никакие другие Ñлементы или атрибуты добавлÑÑ‚ÑŒ нельзÑ. </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">Ð¡Ð¾Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ Ð¾ компонентах файла</h2> <p> Ко вÑем Ñлементам и атрибутам из файла манифеÑта применÑетÑÑ Ñ€Ð°Ð´ Ñоглашений и правил: </p> <dl> <dt><b>Ðлементы</b></dt> <dd>ОбÑзательными ÑвлÑÑŽÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ñлементы<code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> и <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> . Оба они должны приÑутÑтвовать в файле манифеÑта, при Ñтом указать их можно только один раз. БольшинÑтво других Ñлементов можно указывать по неÑкольку раз или не указывать вовÑе — Ñ…Ð¾Ñ‚Ñ Ð¿Ð¾ крайней мере некоторые из них нужны, чтобы файл манифеÑта был Ñколько-нибудь информативным. <p> ЕÑли в Ñлементе и еÑÑ‚ÑŒ какое-то Ñодержимое, то Ñто другие Ñлементы. Ð’Ñе Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð·Ð°Ð´Ð°ÑŽÑ‚ÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибутов, а не как Ñимвольные данные в Ñлементе. </p> <p> Ðлементы, находÑщиеÑÑ Ð½Ð° одном уровне, обычно не упорÑдочиваютÑÑ. Ðапример, Ñлементы <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> и <code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code> можно указать в любой поÑледовательноÑти. (Ðлемент <code><a href="{@docRoot}guide/topics/manifest/activity-alias-element.html"><activity-alias></a></code> ÑвлÑетÑÑ Ð¸Ñключением из Ñтого правила. Он должен Ñледовать за Ñлементом <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, пÑевдонимом которого он ÑвлÑетÑÑ.) </p></dd> <dt><b>Ðтрибуты</b></dt> <dd>Формально вÑе атрибуты ÑвлÑÑŽÑ‚ÑÑ Ð½ÐµÐ¾Ð±Ñзательными. Однако некоторые их них указывать необходимо, чтобы файл мог выполнÑÑ‚ÑŒ Ñвое предназначение. Ð’ качеÑтве руководÑтва иÑпользуйте Ñту документацию. Ð’ отношении атрибутов, которые ÑвлÑÑŽÑ‚ÑÑ Ð¸ вправду необÑзательными, в ней указываетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, иÑпользуемое по умолчанию, или говоритÑÑ, что произойдет, еÑли такой атрибут не будет указан. <p>За иÑключением некоторых атрибутов корневого Ñлемента <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html"><manifest></a></code> , имена вÑех атрибутов должны начинатьÑÑ Ñ Ð¿Ñ€ÐµÑ„Ð¸ÐºÑа {@code android:} — например, {@code android:alwaysRetainTaskState}. ПоÑкольку Ñтот Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ ÑвлÑетÑÑ ÑƒÐ½Ð¸Ð²ÐµÑ€Ñальным, в документации при указании атрибутов по имени он обычно опуÑкаетÑÑ.</p></dd> <dt><b>ОбъÑвление имен клаÑÑов</b></dt> <dd>Многие Ñлементы ÑоответÑтвуют объектам Java, в том чиÑле Ñлементы Ð´Ð»Ñ Ñамого Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (Ñлемент <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> ) и оÑновных его компонентов — операций (<code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>), Ñлужб (<code><a href="{@docRoot}guide/topics/manifest/service-element.html"><service></a></code>), приемников широковещательных Ñообщений (<code><a href="{@docRoot}guide/topics/manifest/receiver-element.html"><receiver></a></code>) и поÑтавщиков контента (<code><a href="{@docRoot}guide/topics/manifest/provider-element.html"><provider></a></code>). <p> ЕÑли вы определÑете подклаÑÑ, а Ñто практичеÑки вÑегда делаетÑÑ Ð´Ð»Ñ ÐºÐ»Ð°ÑÑов компонентов ({@link android.app.Activity}, {@link android.app.Service}, {@link android.content.BroadcastReceiver} и {@link android.content.ContentProvider}), выполнÑетÑÑ Ñто Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ атрибута {@code name}. Ð’ ÑоÑтав имени должно входить полное обозначение пакета. Ðапример, подклаÑÑ {@link android.app.Service} можно объÑвить Ñледующим образом: </p> <pre><manifest . . . > <application . . . > <service android:name="com.example.project.SecretService" . . . > . . . </service> . . . </application> </manifest></pre> <p> Однако его можно укоротить. ЕÑли первым Ñимволом в Ñтроке указать точку, Ñта Ñтрока будет добавлÑÑ‚ÑŒÑÑ Ðº имени пакета Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (указанного атрибутом <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> Ñлемента <code><a href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a></code> ). Следующее назначение ÑвлÑетÑÑ Ñ‚Ð°ÐºÐ¸Ð¼ же, как приведенное выше: </p> <pre><manifest package="com.example.project" . . . > <application . . . > <service android:name=".SecretService" . . . > . . . </service> . . . </application> </manifest></pre> <p> При запуÑке компонента Android Ñоздает ÑкземплÑÑ€ подклаÑÑа, указанного по имени. ЕÑли подклаÑÑ Ð½Ðµ указан, ÑиÑтема Ñоздает ÑкземплÑÑ€ базового клаÑÑа. </p></dd> <dt><b>ÐеÑколько значений</b></dt> <dd>ЕÑли можно указать неÑколько значений, Ñлемент почти вÑегда приводитÑÑ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾. ДелаетÑÑ Ñто вмеÑто перечиÑÐ»ÐµÐ½Ð¸Ñ Ð½ÐµÑкольких значений в одном Ñлементе. Ðапример, в фильтре Intent может быть перечиÑлено неÑколько дейÑтвий: <pre><intent-filter . . . > <action android:name="android.intent.action.EDIT" /> <action android:name="android.intent.action.INSERT" /> <action android:name="android.intent.action.DELETE" /> . . . </intent-filter></pre></dd> <dt><b>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов</b></dt> <dd>Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… атрибутов могут отображатьÑÑ Ð½Ð° Ñкране — например, метка и значок операции. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñтих атрибутов Ñледует локализовать, поÑтому они должны задаватьÑÑ Ð² реÑурÑе или теме. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€ÐµÑурÑов выражаютÑÑ Ð² Ñледующем формате:</p> <p style="margin-left: 2em">{@code @[<i>пакет</i>:]<i>тип</i>:<i>имÑ</i>}</p> <p> где <i>Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð°</i> можно опуÑтить, еÑли реÑÑƒÑ€Ñ Ð½Ð°Ñ…Ð¾Ð´Ð¸Ñ‚ÑÑ Ð² одном пакете Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸ÐµÐ¼, <i>тип —</i> Ñто тип реÑурÑа, — например "string" или "drawable", — а <i>имÑ —</i> Ñто имÑ, определÑющее реÑурÑ. Ðапример: </p> <pre><activity android:icon="@drawable/smallPic" . . . ></pre> <p> Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· темы выражаютÑÑ Ñхожим образом, только в начале у них идет "{@code ?}", а не "{@code @}": </p> <p style="margin-left: 2em">{@code ?[<i>пакет</i>:]<i>тип</i>:<i>имÑ</i>} </p></dd> <dt><b>Строковые значениÑ</b></dt> <dd>Когда значением атрибута ÑвлÑетÑÑ Ñтрока, Ñледует иÑпользовать двойную обратную коÑую черту ("{@code \\}") Ð´Ð»Ñ Ð²Ñ‹Ð´ÐµÐ»ÐµÐ½Ð¸Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»Ñющей поÑледовательноÑти Ñимволов, — например "{@code \\n}" Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ Ñтроки или "{@code \\uxxxx}" Ð´Ð»Ñ Ñимвола Юникода.</dd> </dl> <h2 id="filef">Отображение функций в файле</h2> <p> Ð’ Ñледующих разделах опиÑано, как некоторые функции Android отображаютÑÑ Ð² файле манифеÑта. </p> <h3 id="ifs">Фильтры объектов Intent</h3> <p> Базовые компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (его операции, Ñлужбы и приемники широковещательных Ñообщений) активируютÑÑ <i>объектами Intent</i>. Intent — Ñто ÑовокупноÑÑ‚ÑŒ информации (объект {@link android.content.Intent}), опиÑывающей требуемое дейÑтвие, — в том чиÑле в ней указаны данные, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ Ñледует выполнить Ñто дейÑтвие, ÐºÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð¾Ð², которые должны выполнÑÑ‚ÑŒ Ñто дейÑтвие, и другие умеÑтные инÑтрукции. СиÑтема Android находит компонент, который отреагирует на объект Intent, запуÑкает новый ÑкземплÑÑ€ компонента, еÑли он требуетÑÑ, и передает ему объект Intent. </p> <p> Компоненты объÑвлÑÑŽÑ‚ Ñвои возможноÑти — виды объектов Intent, на которые они могут реагировать, — Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <i>фильтров Intent</i>. ПоÑкольку ÑиÑтема Android должна узнать, какие объекты Intent может обрабатывать тот или иной компонент, до того как она его запуÑтит, фильтры Intent указываютÑÑ Ð² файле манифеÑта как Ñлементы <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> . Компонент может иметь любое количеÑтво фильтров, каждый из которых опиÑывает отдельную возможноÑÑ‚ÑŒ компонента. </p> <p> Объект Intent, в котором целевой компонент Ñвно указан по имени, активирует Ñтот компонент, и фильтр при Ñтом не учитываетÑÑ. Ðо объект Intent, в котором Ð¸Ð¼Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ компонента не указано, может активировать компонент, только еÑли он может пройти через один из фильтров компонента. </p> <p> Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ том, каким образом объекты Intent проверÑÑŽÑ‚ÑÑ Ð¿Ð¾ фильтрам Intent, Ñм. в отдельном документе <a href="{@docRoot}guide/components/intents-filters.html">Объекты Intent и фильтры объектов Intent</a>. </p> <h3 id="iconlabel">Значки и метки</h3> <p> У Ñ€Ñда Ñлементов еÑÑ‚ÑŒ атрибуты {@code icon} и {@code label} Ð´Ð»Ñ Ð½ÐµÐ±Ð¾Ð»ÑŒÑˆÐ¾Ð³Ð¾ значка и текÑтовой метки, которые могут отображатьÑÑ Ð½Ð° Ñкране. У некоторых из них также еÑÑ‚ÑŒ атрибут {@code description} Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ длинного опиÑательного текÑта, который также может отображатьÑÑ Ð½Ð° Ñкране. Ðапример, Ñлемент <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> имеет вÑе три таких атрибута, поÑтому, когда пользователю задаетÑÑ Ð²Ð¾Ð¿Ñ€Ð¾Ñ, предоÑтавить ли разрешение запроÑившему его приложению, на Ñкране может отображатьÑÑ Ð·Ð½Ð°Ñ‡Ð¾Ðº, предÑтавлÑющий разрешение, Ð¸Ð¼Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¸ опиÑание того, что оно за Ñобой влечет. </p> <p> Ð’ любом Ñлучае значок и метка, заданные в Ñлементе-контейнере, ÑтановÑÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ {@code icon} и {@code label}, иÑпользуемыми по умолчанию Ð´Ð»Ñ Ð²Ñех вложенных в Ñтот контейнер дочерних Ñлементов. Так, значок и метка, заданные в Ñлементе <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code>, ÑвлÑÑŽÑ‚ÑÑ Ð·Ð½Ð°Ñ‡ÐºÐ¾Ð¼ и меткой, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ компонента приложениÑ. Точно так же, значок и метка, заданные Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, — например Ñлемента <code><a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a></code>, — ÑвлÑÑŽÑ‚ÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸, иÑпользуемыми по умолчанию Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html"><intent-filter></a></code> компонента. ЕÑли в Ñлементе <code><a href="{@docRoot}guide/topics/manifest/application-element.html"><application></a></code> задана метка, а в операции и ее фильтре Intent — нет, метка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÐµÑ‚ ÑчитатьÑÑ Ð¼ÐµÑ‚ÐºÐ¾Ð¹ и Ð´Ð»Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸, и Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° Intent. </p> <p> Значок и метка, заданные Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° Intent, иÑпользуютÑÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ‚Ð°, когда он предÑтавлÑетÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ, Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸, которую анонÑирует фильтр. Ðапример, фильтр Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð°Ð¼Ð¸ "{@code android.intent.action.MAIN}" и "{@code android.intent.category.LAUNCHER}" Ñообщает, что Ñта Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð¸Ñ€ÑƒÐµÑ‚ приложение, — то еÑÑ‚ÑŒ он обозначает ее как операцию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть отображена в ÑредÑтве запуÑка приложений. ОтÑюда Ñледует, что значок и метка, заданные в фильтре, отображаютÑÑ Ð² ÑредÑтве запуÑка. </p> <h3 id="perms">РазрешениÑ</h3> <p> Разрешение <i>предÑтавлÑет</i> Ñобой ограничение на доÑтуп к чаÑти кода или к данным, имеющимÑÑ Ð½Ð° уÑтройÑтве. Ðто ограничение накладываетÑÑ Ð´Ð»Ñ Ð·Ð°Ñ‰Ð¸Ñ‚Ñ‹ важных данных и кода, ненадлежащее иÑпользование которых может пагубно ÑказатьÑÑ Ð½Ð° работе приложениÑ. </p> <p> Каждое разрешение обозначаетÑÑ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ меткой. ЗачаÑтую метка обозначает дейÑтвие, выполнение которого ограничиваетÑÑ. Ðапример, вот некоторые разрешениÑ, определенные ÑиÑтемой 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> <p> Функцию можно защитить не более чем одним разрешением. </p> <p> ЕÑли приложению требуетÑÑ Ð´Ð¾Ñтуп к функции, защищенной разрешением, оно должно объÑвить, что ему необходимо Ñто разрешение, Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> в файле манифеÑта. Затем, когда приложение уÑтанавливаетÑÑ Ð½Ð° уÑтройÑтво, уÑтановщик определÑет, выдать ли запрошенное разрешение, проверÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ñ Ð¾Ñ€Ð³Ð°Ð½Ð¾Ð², подпиÑавших Ñертификаты приложениÑ, а также, в некоторых ÑлучаÑÑ…, ÑÐ¿Ñ€Ð°ÑˆÐ¸Ð²Ð°Ñ Ð¾Ð± Ñтом пользователÑ. ЕÑли разрешение предоÑтавлÑетÑÑ, приложение Ñможет иÑпользовать защищенные функции. Ð’ противном Ñлучае его попытки доÑтупа к Ñтим функциÑм будут безуÑпешными, причем пользователь не получит никакого ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом. </p> <p> Приложение также может защищать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ разрешений ÑобÑтвенные компоненты (операции, Ñлужбы, приемники широковещательных Ñообщений и поÑтавщиков контента). Оно может иÑпользовать любые разрешениÑ, определенные ÑиÑтемой Android (они приведены в объекте {@link android.Manifest.permission android.Manifest.permission}) или объÑвленные другими приложениÑми. Либо оно может определить Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑамоÑтоÑтельно. Ðовое разрешение объÑвлÑетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> . Ðапример, операцию можно защитить Ñледующим образом: </p> <pre> <manifest . . . > <permission android:name="com.example.project.DEBIT_ACCT" . . . /> <uses-permission android:name="com.example.project.DEBIT_ACCT" /> . . . <application . . .> <activity android:name="com.example.project.FreneticActivity" android:permission="com.example.project.DEBIT_ACCT" . . . > . . . </activity> </application> </manifest> </pre> <p> Обратите внимание, что в Ñтом примере разрешение {@code DEBIT_ACCT} не только объÑвлÑетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> , его иÑпользование также запрашиваетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code> . Чтобы другие компоненты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑƒÑкали защищенную операцию, ее иÑпользование должно быть запрошено, даже неÑÐ¼Ð¾Ñ‚Ñ€Ñ Ð½Ð° то, что защита наложена Ñамим приложением. </p> <p> Ð’ Ñтом же примере: еÑли атрибут {@code permission} был бы задан как разрешение, объÑвленное где-то еще (например, {@code android.permission.CALL_EMERGENCY_NUMBERS}), его бы не нужно было объÑвлÑÑ‚ÑŒ еще раз Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> . Однако вÑе равно нужно было бы запрашивать его иÑпользование Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><uses-permission></a></code>. </p> <p> Ðлемент <code><a href="{@docRoot}guide/topics/manifest/permission-tree-element.html"><permission-tree></a></code> объÑвлÑет проÑтранÑтво имен Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ разрешений, которые будут определены в коде. Ð Ñлемент <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> определÑет метку Ð´Ð»Ñ Ð½Ð°Ð±Ð¾Ñ€Ð° разрешений (как Ð´Ð»Ñ Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ð¹, объÑвленных в файле манифеÑта Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñлементов <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> , так и Ð´Ð»Ñ Ð¾Ð±ÑŠÑвленных где-то еще). Ðто влиÑет только на то, каким образом Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€ÑƒÑŽÑ‚ÑÑ, когда отображаютÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ. Ðлемент <code><a href="{@docRoot}guide/topics/manifest/permission-group-element.html"><permission-group></a></code> не указывает, какие Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¾Ñ‚Ð½Ð¾ÑÑÑ‚ÑÑ Ðº группе. Он проÑто дает группе имÑ. Чтобы включить разрешение в группу, атрибуту <code><a href="{@docRoot}guide/topics/manifest/permission-element.html#pgroup">permissionGroup</a></code> его Ñлемента <code><a href="{@docRoot}guide/topics/manifest/permission-element.html"><permission></a></code> необходимо приÑвоить Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹. </p> <h3 id="libs">Библиотеки</h3> <p> Каждое приложение ÑвÑзываетÑÑ Ñ Ð¸Ñпользуемой по умолчанию библиотекой Android, в которой имеютÑÑ Ð±Ð°Ð·Ð¾Ð²Ñ‹Ðµ пакеты Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ (Ñо Ñтандартными клаÑÑами, например Activity, Service, Intent, View, Button, Application, ContentProvider и так далее). </p> <p> Однако некоторые пакеты находÑÑ‚ÑÑ Ð² ÑобÑтвенных библиотеках. ЕÑли ваше приложение иÑпользует код из одного из таких пакетов, оно должно в Ñвном виде потребовать, чтобы его ÑвÑзали Ñ Ñтим пакетом. Файл манифеÑта должен Ñодержать отдельный Ñлемент <code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><uses-library></a></code> Ð´Ð»Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ каждой библиотеки. (Ð˜Ð¼Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¸ можно найти в документации по пакету.) </p>