Манифест приложения. Вскрываем, модифицируем и запаковываем Android-приложения
Файл манифеста Android - это основной конфигурационный файл каждого приложения Android. Редактор распределяет информацию из этого файла по нескольким вкладкам.
Manifest (Манифест) - на этой вкладке, показанной на рис. 1.3, определяются общие параметры приложения, такие как название пакета п информация о версии приложении (для установки и обновления).
Application (Приложение) - на этой вкладке определяются такие данные о приложении, как имя и значок приложения, а также внутренние компоненты приложения, например, какие деятельности могут выполняться (включая деятельность запуска DroidActivity по умолчанию) и другие возможности и сервисы, обеспечиваемые приложением.
Permissions (Разрешения) - это вкладка, где определяются права приложения. Например, если приложению необходима возможность чтения списка контактов
телефона, то в конфигурационный файл должен быть добавлен тип Uses-Permission с правом на чтение контактов (android, permission. READCONTACTS).
Instrumentation (Инструментарий) - эта вкладка используется для тестирования компонентов с помощью различных классов инструментария, доступных в Android SDK.
AndroidManifest.xml - эта вкладка представляет собой простой XML- редактор для редактирования файла манифеста вручную.
Если перейти на вкладку AndroidManifest.xml, вы увидите код файла манифеста, который выглядит примерно следующим образом:
xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidbook.droidl" android: versionCode=" 1" android:versionName="l. 0"> android:icon="@drawable/icon" android:label="@string/app name"> android: name=". DroidActivity" android:label="@string/app name"> android:name="android.intent.action.MAIN" /> android: name = "android. intent . category. LAUNCHER" / >
ВНИМАНИЕ!
ЗНАЕТЕ ЛИ ВЫ, ЧТО… __________________________________________________
Все файлы ресурсов Android, включая файл манифеста Android, записываются в формате XML. Это означает, что вы можете редактировать их без специального редактора. Чтобы создать новый XML-файл Android, нажмите на кнопку его создания
с изображением листа бумаги, (буквой «а» и знаком «плюс»I на панели инструментов Eclipse.
ВЫПОЛНИТЕ САМОСТОЯТЕЛЬНО
РЕДАКТИРОВАНИЕ КОНФИГУРАЦИОННОГО ФАЙЛА ANDROID
Попробуйте отредактировать файл манифеста Android. Вы не сможете проводить отладку приложения, пока не установите значение атрибута android:debuggable равным true. Для этого выполните следующие действия:
1. Откройте файл AndroidManifest.xml в редакторе ресурсов.
2. Перейдите на вкладку Application (Приложение).
3. Раскройте список атрибута debuggable и выберите пункт true.
4. Сохраните файл манифеста.
Теперь, если переключиться на вкладку AndroidManifest.xml, вы увидите, что у тега
«application» появился атрибут отладки:
android:debuggable="true"
РЕДАКТИРОВАНИЕ ДРУГИХ ФАЙЛОВ РЕСУРСОВ
большинство ресурсов приложения Android хранятся в папке /res. Она содержит в себе подпапки:
/drawable-ldpi, /drawable-hdpi, /drawable-mdpi - в этих подпапках хранятся графические файлы ресурсов для различной плотности размеще ния точек и разрешений экрана. Если вы просмотрите содержимое этих папок на панели Project Explorer (Проводник проектов), то найдете гра фический файл icon.png в каждой из них. Это значок приложения. По дробнее о различии между этими папками вы узнаете в часе 20.
/layout - и этой подпапке хранятся файлы макета пользовательскою интерфейса. Здесь вы можете найти файл макета экрана main.xml, кото рый содержит описание пользовательского интерфейса для деятельно сти по умолчанию.
/values – в этой подпапке различные типы ресурсов сгруппированы по типам, таким как строковые значения, значения цвета и другие примитивные типы. Здесь вы можете видеть файл ресурса strings.xml, который содержит все строковые ресурсы, используемые в приложении.
Щелкните дважды по какому-либо из файлов ресурсов, чтобы открыть его н редакторе.
Помните, что вы можете редактировать XML-данные непосредственно н текстовом редакторе.
ВЫПОЛНИТЕ САМОСТОЯТЕЛЬНО РЕДАКТИРОВАНИЕ СТРОКОВЫХ РЕСУРСОВ
Если вы посмотрите на код файла макета main.xml, то увидите, что он выводит на экран простой интерфейс с единственным элементом пользовательского интерфейса - TextView. Этот элемент выводит на экран текстовую строку. В нашем случае отображаемый на экране текст определяется строковым ресурсом 0string/hello.
Для редактирования строкового ресурса 0string/hello редактором строковых ресурсов выполните следующие действия: 1. Откройте в редакторе ресурсов файл strings.xml.
2. Обратите внимание на строковый ресурс с именем hello и текстом Hello
World, DroidActivity! в редакторе ресурсов. 3. В поле ввода Value (Значение) измените это значение на Hello, Dave.
4. Сохраните файл.
Теперь если вы переключитесь на вкладку strings.xml и посмотрите на код XML, то увидите, что в контейнерном теге
Ну и в книге Голощапова тоже есть не плохое описание. Так как в сети статьи могут исчезать, то тут я сделаю вольную компиляцию всех вышеперечисленных источников. И заодно исправляю неточности. Так как перевод некоторых элементов (например
Это делаю себе как памятку, ну и если кому еще пригодится то хорошо.
Файл AndroidManifest.xml задает конфигурацию приложения:
- объявляет имя Java-пакета приложения, который служит уникальным идентификатором
- объявляет минимальный и максимальный уровни API, необходимые для работы приложения
- описывает компоненты приложения (Activiy, Service, Broadcast Receiver и Content Provider)
- перечисляет любые библиотеки связанные с приложением (помимо библиотек Андроид, связанных по умолчанию)
- объявляет разрешения, которые требуются для работы приложения (например, доступ в сеть, разрешение на отправку SMS и т.д.)
Полное описание есть в альма-матер, но я его приведу здесь тоже для пущей наглядности
Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Элементы
Элемент
Эти атрибуты обязательны для любого приложения Андроид и имеют следующее назначение:
xmins:android — определяет пространство имен Android. Это значение всегда неизменно для всех приложений.
package — определяет уникальное имя пакета приложения, которое вы задали при создании проекта.
Для чего нужно указывать package? Если вы захотите загрузить ваше приложение на Google Play, то он проверяет уникальность при приеме приложения, поэтому рекомендуется использовать свое имя для избежания конфликтов с другими разработчиками.
android:versionCode — по сути это версия вашего приложения. Выпуская новую версию вы указываете её в этом поле, оно должно быть целым числом.
Выше мы говори про уникальность пакета, так вот если вы ранее загрузили на Google Play ваше приложение, то когда вы решите загрузить обновленную версию приложения, то вам нужно придерживаться нескольких правил. Имя пакета должно совпадать с тем, что уже загружено Google Play и указать версию android:versionCode на порядок выше. Но это при условии что вы выпускаете новую версию приложения, в случае если вы хотите добавить немного исправленную версию, то это читайте ниже.
Изменив данный параметр и загрузив приложение на Google Play все пользователям вашего приложения будет предложено обновится до новой версии приложения.
android:versionName - указывает номер пользовательской версии. Если вы нашли несколько недоработок в вашем приложении и исправили их, то в этом случае можно указать для этого поля новую версию, что будет говорить Google Play, что это не новая версия приложения, а улучшенная. Для именования версии можно использовать строку или строковый ресурс.
Изменив данный параметр и загрузив приложение на Google Play все пользователям вашего приложения будет предложено обновится до модифицированной версии приложения.
Элемент
Разрешения предоставляются во время установки приложения, а не во время его работы
.
android:name=’android.permission.CAMERA’
– доступ к камере устройства
android:name=’android.permission.READ_CONTACTS’
– доступ к базе данных контактов
Элемент
Приложение может также защитить свои собственные компоненты (Activity, Service, Broadcast Receiver и Content Provider) разрешениями. Оно может использовать любое из системных разрешений, определенных Андроид (перечисленных в android.Manifest.permission) или объявленных другими приложениями, а так же может определить свои собственные разрешения. Новое разрешение должно быть объявлено в атрибуте android:name
элемента
permisson android:name=”com.samples.custom_permission”
Кроме того используются дополнительные атрибуты:
android:label
— имя разрешения, отображаемое пользователю
android:description
— описание разрешения
android:icon
— значок разрешения
android:permissionGroup
— определяет принадлежность к группе разрешений
android:protectionLevel
— уровень защиты
Элемент
Элемент
Элемент
Элемент
Основной используемый в элементе атрибут – android:minSdkVersion , определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте. Желательно всегда объявлять этот атрибут, например:
Атрибут android:targetSdkVersion представлен начиная с API Level 4. Это целое число, обозначающее API Level, для которого приложение предназначено (target, что означает цель). Если этот атрибут не установлен, то его значение по умолчанию равно minSdkVersion.
Этот атрибут информирует систему, что Вы тестировали приложение с этим API Level, и система не должна позволять любое поведение совместимости (compatibility behaviors, т. е. эмуляцию вызовов API, обеспечивающих специальную дополнительную программную обработку некоторых вызовов API), чтобы поддержать прямую совместимость приложения с целевой версией системы. Приложение все еще может работать на более старых версиях (до версий, не меньших minSdkVersion).
Поскольку Android развивается с каждой новой версией, то некоторые поведения и даже внешний вид приложения может измениться. Однако, если API level платформы выше, чем версия, указанная в targetSdkVersion приложения, система может включить обработки совместимости (compatibility behaviors), чтобы обеспечить работоспособность Вашего приложения так, как Вы этого ожидали. Вы можете запретить такие обработки совместимости, если укажете targetSdkVersion равным API level платформы Android, на которой приложение работает. Например, установка этого значения в "11" или более высокое значение позволит системе установить новую тему оформления по умолчанию (Holo) для Вашего приложения при работе на Android 3.0 или более новой, и также запретит режим совместимости экрана, когда программа будет работать на больших экранах (потому что поддержка API level 11 неявно подразумевает поддержку больших экранов).
Имеется много разновидностей обеспечения совместимости (compatibility behaviors), которые система может разрешить, базируясь на значении этого атрибута. Некоторые из этих обработок (поведений, behaviors) описаны в соответствующей документации версии платформы, см. Build.VERSION_CODES .
Чтобы обеспечить соответствие Вашего приложения каждому новому релизу Android, Вы должны увеличивать значение этого атрибута, чтобы оно соответствовало последнему API level, и затем необходимо полностью протестировать поведение приложения на этой новой версии платформы.
Атрибут android:maxSdkVersion представлен начиная с API Level 4. Это целое число, обозначающее максимальный API Level, на котором приложение может работать.
На версиях Android 1.5, 1.6, 2.0 и 2.0.1 система проверяет значение этого атрибута, когда инсталлируется приложение, и когда приложение проверяется на совместимость после обновления системы. В любом случае, если атрибут приложения maxSdkVersion меньше API Level системы, то установка приложения будет запрещена. При проверке приложения на совместимость после обновления системы такой случай соответствует полному удалению приложения с устройства. Для иллюстрации того, как этот атрибут может повлиять на приложение после обновления системы, рассмотрим пример.
Приложение декларировало maxSdkVersion="5" в своем манифесте, и было опубликовано на Google Play. Пользователь устройства Android 1.6 (API Level 4) загрузил и установил это приложение. После нескольких недель пользователь принял сообщение от системы over-the-air с предложением обновить систему до уровня Android 2.0 (API Level 5). После установки этого обновления система проверила атрибут приложения maxSdkVersion, и разрешила дальнейшее использование этого приложения. Приложение после этого работало нормально. Однако через некоторое время устройство приняло другое обновление системы Android 2.0.1 (API Level 6). После обновления система не разрешает работу приложения, так как API Level системы (6) теперь выше, чем максимальный уровень, который может поддержать приложение (5). Система делает приложение невидимым для пользователя, и удаляет его из устройства.
Предупреждение: использование этого атрибута не рекомендуется. Во-первых, нет никакой потребности установить этот атрибут как средство блокирования развертывания Вашего приложения на новые версии платформы Android по мере их появления. Для Android декларируется полная обратная совместимость старых приложений для новых версий Android. Ваше приложение должно работать должным образом на всех новых версиях, если оно использует только стандартное API и следует лучшим правилам и практикам разработки. Во-вторых нужно помнить, что применение этого атрибута приведет к автоматическому удалению Вашего приложения с устройств пользователя, которые обновят свою систему на более высокий API Level, чем указано в атрибуте. Большинство устройств, на которых вероятно будет установлено Ваше приложение, получают периодические обновления системы на лету, по воздуху (over the air), так что Вы должны учитывать этот эффект перед тем, как установить этот атрибут для своего приложения.
Будущие версии Android (вне Android 2.0.1) больше не будут проверять maxSdkVersion и принудительно применять его значение при установке или проверке совместимости приложения. Однако Google Play продолжит использовать этот атрибут как фильтр при предоставлении приложений, доступных для закачки пользователям.
Элемент
Если приложение может работать с различными конфигурациями устройства, необходимо включить в манифест отдельные элементы
Вы можете задать любую комбинацию, содержаoe. следующие устройства
reqFiveWayNav
- используйте значение true, если приложению требуется устройство ввода, поддерживающее навигацию вверх, вниз, влево, вправо, а также нажатие выделенного элемента. К таким устройствам относятся трекболы и D-pad. В принципе устарело
reqHardKeyboard
- используйте значение true, если приложению нужна аппаратная клавиатура.
reqKeyboardType
- позволяет задать тип клавиатуры: nokeys, qwerty, twelvekey, undefined
reqNavigation
- укажите одно из значений: nonav, dpad, trackball, wheel или undefined, если требуется устройство для навигации
reqTouchScreen
- если требуется сенсорный экран, то используйте нужное значение из возможных вариантов: notouch, stylus, finger, undefined. Сейчас практически все устройства содержат сенсорный экран, поэтому тоже устарело
Приложение не будет устанавливаться на устройстве, которое не соответствует заданной вами конфигурации. В идеале, вы должны разработать такое приложение, которое будет работать с любым сочетанием устройств ввода. В этом случае
Элемент
android.hardware.camera.front — требуется аппаратная камера
android.hardware.camera.autofocus — требуется камера с автоматической фокусировкой
Все параметры можно посмотреть в альма-матер .
Элемент
Для пущей наглядности приведу синтакс
Определяет размеры и плотности экранов совместимые с вашим приложением. Только один элемент
Система Андроид не читает этот элемент в файле манифеста, ни во время установки ни во время запуска приложения.
Этот элемент носит чисто информационный характер и используется только внешними сервисами такими как Google Play для фильтрации отображения вашего приложения в маркете. То есть если пользователь имеет параметры экрана отличные от указанных в этом элементе, то Google Play просто не покажет ему это приложение.
Как правило, вы не должны использовать этот элемент.
Этот элемент объявляет формат сжатия одной GL текстуры поддерживаемой вашим приложением. Если ваше приложение поддерживает несколько форматов сжатия текстур, то вам необходимо использовать несколько этих элементов. Например:
Все значения можно посмотреть по этой ссылке . На русском языке по этому параметру можно немного почитать .
Элемент
Элемент
Дочерний элемент
Эти атрибуты элемента
android:name
— имя класса. Имя должно включать полное обозначение пакета, но если имя пакета уже определено в корневом элементе
android:label — текстовая метка, отображаемая пользователю в заголовке Активности.
Элемент
При изменении языка, региона или аппаратной конфигурации Android прерывает работу всех приложений и затем запускает их повторно, перезагружая значения из ресурсов . Подобное поведение не всегда уместно и желательно. Например, некоторые изменения конфигурации (ориентация экрана в пространстве, доступность клавиатуры) могут произойти только лишь из-за того, что пользователь повернул устройство или выдвинул клавиатуру . Вы можете настраивать, каким образом ваше приложение будет реагировать на подобные изменения, обнаруживая их и выполняя собственные действия. Чтобы заставить Активность отслеживать изменения конфигурации при выполнении программы, добавьте в ее узел в манифесте атрибут android:configChanges , указав, какие именно события хотите обрабатывать.
Перечислим некоторые значения, с помощью которых можно описать изменения конфигурации:
оrientation
— положение экрана изменено с портретного на альбомное (или наоборот);
keyboardHidden
— клавиатура выдвинута или спрятана;
fontScale
— пользователь изменил предпочтительный размер шрифта;
locale
— пользователь выбрал новые языковые настройки;
keyboard
— изменился тип клавиатуры; например, телефон может иметь 12-клавишную панель, при повороте которой появляется полноценная клавиатура;
touchscreen
или navigation
— изменился тип клавиатуры или способ навигации. Как правило, такие события не встречаются.
В некоторых случаях одновременно будут срабатывать несколько событий. Например, когда пользователь выдвигает клавиатуру, большинство устройств генерируют события keyboardHidden и orientation . Вы можете выбирать несколько событий, которые хотите обрабатывать самостоятельно, разделяя их символом | .
Наличие атрибута android:configChanges отменяет перезапуск приложения при заданных изменениях конфигурации . Вместо этого внутри Активности срабатывает метод onConfigurationChanged() . Переопределите его, чтобы появилась возможность обрабатывать изменения в конфигурации. Используйте переданный объект Configuration , чтобы получить новые значения. Не забудьте вызвать одноименный метод из родительского класса и перезагрузить измененные значения со всех ресурсов, которые используются внутри Активности.
@Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
[ ... Обновите пользовательский интерфейс, используя данные из ресурсов... ]
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
[ ... Реакция на измененную ориентацию экрана... ]
}
if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
[ ... Реакция на выдвигание/задвигание клавиатуры... ]
}
}
Любые изменения конфигурации, которые не были явно помечены для обработки внутри вашего приложения, приведут к перезапуску Активности, минуя вызов метода onConfigurationChanged
.
Элемент
Это означает, что эта Активность приложения является главной и когда система пришлет Intent для запуска приложения, эта Активность откроется по умолчанию.
Этот атрибут определяет, что это приложение будет добавлено в директорию приложений на Android-устройстве. И будет отображаться в окне запуска приложений Application Launcher мобильного устройства.
Элемент добавляет спецификацию данных к фильтру намерений. Спецификация может быть только типом данных (атрибут mimeType), URI или типом данных вместе с URI. Значение URI определяется отдельными атрибутами для каждой из его частей, т.е. URI делится на части: android:scheme, android:host, android:port, android:path или android:pathPrefix, android:pathPattern.
Элементы
; ;
Тут все было описано очень кратко. Более подробно читаем в альма-матер.
В корневой папке каждого приложения должен находиться файл AndroidManifest.xml (который именно так и называется). Файл манифеста содержит важную информацию о приложении, которая требуется системе Android. Только получив эту информацию, система может выполнить какой-либо код приложения. Среди прочего файл манифеста выполняет следующие действия:
- Он задает имя пакета Java для приложения. Это имя пакета служит уникальным идентификатором приложения.
- Он описывает компоненты приложения — операции, службы, приемники широковещательных сообщений и поставщиков контента, из которых состоит приложение. Он содержит имена классов, которые реализуют каждый компонент, и публикует их возможности (указывает, например, какие сообщения они могут принимать). На основании этих деклараций система Android может определить, из каких компонентов состоит приложение и при каких условиях их можно запускать.
- Он определяет, в каких процессах будут размещаться компоненты приложения.
- Он объявляет, какие разрешения должны быть выданы приложению, чтобы оно могло получить доступ к защищенным частям API-интерфейса и взаимодействовать с другими приложениями.
- Он также объявляет разрешения, требуемые для взаимодействия с компонентами данного приложения.
- Он содержит список классов , которые при выполнении приложения предоставляют сведения о профиле и прочую информацию. Эти объявления присутствуют в файле манифеста только во время разработки и отладки приложения и удаляются перед его публикацией.
- Он объявляет минимальный уровень API-интерфейса Android, который требуется приложению.
- Он содержит список библиотек, с которыми должно быть связано приложение.
Структура файла манифеста
Приведенная далее схема позволяет ознакомиться с общей структурой файла манифеста и всеми элементами, которые могут в нем содержаться. Каждый элемент вместе со всеми своими атрибутами, полностью описывается в отдельном файле. Для просмотра подробных сведений о любом элементе, щелкните имя элемента на схеме, в алфавитном списке элементов, приведенном после схемы, или в любом другом месте, где этот элемент упоминается.
. . . . . . . . .
Далее приведен список всех элементов, расположенных в алфавитном порядке, которые могут присутствовать в файле манифеста. Там могут находиться только эти элементы, а никакие другие элементы или атрибуты добавлять нельзя.
Соглашения о компонентах файла
Ко всем элементам и атрибутам из файла манифеста применяется рад соглашений и правил:
Элементы Обязательными являются только элементы и . Оба они должны присутствовать в файле манифеста, при этом указать их можно только один раз. Большинство других элементов можно указывать по нескольку раз или не указывать вовсе — хотя по крайней мере некоторые из них нужны, чтобы файл манифеста был сколько-нибудь информативным.Если в элементе и есть какое-то содержимое, то это другие элементы. Все значения задаются с помощью атрибутов, а не как символьные данные в элементе.
Элементы, находящиеся на одном уровне, обычно не упорядочиваются. Например, элементы , и можно указать в любой последовательности. (Элемент является исключением из этого правила. Он должен следовать за элементом , псевдонимом которого он является.)
Атрибуты Формально все атрибуты являются необязательными. Однако некоторые их них указывать необходимо, чтобы файл мог выполнять свое предназначение. В качестве руководства используйте эту документацию. В отношении атрибутов, которые являются и вправду необязательными, в ней указывается значение, используемое по умолчанию, или говорится, что произойдет, если такой атрибут не будет указан.За исключением некоторых атрибутов корневого элемента , имена всех атрибутов должны начинаться с префикса android: — например, android:alwaysRetainTaskState . Поскольку этот префикс является универсальным, в документации при указании атрибутов по имени он обычно опускается.
Объявление имен классов Многие элементы соответствуют объектам Java, в том числе элементы для самого приложения (элемент ) и основных его компонентов — операций (), служб (), приемников широковещательных сообщений () и поставщиков контента ().Если вы определяете подкласс, а это практически всегда делается для классов компонентов ( , и ), выполняется это с помощью атрибута name . В состав имени должно входить полное обозначение пакета. Например, подкласс можно объявить следующим образом:
Однако его можно укоротить. Если первым символом в строке указать точку, эта строка будет добавляться к имени пакета приложения (указанного атрибутом элемента ). Следующее назначение является таким же, как приведенное выше:
При запуске компонента Android создает экземпляр подкласса, указанного по имени. Если подкласс не указан, система создает экземпляр базового класса.
Несколько значений Если можно указать несколько значений, элемент почти всегда приводится повторно. Делается это вместо перечисления нескольких значений в одном элементе. Например, в фильтре Intent может быть перечислено несколько действий:@[пакет:]тип:имя
где имя пакета можно опустить, если ресурс находится в одном пакете с приложением, тип - это тип ресурса, — например "string" или "drawable", — а имя - это имя, определяющее ресурс. Например:
Значения из темы выражаются схожим образом, только в начале у них идет " ? ",
а не " @ ": ?[пакет:]тип:имя В следующих разделах описано, как некоторые функции Android отображаются
в файле манифеста. Базовые компоненты приложения (его операции, службы и
приемники широковещательных сообщений) активируются объектами Intent
. Intent -
это совокупность информации (объект ), описывающей
требуемое действие, — в том числе в ней указаны данные, с которыми следует выполнить это действие, категория
компонентов, которые должны выполнять это действие, и другие уместные инструкции.
Система Android находит компонент, который отреагирует на объект Intent, запускает
новый экземпляр компонента, если он требуется, и передает ему
объект Intent. Компоненты объявляют свои возможности — виды объектов Intent, на которые они могут
реагировать, — с помощью фильтров Intent
. Поскольку система Android
должна узнать, какие объекты Intent может обрабатывать тот или иной компонент, до того как она его запустит,
фильтры Intent указываются в файле манифеста как
элементы
. Компонент может иметь любое количество фильтров, каждый из которых описывает
отдельную возможность компонента. Объект Intent, в котором целевой компонент явно указан по имени, активирует этот компонент,
и фильтр при этом не учитывается. Но объект Intent, в котором имя целевого
компонента не указано, может активировать компонент, только если он может пройти через один из фильтров
компонента. Сведения о том, каким образом объекты Intent проверяются по фильтрам Intent,
см. в отдельном документе
. У ряда элементов есть атрибуты icon и label для
небольшого значка и текстовой метки, которые могут отображаться на экране. У некоторых из них также есть атрибут
description для более длинного описательного текста, который также может
отображаться на экране. Например, элемент
имеет все три таких атрибута, поэтому, когда пользователю задается вопрос, предоставить ли
разрешение запросившему его приложению, на экране может отображаться значок,
представляющий разрешение, имя разрешения и описание того, что оно
за собой влечет. В любом случае значок и метка, заданные в элементе-контейнере, становятся параметрами
icon и label , используемыми по умолчанию для всех вложенных в этот контейнер дочерних элементов.
Так, значок и метка, заданные в элементе
,
являются значком и меткой, используемыми по умолчанию для каждого компонента приложения.
Точно так же, значок и метка, заданные для компонента, — например элемента
, —
являются параметрами, используемыми по умолчанию для каждого элемента
компонента. Если в элементе
задана метка, а в операции и ее фильтре Intent - нет,
метка приложения будет считаться меткой и для операции, и для
фильтра Intent. Значок и метка, заданные для фильтра Intent, используются для обозначения компонента,
когда он представляется пользователю, для указания функции,
которую анонсирует фильтр. Например, фильтр с параметрами
" android.intent.action.MAIN " и
" android.intent.category.LAUNCHER " сообщает, что эта операция
инициирует приложение, — то есть он обозначает ее как
операцию, которая должна быть отображена в средстве запуска приложений. Отсюда следует, что значок и метка,
заданные в фильтре, отображаются в средстве запуска. Разрешение представляет
собой ограничение на доступ к части кода
или к данным, имеющимся на устройстве. Это ограничение накладывается для защиты важных
данных и кода, ненадлежащее использование которых может пагубно сказаться на работе приложения. Каждое разрешение обозначается уникальной меткой. Зачастую метка обозначает
действие, выполнение которого ограничивается. Например, вот некоторые разрешения, определенные
системой Android: android.permission.CALL_EMERGENCY_NUMBERS
Функцию можно защитить не более чем одним разрешением. Если приложению требуется доступ к функции, защищенной разрешением,
оно должно объявить, что ему необходимо это разрешение, с помощью элемента
в файле манифеста. Затем, когда приложение устанавливается на
устройство, установщик определяет, выдать ли запрошенное
разрешение, проверяя полномочия органов, подписавших сертификаты
приложения, а также, в некоторых случаях, спрашивая об этом пользователя.
Если разрешение предоставляется, приложение сможет использовать защищенные
функции. В противном случае его попытки доступа к этим функциям будут безуспешными,
причем пользователь не получит никакого уведомления об этом. Приложение также может защищать с помощью разрешений собственные компоненты (операции, службы,
приемники широковещательных сообщений и поставщиков контента). Оно может использовать
любые разрешения, определенные системой Android (они приведены в объекте
) или объявленные
другими приложениями. Либо оно может определить разрешения самостоятельно. Новое разрешение объявляется
с помощью элемента
. Например, операцию можно защитить следующим образом:
Обратите внимание, что в этом примере разрешение DEBIT_ACCT не только
объявляется с помощью элемента
, его использование также запрашивается с помощью элемента
. Чтобы другие компоненты приложения запускали защищенную
операцию, ее использование должно быть запрошено, даже несмотря на то, что защита
наложена самим приложением. В этом же примере: если атрибут permission был бы задан как
разрешение, объявленное где-то еще
(например, android.permission.CALL_EMERGENCY_NUMBERS), его бы не
нужно было объявлять еще раз с помощью элемента
. Однако все равно нужно было бы запрашивать его использование с помощью
. Элемент
объявляет пространство имен для группы разрешений, которые будут определены в
коде. А элемент
определяет метку для набора разрешений (как для разрешений, объявленных в файле манифеста с помощью элементов
, так и для объявленных где-то еще). Это влияет только на то, каким образом разрешения
группируются, когда отображаются пользователю. Элемент
не указывает, какие разрешения относятся к группе.
Он просто дает группе имя. Чтобы включить разрешение в группу,
атрибуту
его элемента
необходимо присвоить имя группы. Каждое приложение связывается с используемой по умолчанию библиотекой Android, в которой
имеются базовые пакеты для построения приложений (со стандартными классами,
например Activity, Service, Intent, View, Button, Application, ContentProvider
и так далее). Однако некоторые пакеты находятся в собственных библиотеках. Если ваше приложение
использует код из одного из таких пакетов, оно должно в явном виде потребовать, чтобы его связали
с этим пакетом. Файл манифеста должен содержать отдельный элемент
для указания имени каждой библиотеки. (Имя библиотеки можно найти в
документации по пакету.) Ну и в книге Голощапова тоже есть не плохое описание. Так как в сети статьи могут исчезать, то тут я сделаю вольную компиляцию всех вышеперечисленных источников. И заодно исправляю неточности. Так как перевод некоторых элементов (например Файл AndroidManifest.xml задает конфигурацию приложения: Полное описание есть в альма-матер, но я его приведу здесь тоже для пущей наглядности Элемент Эти атрибуты обязательны для любого приложения Андроид и имеют следующее назначение: xmins:android
— определяет пространство имен Android. Это значение всегда неизменно для всех приложений. package
— определяет уникальное имя пакета приложения, которое вы задали при создании проекта. Для чего нужно указывать package? Если вы захотите загрузить ваше приложение на Google Play, то он проверяет уникальность при приеме приложения, поэтому рекомендуется использовать свое имя для избежания конфликтов с другими разработчиками. android:versionCode
— по сути это версия вашего приложения. Выпуская новую версию вы указываете её в этом поле, оно должно быть целым числом. Выше мы говори про уникальность пакета, так вот если вы ранее загрузили на Google Play ваше приложение, то когда вы решите загрузить обновленную версию приложения, то вам нужно придерживаться нескольких правил. Имя пакета должно совпадать с тем, что уже загружено Google Play и указать версию android:versionCode
на порядок выше. Но это при условии что вы выпускаете новую версию приложения, в случае если вы хотите добавить немного исправленную версию, то это читайте ниже. Изменив данный параметр и загрузив приложение на Google Play все пользователям вашего приложения будет предложено обновится до новой версии приложения. android:versionName
- указывает номер пользовательской версии. Если вы нашли несколько недоработок в вашем приложении и исправили их, то в этом случае можно указать для этого поля новую версию, что будет говорить Google Play, что это не новая версия приложения, а улучшенная. Для именования версии можно использовать строку или строковый ресурс. Изменив данный параметр и загрузив приложение на Google Play все пользователям вашего приложения будет предложено обновится до модифицированной версии приложения. Элемент Разрешения предоставляются во время установки приложения, а не во время его работы
. android:name=’android.permission.CAMERA’
– доступ к камере устройства Элемент Приложение может также защитить свои собственные компоненты (Activity, Service, Broadcast Receiver и Content Provider) разрешениями. Оно может использовать любое из системных разрешений, определенных Андроид (перечисленных в android.Manifest.permission) или объявленных другими приложениями, а так же может определить свои собственные разрешения. Новое разрешение должно быть объявлено в атрибуте android:name
элемента permisson android:name=”com.samples.custom_permission”
Кроме того используются дополнительные атрибуты: android:label
— имя разрешения, отображаемое пользователю Элемент Элемент Элемент Элемент Основной используемый в элементе атрибут – android:minSdkVersion
, определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте. Желательно всегда объявлять этот атрибут, например:
Атрибут android:targetSdkVersion
представлен начиная с API Level 4. Это целое число, обозначающее API Level, для которого приложение предназначено (target, что означает цель). Если этот атрибут не установлен, то его значение по умолчанию равно minSdkVersion. Этот атрибут информирует систему, что Вы тестировали приложение с этим API Level, и система не должна позволять любое поведение совместимости (compatibility behaviors, т. е. эмуляцию вызовов API, обеспечивающих специальную дополнительную программную обработку некоторых вызовов API), чтобы поддержать прямую совместимость приложения с целевой версией системы. Приложение все еще может работать на более старых версиях (до версий, не меньших minSdkVersion). Поскольку Android развивается с каждой новой версией, то некоторые поведения и даже внешний вид приложения может измениться. Однако, если API level платформы выше, чем версия, указанная в targetSdkVersion приложения, система может включить обработки совместимости (compatibility behaviors), чтобы обеспечить работоспособность Вашего приложения так, как Вы этого ожидали. Вы можете запретить такие обработки совместимости, если укажете targetSdkVersion равным API level платформы Android, на которой приложение работает. Например, установка этого значения в "11" или более высокое значение позволит системе установить новую тему оформления по умолчанию (Holo) для Вашего приложения при работе на Android 3.0 или более новой, и также запретит режим совместимости экрана, когда программа будет работать на больших экранах (потому что поддержка API level 11 неявно подразумевает поддержку больших экранов). Имеется много разновидностей обеспечения совместимости (compatibility behaviors), которые система может разрешить, базируясь на значении этого атрибута. Некоторые из этих обработок (поведений, behaviors) описаны в соответствующей документации версии платформы, см. Build.VERSION_CODES . Чтобы обеспечить соответствие Вашего приложения каждому новому релизу Android, Вы должны увеличивать значение этого атрибута, чтобы оно соответствовало последнему API level, и затем необходимо полностью протестировать поведение приложения на этой новой версии платформы. Атрибут android:maxSdkVersion
представлен начиная с API Level 4. Это целое число, обозначающее максимальный API Level, на котором приложение может работать. На версиях Android 1.5, 1.6, 2.0 и 2.0.1 система проверяет значение этого атрибута, когда инсталлируется приложение, и когда приложение проверяется на совместимость после обновления системы. В любом случае, если атрибут приложения maxSdkVersion меньше API Level системы, то установка приложения будет запрещена. При проверке приложения на совместимость после обновления системы такой случай соответствует полному удалению приложения с устройства. Для иллюстрации того, как этот атрибут может повлиять на приложение после обновления системы, рассмотрим пример. Приложение декларировало maxSdkVersion="5" в своем манифесте, и было опубликовано на Google Play. Пользователь устройства Android 1.6 (API Level 4) загрузил и установил это приложение. После нескольких недель пользователь принял сообщение от системы over-the-air с предложением обновить систему до уровня Android 2.0 (API Level 5). После установки этого обновления система проверила атрибут приложения maxSdkVersion, и разрешила дальнейшее использование этого приложения. Приложение после этого работало нормально. Однако через некоторое время устройство приняло другое обновление системы Android 2.0.1 (API Level 6). После обновления система не разрешает работу приложения, так как API Level системы (6) теперь выше, чем максимальный уровень, который может поддержать приложение (5). Система делает приложение невидимым для пользователя, и удаляет его из устройства. Предупреждение: использование этого атрибута не рекомендуется. Во-первых, нет никакой потребности установить этот атрибут как средство блокирования развертывания Вашего приложения на новые версии платформы Android по мере их появления. Для Android декларируется полная обратная совместимость старых приложений для новых версий Android. Ваше приложение должно работать должным образом на всех новых версиях, если оно использует только стандартное API и следует лучшим правилам и практикам разработки. Во-вторых нужно помнить, что применение этого атрибута приведет к автоматическому удалению Вашего приложения с устройств пользователя, которые обновят свою систему на более высокий API Level, чем указано в атрибуте. Большинство устройств, на которых вероятно будет установлено Ваше приложение, получают периодические обновления системы на лету, по воздуху (over the air), так что Вы должны учитывать этот эффект перед тем, как установить этот атрибут для своего приложения. Будущие версии Android (вне Android 2.0.1) больше не будут проверять maxSdkVersion и принудительно применять его значение при установке или проверке совместимости приложения. Однако Google Play продолжит использовать этот атрибут как фильтр при предоставлении приложений, доступных для закачки пользователям. Элемент Если приложение может работать с различными конфигурациями устройства, необходимо включить в манифест отдельные элементы Вы можете задать любую комбинацию, содержаoe. следующие устройства reqFiveWayNav
- используйте значение true, если приложению требуется устройство ввода, поддерживающее навигацию вверх, вниз, влево, вправо, а также нажатие выделенного элемента. К таким устройствам относятся трекболы и D-pad. В принципе устарело Приложение не будет устанавливаться на устройстве, которое не соответствует заданной вами конфигурации. В идеале, вы должны разработать такое приложение, которое будет работать с любым сочетанием устройств ввода. В этом случае Элемент android.hardware.camera.front
— требуется аппаратная камера android.hardware.camera.autofocus
— требуется камера с автоматической фокусировкой Все параметры можно посмотреть в альма-матер . Элемент Для пущей наглядности приведу синтакс Определяет размеры и плотности экранов совместимые с вашим приложением. Только один элемент Как правило, вы не должны использовать этот элемент. Этот элемент объявляет формат сжатия одной GL текстуры поддерживаемой вашим приложением. Если ваше приложение поддерживает несколько форматов сжатия текстур, то вам необходимо использовать несколько этих элементов. Например: Элемент Элемент Дочерний элемент android:name
— имя класса. Имя должно включать полное обозначение пакета, но если имя пакета уже определено в корневом элементе android:label
— текстовая метка, отображаемая пользователю в заголовке Активности. Элемент При изменении языка, региона или аппаратной конфигурации Android прерывает работу всех приложений и затем запускает их повторно, перезагружая значения из ресурсов
. Подобное поведение не всегда уместно и желательно. Например, некоторые изменения конфигурации (ориентация экрана в пространстве, доступность клавиатуры) могут произойти только лишь из-за того, что пользователь повернул устройство или выдвинул клавиатуру
. Вы можете настраивать, каким образом ваше приложение будет реагировать на подобные изменения, обнаруживая их и выполняя собственные действия. Чтобы заставить Активность отслеживать изменения конфигурации при выполнении программы, добавьте в ее узел в манифесте атрибут android:configChanges
, указав, какие именно события хотите обрабатывать. Перечислим некоторые значения, с помощью которых можно описать изменения конфигурации: оrientation
— положение экрана изменено с портретного на альбомное (или наоборот); В некоторых случаях одновременно будут срабатывать несколько событий. Например, когда пользователь выдвигает клавиатуру, большинство устройств генерируют события keyboardHidden
и orientation
. Вы можете выбирать несколько событий, которые хотите обрабатывать самостоятельно, разделяя их символом |
. Наличие атрибута android:configChanges
отменяет перезапуск приложения при заданных изменениях конфигурации
. Вместо этого внутри Активности срабатывает метод onConfigurationChanged()
. Переопределите его, чтобы появилась возможность обрабатывать изменения в конфигурации. Используйте переданный объект Configuration
, чтобы получить новые значения. Не забудьте вызвать одноименный метод из родительского класса и перезагрузить измененные значения со всех ресурсов, которые используются внутри Активности. @Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
[ ... Обновите пользовательский интерфейс, используя данные из ресурсов... ]
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
[ ... Реакция на измененную ориентацию экрана... ]
}
if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
[ ... Реакция на выдвигание/задвигание клавиатуры... ]
}
}
Элемент Это означает, что эта Активность приложения является главной и когда система пришлет Intent для запуска приложения, эта Активность откроется по умолчанию. Этот атрибут определяет, что это приложение будет добавлено в директорию приложений на Android-устройстве. И будет отображаться в окне запуска приложений Application Launcher мобильного устройства. Элементы Тут все было описано очень кратко. Более подробно читаем в альма-матер.
Файл манифеста AndroidManifest.xml
предоставляет основную информацию о программе системе. Каждое приложение должно иметь свой файл AndroidManifest.xml
. Редактировать файл манифеста можно вручную, изменяя XML-код или через визуальный редактор Manifest Editor (Редактор файла манифеста), который позволяет осуществлять визуальное и текстовое редактирование файла манифеста приложения. Файл манифеста инкапсулирует всю архитектуру Android-приложения, его функциональные возможности и конфигурацию. В процессе разработки приложения вам придется постоянно редактировать данный файл, изменяя его структуру и дополняя новыми элементами и атрибутами. Корневым элементом манифеста является Элемент
Элемент Android:name
название разрешения
android:label
имя разрешения, отображаемое пользователю
android:description
описание разрешения
android:icon
значок разрешения
android:permissionGroup
определяет принадлежность к группе разрешений
android:protectionLevel
уровень защиты
Элемент Android:name
Наиболее распространенные разрешения Элемент Элемент Элемент Элемент Элемент Приложение не будет устанавливаться на устройстве, которое не соответствует заданной вами конфигурации. В идеале, вы должны разработать такое приложение, которое будет работать с любым сочетанием устройств ввода. В этом случае Элемент Android.hardware.camera
требуется аппаратная камера
android.hardware.camera.autofocus
требуется камера с автоматической фокусировкой
Можно переопределить требование по умолчанию, добавив атрибут required
со значением false
. Например, если вашей программе не требуется, чтобы камера поддерживала автофокус, то используйте вариант:
Элемент Возможные значения SmallScreen
как правило экраны QVGA
normalScreen
стандартные экраны HVGA и WQVGA
largeScreen
большие экраны
xlargeScreen
очень большие экраны, которые превосходят размеры планшетов
anyDensity
установите значение true
, если ваше приложение способно масштабироваться для отображения на экране с любым разрешением.
По умолчанию, для каждого атрибута установлено значение true
. Вы можете указать, какие размеры экранов ваше приложение не поддерживает.
Начиная с API 13 (Android 3), у тега появились новые атрибуты: Элемент Элемент Для этого класса зарегистрирован фильтр вызовов, определяющий, что это действие запущено в приложении (действие android:name=«android.intent.action.MAIN»). Определение категории (категория android:name=«android.intent.category.LAUNCHER») определяет, что это приложение добавлено в директорию приложений на Android-устройстве. Значения @ направляют файлы ресурсов, которые содержат актуальные значения. Это упрощает работу с разными ресурсами, такими как строки, цвета, значки.
Элемент При изменении языка, региона или аппаратной конфигурации Android прерывает работу всех приложений и затем запускает их повторно, перезагружая значения из ресурсов. Подобное поведение не всегда уместно и желательно. Например, некоторые изменения конфигурации (ориентация экрана в пространстве, доступность клавиатуры) могут произойти только лишь из-за того, что пользователь повернул устройство или выдвинул клавиатуру. Вы можете настраивать, каким образом ваше приложение будет реагировать на подобные изменения, обнаруживая их и выполняя собственные действия. Чтобы заставить Активность отслеживать изменения конфигурации при выполнении программы, добавьте в ее узел в манифесте атрибутandroid:configChanges
, указав, какие именно события хотите обрабатывать. Перечислим некоторые значения, с помощью которых можно описать изменения конфигурации: В некоторых случаях одновременно будут срабатывать несколько событий. Например, когда пользователь выдвигает клавиатуру, большинство устройств генерируют события keyboardHidden
и orientation
. Вы можете выбирать несколько событий, которые хотите обрабатывать самостоятельно, разделяя их символом |
. Наличие атрибута android:configChanges отменяет перезапуск приложения при заданных изменениях конфигурации. Вместо этого внутри активности срабатывает метод onConfigurationChanged()
. Переопределите его, чтобы появилась возможность обрабатывать изменения в конфигурации. Используйте переданный объект Configuration
, чтобы получить новые значения. Не забудьте вызвать одноименный метод из родительского класса и перезагрузить измененные значения со всех ресурсов, которые используются внутри активности.
На момент вызова метода, все данные из ресурсов будут обновлены, поэтому применять метод можно без опаски. Любые изменения конфигурации, которые не были явно помечены для обработки внутри вашего приложения, приведут к перезапуску активности, минуя вызов метода onConfigurationChanged()
. Каждый тег Элемент
Элемент
Элемент
добавляет спецификацию данных к фильтру намерений. Спецификация может быть только типом данных (атрибут mimeType), URI или ТИПОМ данных вместе с URI. Значение URI определяется отдельными атрибутами для каждой из его частей, т. е. URI делитСЯ на части: android:scheme, android:host, android:port, android:path или android:pathPrefix, android:pathPattern. Элемент Элемент Элемент Элемент Элемент Этот элемент имеет много атрибутов, определяющих имя, доступность, разрешения, процесс и т. д. Элемент Элемент Элемент Статья заимствована с http://developer.alexanderklimov.ru/Отображение функций в файле
Фильтры объектов Intent
Значки и метки
Разрешения
android.permission.READ_OWNER_DATA
android.permission.SET_WALLPAPER
android.permission.DEVICE_POWERБиблиотеки
Это делаю себе как памятку, ну и если кому еще пригодится то хорошо.
На рисунке ниже можно увидеть общую структуру файла манифеста и его элементов. Рисунок взят из книги Голощапова и не содержит некоторых элементов. Перевод описания недостающих элементов я сделал сам. Но их в принципе не так много.
Порядок расположения элементов, находящихся на одном уровне, произвольный. Все значения устанавливаются через атрибуты элементов. Элемент является основным элементом манифеста и содержит множество дочерних элементов, определяющих структуру и работу приложения. Элементы
android:name=’android.permission.READ_CONTACTS’
– доступ к базе данных контактов
android:description
— описание разрешения
android:icon
— значок разрешения
android:permissionGroup
— определяет принадлежность к группе разрешений
android:protectionLevel
— уровень защиты
reqHardKeyboard
- используйте значение true, если приложению нужна аппаратная клавиатура.
reqKeyboardType
- позволяет задать тип клавиатуры: nokeys, qwerty, twelvekey, undefined
reqNavigation
- укажите одно из значений: nonav, dpad, trackball, wheel или undefined, если требуется устройство для навигации
reqTouchScreen
- если требуется сенсорный экран, то используйте нужное значение из возможных вариантов: notouch, stylus, finger, undefined. Сейчас практически все устройства содержат сенсорный экран, поэтому тоже устарело
Система Андроид не читает этот элемент в файле манифеста, ни во время установки ни во время запуска приложения.
Этот элемент носит чисто информационный характер и используется только внешними сервисами такими как Google Play для фильтрации отображения вашего приложения в маркете. То есть если пользователь имеет параметры экрана отличные от указанных в этом элементе, то Google Play просто не покажет ему это приложение.
Все значения можно посмотреть по этой ссылке . На русском языке по этому параметру можно немного почитать .
Эти атрибуты элемента
keyboardHidden
— клавиатура выдвинута или спрятана;
fontScale
— пользователь изменил предпочтительный размер шрифта;
locale
— пользователь выбрал новые языковые настройки;
keyboard
— изменился тип клавиатуры; например, телефон может иметь 12-клавишную панель, при повороте которой появляется полноценная клавиатура;
touchscreen
или navigation
— изменился тип клавиатуры или способ навигации. Как правило, такие события не встречаются.
Любые изменения конфигурации, которые не были явно помечены для обработки внутри вашего приложения, приведут к перезапуску Активности, минуя вызов метода onConfigurationChanged
.
Элемент
Элемент
Элемент
добавляет спецификацию данных к фильтру намерений. Спецификация может быть только типом данных (атрибут mimeType), URI или типом данных вместе с URI. Значение URI определяется отдельными атрибутами для каждой из его частей, т.е. URI делится на части: android:scheme, android:host, android:port, android:path или android:pathPrefix, android:pathPattern.
Элемент
Элемент
Элемент
Элемент
Элемент
Этот элемент имеет много атрибутов, определяющих имя, доступность, разрешения, процесс и т. д.
Элемент
Элемент
Элемент Назначение файла
Общая структура манифеста
Описание
Атрибуты
xmlns:android
определяет пространство имен Android. Оно всегда одно и то же
package
определяет уникальное имя пакета приложения, которое вы задали при создании проекта. Android Marketplace проверяет уникальность при приеме приложения, поэтому рекомендуется использовать свое имя для избежания конфликтов с другими разработчиками. Например, я использую имя своего сайта в обратном порядке: ru.alexanderklimov.appname
android:versionCode
указывает на внутренний номер версии, используемый для сравнения версий программы. «versionCode» должен быть целым, и Android Market использует это для определения, предоставили ли вы новую версию, передавая триггеру обновления на устройствах, на которых установлено ваше приложение. Как правило. начинается с 1 и увеличивается на единицу, если вы выпускаете новую версию приложения.
android:versionName
указывает номер пользовательской версии. Можно использовать строку или строковый ресурс. Этот номер видит пользователь.
Атрибуты
android:minSdkVersion
определяет минимальный уровень API, требуемый для работы приложения. Система Android будет препятствовать тому, чтобы пользователь установил приложение, если уровень API системы будет ниже, чем значение, определенное в этом атрибуте. Вы должны всегда объявлять этот атрибут, например: android:minSdkVersion=»11″
. Вы можете ради интереса установить значение 7, а потом 11 и сравнить внешний вид приложения. Например, у младшей версии не будет отображаться ActionBar.
android:maxSDKVersion
позволяет определить самую позднюю версию, которую готова поддерживать ваша программа. Ваше приложение будет невидимым в Google Play для устройств с более свежей версией. Рекомендуется устанавливать в том случае, когда вы точно уверены, что приложение не будет корректно работать на новой платформе.
targetSDKVersion
позволяет указать платформу, для которой вы разрабатывали и тестировали приложение. Устанавливая значение для этого атрибута, вы сообщаете системе, что для поддержки этой конкретной версии не требуется никаких изменений.
Атрибуты
android:name
имя класса. Имя должно включать полное обозначение пакета, но т. к. имя пакета уже определено в корневом элементе Изменение конфигурации во время выполнения программы
@Override
public void onConfigurationChanged(Configuration _newConfig) {
super.onConfigurationChanged(_newConfig);
[ ... Обновите пользовательский интерфейс, используя данные из ресурсов... ]
if (_newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
[ ... Реакция на измененную ориентацию экрана... ]
}
if (_newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO) {
[ ... Реакция на выдвигание/задвигание клавиатуры... ]
}
}