Северный (Арктический) федеральный университет им. М.В. Ломоносова
Опубликован: 10.04.2014 | Доступ: свободный | Студентов: 6824 / 1221 | Длительность: 14:18:00
Специальности: Программист
Лекция 2:

Виды приложений и их структура

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 показывает варианты внешнего вида приложения с использованием только компоновки по умолчанию (а) и с использованием альтернативных компоновок (б). Даже на схеме понятно, что при правильном подходе приложение, изменяющее свой внешний вид в зависимости от размера экрана привлекательнее, чем остающееся неизменным.

Чтобы определить зависимые от конфигурации альтернативы для множества ресурсов:

  1. необходимо создать директорию в каталоге res/, присвоить этой директории имя в следующей форме: имя_ресурса-спецификатор_конфигурации, где
    • имя_ресурса - имя директории, соответствующего ресурса по умолчанию (см. выше);
    • спецификатор_конфигурации - имя, определяющее конфигурацию, для которой используются данные ресурсы. Полный список доступных спецификаторов: http://developer.android.com/guide/topics/resources/providing-resources.html
  2. необходимо сохранить ресурсы в новой директории, файл ресурсов должен называться в точности так же, как соответствующий файл ресурсов по умолчанию.

Например, если компоновка элементов пользовательского интерфейса сохранена, как ресурс по умолчанию, в папке 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

Марат Нуриджанян
Марат Нуриджанян

Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html).

Там скачать можно только Android Studio

Владимир Каункин
Владимир Каункин

В самостоятельной работе 2 в примере решения задания некорректно загадывается число (в двух местах), выбирая случайное целое число из диапазона [0, 99] вместо [1, 100], как того требует условие. Кроме того, загадывание числа всё таки лучше вынести в отдельный метод, как мне кажется.