Статьи

Android SDK: Манифест проекта

В этой серии руководств мы с нуля узнаем о разработке для Android и познакомимся с основными понятиями и практиками, которые необходимо знать, чтобы начать работать на платформе. До сих пор мы рассматривали различные части проекта Android, включая его ресурсы. В этом уроке мы рассмотрим файл манифеста проекта.


Манифест для проекта может быть простым или чрезвычайно сложным в зависимости от того, что делает приложение. Мы рассмотрим части манифеста, о которых вам нужно знать для всех приложений, и рассмотрим те дополнительные части, которые вам понадобятся для будущих проектов.

Файл манифеста может содержать много элементов и атрибутов. См. Руководство разработчика Android для ссылок на все из них. Манифест служит нескольким целям. Он определяет пакет приложения, предоставляет формальное описание компонентов приложения и объявляет разрешения, требуемые уровни API и связанные библиотеки. Мы будем проходить только самые важные элементы и атрибуты, которые вы можете перечислить в манифесте, поэтому имейте в виду, что возможно большее количество элементов и что могут быть дополнительные атрибуты, которые вы можете использовать с элементами, которые мы покрываем.


В Eclipse откройте файл манифеста вашего проекта. Вы всегда найдете манифест в корневом каталоге проекта. Как мы уже видели, вы можете просматривать манифест несколькими способами. В нижней части области редактора вы увидите вкладки для манифеста, приложения, разрешения, инструментария и кода XML. Быстро посмотрите через них сейчас. Мы будем использовать код XML, поэтому перейдите на вкладку «AndroidManifest.xml».

Вкладка «Манифест»

Элементы, которые появляются в файле манифеста, изначально были заполнены Eclipse при создании проекта. Их достаточно только для нужд очень простых приложений, в большинстве случаев вам нужно будет добавить их в манифест при создании проектов. Корневым элементом в файле является элемент manifest :

1
2
3
4
5
<manifest xmlns:android=»http://schemas.android.com/apk/res/android»
    package=»com.example.myfirstapp»
    android:versionCode=»1″
    android:versionName=»1.0″ >
</manifest>

Eclipse заполняет атрибуты элемента manifest именем пакета, которое вы выбрали при создании проекта. Код и имя версии изначально установлены на 1 и 1.0. Когда вы выпускаете свое приложение в магазин Play, а затем выпускаете последующие обновления, вам необходимо обновлять эти номера для каждого нового выпуска. Имя версии — это то, что видят пользователи, когда ваше приложение отображается в магазине Play, поэтому вы можете использовать любое соглашение о наименовании версий, которое вам нравится. Код версии не виден пользователям и должен быть большим числом для каждого выпуска, хотя его не нужно увеличивать на единицу каждый раз. Если вы попытаетесь загрузить новую версию приложения в Google Play, а код версии не будет выше текущей версии, Play не разрешит загрузку.


Сначала внутри элемента manifest вы должны увидеть элемент uses-sdk :

1
2
3
<uses-sdk
    android:minSdkVersion=»8″
    android:targetSdkVersion=»18″ />

Атрибуты элемента определяют минимально необходимый уровень API, а также целевой уровень, с которым вы планируете тестировать проект. Напомним, что мы выбираем эти значения при создании приложения. Вы можете изменить их в манифесте после создания проекта, если вам нужно. Например, вы можете обнаружить, что вам нужно использовать какой-то аспект платформы, который недоступен на выбранном вами уровне API. Если вы меняете версии SDK, Eclipse перестраивает ваш проект.

Пользователи с устройствами, уровень API которых ниже указанного минимума, не смогут загрузить и установить ваше приложение. Указание уровня API в качестве цели — это показатель того, что вы протестировали приложение в этой версии. Для надежности вы должны протестировать свои приложения на максимально возможном количестве уровней API.


Eclipse также вставил элемент application в ваш манифест. Элемент содержит дочерние элементы, которые мы рассмотрим далее. На данный момент давайте посмотрим на открывающий тег:

1
2
3
4
5
<application
    android:allowBackup=»true»
    android:icon=»@drawable/ic_launcher»
    android:label=»@string/app_name»
    android:theme=»@style/AppTheme» >

Основными атрибутами, на которые следует обратить внимание, являются значок, ярлык и элементы темы. Элемент может принимать много дополнительных атрибутов. Атрибут значка указывает на файл в чертежах приложения. Значок Android по умолчанию выбран, но вы можете добавить свои собственные файлы значков и ссылаться на них здесь. Значок метки ссылается на строку также в ресурсах приложения. Откройте XML-файл строк «res / values». Вы увидите строку, на которую ссылаются, в следующем порядке:

1
<string name=»app_name»>MyFirstApp</string>

Это должна быть читаемая строка, так как она отображается пользователю в различных местах, включая меню устройства, рядом со значком средства запуска. Как правило, вы хотите изменить строку, возможно, включить пробелы: «Мое первое приложение».

Вернувшись в файл манифеста, обратите внимание на атрибут темы элемента application . Опять же, это относится к ресурсу, вы найдете его в XML-файле стилей «res / values», так что посмотрите сейчас. Вернитесь к манифесту снова. Если позже вы решите определить свои собственные стили приложения, вы можете ссылаться на них в атрибуте темы.


Внутри элемента application вы увидите элемент Activity для основного класса Activity, который вы создали при запуске проекта. Этот элемент activity также содержит дочерние элементы, которые мы рассмотрим далее. Сначала посмотрите на открывающий тег:

