AndroidManifest.xml
AndroidManifest.xml - необходимый файл для каждого приложения Android. Он расположен в папке приложения и описывает глобальные значения для Вашего пакета, включая прикладные компоненты (действия, службы, и т.д), который пакет выставляет ‘внешнему миру’, какие данные каждое из Activity приложения может обработать, и как они могут быть начаты.
Важная вещь к упоминанию об этом файле - свой так называемый IntentFilters. Эти фильтры описывают где и когда Activity может быть начат. Когда Activity (или операционная система) хочет выполнить действие, такое, как открыть Web-страницу или открыть экран выбора, это создает объект Intent. Этот Intent может хранить информацию, описывающую, что Вы хотите сделать, какие данные необходимы, чтобы достигнуть этого и другую информацию. Андроид сравнивает информацию в объекте Intent с IntentFilters, выставленным каждым приложением, и находит Activity, соответствующие, чтобы обработать данные или действия, определенные вызывающей программой. Если есть больше чем одно приложение, способное к обработке этого Intent , пользователя спрашивают, каким приложением он предпочел бы обрабатывать это.
Помимо объявления Activity, Content Provider, Service и Intent Receivers Вашего приложения, Вы можете также определить разрешения в AndroidManifest.xml.
Основное
Очень простой AndroidManifest.xml выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="org.anddev.android.hello_android">
<application android:icon="@drawable/icon">
<activity android:name=".Hello_Android"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
- Почти каждый AndroidManifest.xml (так же как многие другой Андроид файлы XML) будет включать объявление пространства имен в его первый элемент. Это делает множество стандартных атрибутов Андроид доступным в файле, который будет использоваться, чтобы снабдить большинством данных для элементов в том файле.
- Почти каждый AndroidManifest.xml включает единственный <application> тэг, который непосредственно содержит несколько тэгов, описывающих Applications, IntentReceivers, и т.д., которые доступны в этом приложении.
- Если Вы хотите сделать Activity запускаемым непосредственно через пользователя, то Вы должны будете прописать ему поддержку действия MAIN и категории LAUNCHER. Результат как показано здесь:
Напрямую запускаемый Activity.
Дальше следует, детальный разбор структуры файла AndroidManifest с описыванием всех доступных <tags>, с примером для каждого. (Примеры не везде, но я точно ничего не потерял. И фраза “для каждого” в англ. версии (“for each”) тоже была. Не знаю, где они потеряли эти примеры. – прим. переводчика). Кто чей потомок, можно определить по отступу:
<manifest>
Это корневой узел каждого AndroisManifest.xml. Он содержит пакета атрибутов, который указывает на какой-то конкретный пакет в Activity (Получилось не совсем по-русски, но, вообщем, фишка в том, что в коде есть пакет Activity, а вот параметры этого пакета описаны в этом теге. - прим. переводчика). Другой путь к Activities будет базироваться относительно его значения.
<manifest xmlns:android="https://schemas.android.com/apk/res/android" package="org.anddev.android.smstretcher">
<uses-permission>
Описывает разрешения безопасности, которы нужно предоставить Вашему пакету. Количество не ограничено.
<uses-permission android:name = "android.permission. RECEIVE_SMS"/>
<permission>
Объявляет разрешение безопасности, которое может использоваться, чтобы указать, какие приложения могут обратиться к компонентам или особенностям в этом пакете. Количество не ограничено.
<instrumentation>
Объявляет код контрольно-измерительного компонента, который доступен, чтобы проверить функциональные возможности этого или другого пакета. См. Оснащение аппаратурой для большего количества подробностей. Количество не ограничено.
<application>
Корневой элемент, содержащий объявления компонентов на уровне , содержится в пакете. Этот элемент может также включать глобальные и/или заданные по умолчанию атрибуты для приложения, такие как метка, значок, тема, требование разрешения, и т.д. Количество – от нуля до единицы.
<application android:icon="@drawable/icon">
<activity>
Activity - первичная вещь для приложения, чтобы взаимодействовать с пользователем. Экраном, который пользователь видит, запуская приложение, является Activity, и большинство других экранов, которые они используют, будет осуществлено как отдельные действия, объявленные с дополнительными тэгами Activity.
<activity android:name=".Welcome" android:label="@string/app_name">
Примечание: у Каждой Activity должен быть <activity> тэг в manifest, выставлено ли это миру или предназначено для использования только в пределах собственного пакета. Если у Activity не будет никакого тэга соответствия в manifest, то Вы не сможете использовать ее.
<intent-filter>
Объявляет, какие Intent компонент поддерживает. В дополнение к различным видам значений, которые могут быть определены под этим элементом, атрибуты могут быть даны здесь, чтобы поставлять уникальную метку, значок, и другую информацию для описываемого действия.
<intent-filter>
<action>
Тип действия, который компонент поддерживает. Пример:
<action android:name="android.intent.action.MAIN" />
<category>
Тип категории, который компонент поддерживает. Пример:
<action android:name="android.intent.category.LAUNCHER" />
<data>
Тип MIME, URI схема или URI путь поддержки компонента.
Вы можете также связаться 1+ части метаданных с Вашим Activity:
<meta-data>
Добавляет новую часть метаданных к Activity, которую клиенты могут восстановить через ComponentInfo.metaData.
<receiver>
IntentReceiver позволяет приложению сообщать о замене данных или о действиях, которые происходят, даже если приложение не выполняется в настоящее время. Как и с тэгом activity, в этот тег Вы можете произвольно включить больше одного <intent-filter> или <meta-data>, так же, как с <activity>.
<receiver android:name=".SMSReceiver">
<service>
Service - компонент, который работает на заднем плане произвольное количество времени. В этот тег, как с тэгом activity, Вы можете произвольно включить один или более <intent-filter> или <meta-data>.
<provider>
ContentProvider - компонент, который управляет постоянными (persistent) данными и открывает к ним доступ другим приложениям. Вы можете также произвольно присоединить один или более <meta-data>, как и в activity. <intent-filter> тут нету.
Конечно, все <теги> должны быть или так </закрыты>, или так, <напрямую/>.