|
Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html). Там скачать можно только Android Studio |
Виды приложений и их структура
3.5 Манифест приложения
Корневой каталог каждого приложения под Android должен содержать файл AndroidManifest.xml (в точности с таким названием). Манифест приложения содержит всю необходимую информацию, используемую системой для запуска и выполнения приложения. Основная информация, содержащаяся в манифесте:
- Имя Java пакета приложения, которое используется как уникальный идентификатор приложения.
- Описание компонентов приложения: активностей, сервисов, приемников широковещательных сообщений и контент-провайдеров, которые составляют приложение. Для каждого компонента приложения определено имя соответствующего класса и объявлены их основные свойства (например, с какими сообщениями-намерениями они могут работать). Эта информация позволяет системе Android узнать какие компоненты и при каких условиях могут быть запущены.
- Определение процессов, в которых будут выполняться компоненты приложения.
- Объявление полномочий, которыми должно обладать приложение для доступа к защищенным частям API и взаимодействия с другими приложениями.
- Объявление полномочий, которыми должны обладать другие приложения для взаимодействия с компонентами данного.
- Список вспомогательных классов, которые предоставляют информацию о ходе выполнения приложения. Эти объявления содержатся в манифесте пока идет разработка и отладка приложения, перед публикацией приложения они удаляются.
- Определение минимального уровня Android API для приложения.
- Список библиотек связанных с приложением.
В файле манифеста только два элемента: <manifest> и <application> являются обязательными и при этом встречаются ровно по одному разу. Остальные элементы могут встречаться несколько раз или не появляться совсем, в этом случае манифест определяет пустое приложение.
Следующий листинг демонстрирует общую структуру файла манифеста.
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<support-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>
<activity-alias>
<intent-filter> … </intent-filter>
<meta-data />
</activity-alias>
<service>
<intent-filter> … </intent-filter>
<meta-data />
</service>
<receiver>
<intent-filter> … </intent-filter>
<meta-data />
</receiver>
<provider>
<grant-uri-permission />
<meta-data />
<path-permission />
</provider>
<uses-library />
</application>
</manifest>
Листинг
3.1.
Структура файла AndroidManifest.xml
В манифесте элементы одного уровня, такие как <activity>, <service>, <receiver>, <provider>, могут следовать друг за другом в любой последовательности. Элемент <activity-alias> является исключением из этого правила, он должен следовать за соответствующей активностью.
Более предметно разговор о файле манифеста и его основных элементах пойдет в лабораторных работах.
Подробности: http://developer.android.com/guide/topics/manifest/manifest-intro.html
3.6 Ресурсы
При разработке мобильных приложений необходимо выработать привычку отделять ресурсы приложения от кода. К ресурсам приложения могут относиться: изображения, строки, цвета, компоновки элементов пользовательского интерфейса (layout) и т. д. Отделение ресурсов от кода позволяет использовать альтернативные ресурсы для различных конфигураций устройств: язык, разрешение экрана и т. д. Для обеспечения совместимости с различными конфигурациями, ресурсы необходимо сгруппировать в директории по типу ресурсов и конфигурации устройства, полученные директории поместить в папку res/.
Для любого типа ресурсов можно определить две группы. Первая определяет ресурсы, которые будут использоваться независимо от конфигурации устройства или в том случае, когда под конфигурацию нет подходящих альтернативных ресурсов. Эта группа называется ресурсы по умолчанию (default). Вторая группа определяет ресурсы, подходящие для определенной конфигурации устройства, размещается в директории с названием, обозначающим данную конфигурацию. Такие ресурсы называются альтернативными.
![]() |
![]() |
| а) используется компоновка по умолчанию (приложение не содержит альтернативы) | б) каждое устройство использует соответствующую компоновку |
| Рис. 3.6. Использование ресурсов | |
Каждый тип ресурсов необходимо размещать в специальной поддиректории папки res/. Рассмотрим основные из этих поддиректорий:
| animator/ | - содержит XML файлы, которые определяют свойства анимации; |
| anim/ | - содержит XML файлы, которые определяют анимацию преобразований; |
| color/ | - содержит XML файлы, которые определяют списки цветов; |
| drawable/ | - содержит графические файлы или XML файлы, которые компилируются в графические ресурсы; |
| layout/ | - содержит XML файлы, которые определяют компоновку элементов пользовательского интерфейса; |
| menu/ | - содержит XML файлы, которые определяют все меню приложения; |
| values/ | - содержит XML файлы, которые определяют простые значения, таких ресурсов как, строки, числа, цвета. |
Следует отметить, что файлы ресурсов нельзя размещать в папку res/ напрямую, они обязательно должны размещаться в соответствующем каталоге, иначе будет выдана ошибка компиляции.
Все ресурсы, которые содержатся в рассмотренных поддиректориях являются ресурсами по умолчанию. Понятно, что различные типы устройств могут требовать различных типов ресурсов. Например, для устройств с разными размерами экрана компоновки элементов пользовательского интерфейса должны отличаться. Рис 3.6 показывает варианты внешнего вида приложения с использованием только компоновки по умолчанию (а) и с использованием альтернативных компоновок (б). Даже на схеме понятно, что при правильном подходе приложение, изменяющее свой внешний вид в зависимости от размера экрана привлекательнее, чем остающееся неизменным.
Чтобы определить зависимые от конфигурации альтернативы для множества ресурсов:
- необходимо создать директорию в каталоге res/, присвоить этой директории имя в следующей форме: имя_ресурса-спецификатор_конфигурации, где
- имя_ресурса - имя директории, соответствующего ресурса по умолчанию (см. выше);
- спецификатор_конфигурации - имя, определяющее конфигурацию, для которой используются данные ресурсы. Полный список доступных спецификаторов: http://developer.android.com/guide/topics/resources/providing-resources.html
- необходимо сохранить ресурсы в новой директории, файл ресурсов должен называться в точности так же, как соответствующий файл ресурсов по умолчанию.
Например, если компоновка элементов пользовательского интерфейса сохранена, как ресурс по умолчанию, в папке res/layout/, можно (скорее даже нужно) определить альтернативную компоновку элементов пользовательского интерфейса, соответствующую горизонтальной (альбомной) ориентации экрана смартфона и сохранить ее в папке res/layout-land/. Android автоматически определит подходящую компоновку, сверяя текущее состояние устройства с именами папок в каталоге /res.
Все ресурсы после определения могут быть доступны по ссылке на их ID, которые определены в автоматически генерируемом классе R. Для каждого типа ресурсов в R классе существует подкласс, например, R.drawable для всех графических ресурсов. ID ресурса всегда имеет две составляющие:
- тип ресурса - все ресурсы группируются по типам, например, string, drawable, layout;
- имя ресурса - либо имя файла без расширения, либо значение атрибута android:name в XML файле для простого значения.
Получить доступ к ресурсу можно двумя способами:
- в коде: можно использовать выражения вида R.тип_ресурса.имя_ресурса, например, R.string.hello;
- в XML: используется специальный XML синтаксис, который соответствует ID определенному в R классе, например, @string/hello.
Более предметно разговор об использовании ресурсов в лабораторных работах.
Подробности: http://developer.android.com/guide/topics/resources/index.html