1
2
3
<activity
    android:name=»com.example.myfirstapp.MainActivity»
    android:label=»@string/app_name» >

Атрибут name ссылается на класс, используя его полный путь в пакете приложения. Метка позволяет вам контролировать то, что отображается в качестве заголовка окна, когда на экране отображается действие. По умолчанию оно совпадает с именем приложения, поэтому вы можете оставить его как есть в большинстве случаев.

По мере усложнения ваших приложений вы будете добавлять к ним больше действий, по одному для каждого экрана в пользовательском интерфейсе. Каждый раз, когда вы добавляете новый класс Activity в свое приложение, вам необходимо добавить для него элемент внутри элемента application , как в следующем примере:

1
2
<activity android:name=».About» >
</activity>

Как видите, не всегда нужно указывать полное имя пакета. Вышеуказанная сокращенная форма будет работать до тех пор, пока класс Activity (с именем «About») находится в пакете, определенном в элементе manifest . Элементы активности могут принимать множество атрибутов, определяющих, как пользователь может взаимодействовать с ними.


Внутри основного элемента activity вы увидите элемент intent-filter :

1
2
3
4
<intent-filter>
    <action android:name=»android.intent.action.MAIN» />
    <category android:name=»android.intent.category.LAUNCHER» />
</intent-filter>

Фильтр Intent описывает, на что Intent может реагировать родительское activity . В Android Intent — это объект данных, который передается в Activity при запуске. Когда вы запускаете одно действие из другого в своих приложениях, вы будете использовать Intents, но они также могут передаваться между приложениями.

Фильтр намерений для основного activity указывает, что он должен запускаться при запуске приложения. Это делается с помощью элемента action , который перечисляет действие «MAIN». Элемент category описывает Фильтр намерений по имени категории, в данном случае «LAUNCHER». Оба из них в совокупности указывают, что ваше приложение должно использовать Activity в качестве основной точки входа и что эту точку входа следует использовать при запуске приложения.

Фильтры намерений могут содержать множество дочерних элементов, включая спецификации данных. Дополнительные сведения см. В разделе « Фильтры намерений и фильтров намерений » в Руководстве разработчика по Android. Элемент Activity может содержать дополнительные дочерние элементы наряду с intent-filter таким как metadata , которые могут определять пару имя-значение для элементов данных.


Мы рассмотрели все элементы манифеста, которые включает Eclipse при создании вашего проекта. Давайте теперь посмотрим на некоторые другие, которые вам могут понадобиться в будущих проектах. Элемент uses-permission позволяет вам запрашивать разрешение для вашего приложения на определенные действия, для которых пользователь должен предоставить разрешение. Когда пользователь просматривает ваше приложение в магазине Play, ему будут отображаться разрешения перед его загрузкой. Если они решат пойти дальше, они должны принять разрешения, чтобы ваше приложение могло работать.

Разрешения, которые необходимо запросить в манифесте, включают использование данных из Интернета, запись во внешнее хранилище и доступ к таким функциям устройств, как камера. Следующий пример демонстрирует эту концепцию:

1
<uses-permission android:name=»android.permission.INTERNET» />

Существует несколько потенциальных разрешений, которые могут запрашивать ваши приложения. См. Страницу Manifest.permission по ссылке API.


Ряд элементов манифеста можно использовать для описания необходимых аппаратных и программных функций приложения. К ним относится элемент uses-configuration , в котором вы можете указать требования к параметрам навигации, клавиатуры и сенсорного экрана. В элементе uses-feature вы можете перечислить единственную функцию, необходимую в аппаратном или программном обеспечении, используя имя функции и логический флаг. Эти функции включают Bluetooth и параметры камеры, такие как вспышка, определение местоположения и датчики. Элемент supports-screens позволяет вам определять размеры экрана, поддерживаемые вашим приложением, задавая атрибуты, относящиеся как к размеру, так и к плотности.


Элементы, которые мы исследовали, скорее всего, будут использоваться для ваших начальных приложений. Тем не менее, существуют другие элементы, используемые в различных типах приложений. Первоначальный проект, который мы создали, предназначен для стандартного приложения, запускаемого через пользовательское меню, и представляет один или несколько экранов действий пользователю. Другие типы приложений включают в себя виджеты и приложения, выполняющие текущие фоновые процессы, обработку доступа к данным и получение системных уведомлений.

Приложения, использующие фоновую обработку, обычно делают это с помощью классов обслуживания на Android. Для этого необходимо перечислить элемент service в манифесте, по одному для каждого класса службы, как для действий. Поставщики контента в приложениях Android отвечают за управление доступом к источнику данных. Они перечислены с использованием элемента provider . Наконец, элемент receiver указывается в файле манифеста, если приложение хочет получать Интенты из других приложений или из самой системы.


Мы рассмотрели основные функции файла манифеста в приложениях для Android. Каждый раз, когда вы создаете приложение, Eclipse заполняет файл основными элементами, с которых нужно начать. Когда вы встраиваете функциональность в приложение, вы будете постоянно добавлять контент в манифест, чтобы обеспечить работу приложения в целом. Когда вы сталкиваетесь с проблемами при запуске ваших приложений на реальных или виртуальных устройствах во время разработки, это иногда происходит из-за отсутствующего элемента в манифесте. В следующей части серии мы рассмотрим, как приложения Android хранят и получают доступ к данным.