Working with the Android Manifest
AndroidManifest.xml is a powerful file in the Android platform that allows you to describe the functionality and requirements of your application to Android. However, working with it is not easy. Xamarin.Android helps to minimize this difficulty by allowing you to add custom attributes to your classes, which will then be used to automatically generate the manifest for you. Our goal is that 99% of our users should never need to manually modify AndroidManifest.xml.
AndroidManifest.xml is generated as part of the build process, and the XML found within Properties/AndroidManifest.xml is merged with XML that is generated from custom attributes. The resulting merged AndroidManifest.xml resides in the obj subdirectory; for example, it resides at obj/Debug/android/AndroidManifest.xml for Debug builds. The merging process is trivial: it uses custom attributes within the code to generate XML elements, and inserts those elements into AndroidManifest.xml.
The Basics
At compile time, assemblies are scanned for non- abstract classes that derive from Activity and have the [Activity] attribute declared on them. It then uses these classes and attributes to build the manifest. For example, consider the following code:
This results in nothing being generated in AndroidManifest.xml. If you want an element to be generated, you need to use the [Activity] custom attribute:
This example causes the following xml fragment to be added to AndroidManifest.xml:
The [Activity] attribute has no effect on abstract types; abstract types are ignored.
Activity Name
Beginning with Xamarin.Android 5.1, the type name of an activity is based on the MD5SUM of the assembly-qualified name of the type being exported. This allows the same fully-qualified name to be provided from two different assemblies and not get a packaging error. (Before Xamarin.Android 5.1, the default type name of the activity was created from the lowercased namespace and the class name.)
If you wish to override this default and explicitly specify the name of your activity, use the Name property:
This example produces the following xml fragment:
You should use the Name property only for backward-compatibility reasons, as such renaming can slow down type lookup at runtime. If you have legacy code that expects the default type name of the activity to be based on the lowercased namespace and the class name, see Android Callable Wrapper Naming for tips on maintaining compatibility.
Activity Title Bar
By default, Android gives your application a title bar when it is run. The value used for this is /manifest/application/activity/@android:label . In most cases, this value will differ from your class name. To specify your app’s label on the title bar, use the Label property. For example:
This example produces the following xml fragment:
Launchable from Application Chooser
By default, your activity will not show up in Android’s application launcher screen. This is because there will likely be many activities in your application, and you don’t want an icon for every one. To specify which one should be launchable from the application launcher, use the MainLauncher property. For example:
This example produces the following xml fragment:
Activity Icon
By default, your activity will be given the default launcher icon provided by the system. To use a custom icon, first add your .png to Resources/drawable, set its Build Action to AndroidResource, then use the Icon property to specify the icon to use. For example:
This example produces the following xml fragment:
Permissions
When you add permissions to the Android Manifest (as described in Add Permissions to Android Manifest), these permissions are recorded in Properties/AndroidManifest.xml. For example, if you set the INTERNET permission, the following element is added to Properties/AndroidManifest.xml:
Debug builds automatically set some permissions to make debug easier (such as INTERNET and READ_EXTERNAL_STORAGE ) – these settings are set only in the generated obj/Debug/android/AndroidManifest.xml and are not shown as enabled in the Required permissions settings.
For example, if you examine the generated manifest file at obj/Debug/android/AndroidManifest.xml, you may see the following added permission elements:
In the Release build version of the manifest (at obj/Debug/android/AndroidManifest.xml), these permissions are not automatically configured. If you find that switching to a Release build causes your app to lose a permission that was available in the Debug build, verify that you have explicitly set this permission in the Required permissions settings for your app (see Build > Android Application in Visual Studio for Mac; see Properties > Android Manifest in Visual Studio).
Advanced Features
Intent Actions and Features
The Android manifest provides a way for you to describe the capabilities of your activity. This is done via Intents and the [IntentFilter] custom attribute. You can specify which actions are appropriate for your activity with the IntentFilter constructor, and which categories are appropriate with the Categories property. At least one activity must be provided (which is why activities are provided in the constructor). [IntentFilter] can be provided multiple times, and each use results in a separate element within the . For example:
This example produces the following xml fragment:
Application Element
The Android manifest also provides a way for you to declare properties for your entire application. This is done via the element and its counterpart, the Application custom attribute. Note that these are application-wide (assembly-wide) settings rather than per-Activity settings. Typically, you declare properties for your entire application and then override these settings (as needed) on a per-Activity basis.
For example, the following Application attribute is added to AssemblyInfo.cs to indicate that the application can be debugged, that its user-readable name is My App, and that it uses the Theme.Light style as the default theme for all activities:
This declaration causes the following XML fragment to be generated in obj/Debug/android/AndroidManifest.xml:
In this example, all activities in the app will default to the Theme.Light style. If you set an Activity’s theme to Theme.Dialog , only that Activity will use the Theme.Dialog style while all other activities in your app will default to the Theme.Light style as set in the element.
There are many application-wide attributes that you can configure in the element; for more information about these settings, see the Public Properties section of ApplicationAttribute.
Источник
Как изменить имя apk, отредактировав файл манифеста?
Я хочу изменить имя apk в рабочей области проекта. Как это сделать, отредактировав AndroidManifest.xml-файл?
11 ответов
в файле манифеста можно изменить только метку приложения. Если вы хотите изменить имя файла apk, вы должны изменить имя своего проекта. Для этого вы просто щелкните правой кнопкой мыши на своем проекте в окне Навигатора, выберите рефакторинг>переименовать и введите для него новое имя.
это изменяет имя проекта ANT в build.XML.
в Eclipse (Windows или Linux) щелкните правой кнопкой мыши корень папки проекта и переименуйте проект. АПК получит новое название.
перейти к манифесту.xml, где вы можете изменить имя android: label, чтобы изменить имя приложения образец: если имя приложения-hello world! и ты хочешь измениться к бандитской жизни. изменение android: label= » hello world!» к android: label = » thug life» это так просто, как я сказал
Я думаю, что можно изменить сгенерированное имя файла apk из XML Манифеста Android. Измените имя корневого пакета приложения в манифесте Android.XML. .. нужно немного подправить код, и теперь сгенерированный apk будет иметь другое имя.
в Eclipse на Windows, вы можете сделать это, щелкнув правой кнопкой мыши на корне приложения в Проводнике пакетов, выберите Android Tools, а затем переименовать пакет приложений.
щелкните правой кнопкой мыши на своем проекте — > перейдите в рефакторинг — >выберите Переименовать и дать имя файла. Он переименует файл apk.
Источник
Манифест приложения
Манифест — это набор правил, по которым работает приложение. Файл манифеста находится в корневой папке — AndroidManifest.xml — и содержит важную информацию, без которой система не сможет запустить приложение.
Основное содержимое манифеста:
- Имя пакета для приложения. Является идентификатором приложения.
- Описание возможностей компонентов приложения: Activity, Service, Broadcast Receiver.
- Процессы, в которых будут запускаться компоненты приложения.
- Разрешения, которые необходимо запросить у пользователя, чтобы у приложения был доступ к защищенным частям API, а также чтобы другие приложения могли обращаться к вашему приложению.
- Содержит список классов Instrumentation, которые при выполнении приложения предоставляют сведения о профиле и прочую информацию. Эти объявления присутствуют в файле манифеста только во время разработки и отладки приложения и удаляются перед его публикацией.
- Объявляет минимальный уровень API Android, необходимый для работы приложения.
- Перечисляет связанные библиотеки.
Основные правила манифеста:
Структура файла
Ниже представлена структура манифеста со всеми возможными элементами. А далее рассмотрим каждый элемент отдельно. Для быстрого перехода к интересующему элементу кликайте по содержанию справа.
Пространство имен Android, оно всегда одно и то же.
Корневой элемент манифеста. Является обязательным.
Разрешения, которые должны быть запрошены при установке приложения для его нормального функционирования.
В некоторых случаях данные разрешения могут повлиять на фильтрацию вашего приложения в Google Play. Например, если вы запрашиваете разрешение на использование камеры, то Google Play логично предположит, что для работы вашего приложения необходима камера и будет фильтровать устройства, на которых ее нет. Чтобы корректно управлять данной фильтрацией, нужно использовать .
Атрибуты:
- android:name — имя разрешения. Это может быть разрешение, определенное в элементе
данного приложения, разрешение, определенное в другом приложении или одно из стандартных системных разрешений.
Разрешения, которые должны запросить другие приложения для получения доступа к вашему приложению. Можно использовать существующие, либо создать собственные.
Атрибуты:
- android:name — имя разрешения, будет использоваться в коде для ссылки на разрешение. Имена должны быть уникальными, так как если имя вашего разрешения совпадёт с именем разрешения другого приложения (которое уже установлено пользователем), то система не разрешит пользователю установить ваше приложение.
- android:label — имя разрешения, отображаемое пользователю.
- android:description — описание, которое должно объяснять пользователю для чего текущее разрешение требуется.
- android:icon — иконка разрешения.
- android:permissionGroup — определяет принадлежность к группе разрешений. Значением этого атрибута является имя группы, которое должно быть объявлено в элементе
(в вашем или другом приложении).
Элемент позволяет приложению объявлять пространство имён разрешений, в которое оно может динамически во время выполнения добавлять новые разрешения.
Атрибуты:
- android:icon — иконка, которая будет отображаться для всех разрешений в дереве.
- android:label — имя группы (дерева разрешений).
- android:name — имя, которое будет добавляться как префикс всем разрешениям в древе. Должно быть уникальным, для этого рекомендуется, чтобы оно содержало более двух сегментов, разделенных точками.
Объявляет имя категории, в которую можно сгруппировать все логически связанные разрешения. Добавить разрешение в группу можно с помощью атрибута permissionGroup элемента
. Разрешения из одной группы в пользовательском интерфейсе отображаются вместе.
Атрибуты:
- android:description — описание группы, отображаемое пользователю. Должно быть полным и понятным.
- android:icon — иконка.
- android:label — имя группы, отображаемое пользователю.
- android:name — имя группы, которое используется в коде для назначения категории атрибуту permissionGroup элемента
Объявляет класс Instrumentation, который дает возможность отслеживать все взаимодействия, которые система выполняет с приложением. Обычно используется при отладке и тестировании приложения и удаляется из release-версии приложения.
Атрибуты:
- android:functionalTest — если true — класс Instrumentation будет работать как функциональный тест, если false — нет.
- android:handleProfiling — будет ли класс Instrumentation включать / выключать профилирование. True — будет включать / выключать, при этом позволяет нацеливаться на определенный набор операций, false — профилирование будет выполняться все время.
- android:icon — иконка, которая будет присвоена классу Instrumentation .
- android:label — заголовок для класса Instrumentation .
- android:name — полное имя класса, который реализует Instrumentation .
- android:targetPackage — приложение, с которым будет работать объект Instrumentation . Приложение идентифицируется по имени пакета, назначенному в его файле манифеста.
- android:targetProcesses — процессы, с которыми будет работать объект Instrumentation . Можно перечислить через запятую или указать «*» для взаимодействия со всеми процессами, которые заданы атрибутом android:targetPackage .
Совместимость приложения с указанной версией Android. Когда приложение будет устанавливаться, система сравнит указанный уровень API с API устройства. Также Google Play использует этот элемент, чтобы отфильтровывать устройства, которые не соответствуют указанному уровню API.
Атрибуты:
- android:minSdkVersion — минимальный уровень API, необходимый для работы приложения. Если значение не указать, то система будет думать, что ваше приложение поддерживает все уровни API. Поэтому этому атрибуту обязательно нужно задавать значение.
- android:targetSdkVersion — максимальный уровень API, под который приложение тестировалось. Этот атрибут помогает системе понять, можно ли использовать свежий функционал в приложении или оно может оказаться к нему не готовым. Помогает избежать ситуаций, когда после обновления версии API поменялись какие-либо ключевые значения от чего приложение может работать некорректно.
- android:maxSdkVersion — максимальный уровень API, который будет поддерживаться приложением. Если значение будет меньше, чем уровень API устройства, то система не позволит установить приложение. Если приложение было установлено, но позже устройство было обновлено до более высокого уровня API, чем указанный, то приложение перестанет отображаться, что фактически приравнивается к удалению приложения с устройства. Поэтому этот атрибут рекомендуется не указывать.
Требуемая для приложения аппаратная и программная конфигурация устройства. Например, можно указать, что для работы приложения требуется физическая клавиатура. Таким образом можно избежать ситуаций, когда приложение будет установлено на устройство, где оно не сможет работать. Как правильно без этого элемента можно обойтись и его даже не рекомендуют использовать, потому что приложение должно стремится к универсальности и совместимости на большинстве устройствах, а некоторые ограничения можно указать с помощью других атрибутов (менее жестких в плане ограничения устройств).
Атрибуты:
- android:reqFiveWayNav — если true , то приложению требуется устройство ввода, поддерживающее навигацию вверх, вниз, влево, вправо, а также нажатие выделенного элемента. К таким устройствам относятся трекболы и D-pad. В принципе устарело.
- android:reqHardKeyboard — если true , то нужна аппаратная клавиатура.
- android:reqKeyboardType — позволяет задать тип клавиатуры. Варианты:
- undefined — требование к наличию клавиатуры не определено.
- nokeys — приложению не требуется клавиатура.
- qwerty — требуется стандартная QWERTY-клавиатура.
- twelvekey — требуется клавиатура, состоящая из цифр и знаков звёздочки (*) и решетки (#) .
- android:reqNavigation — позволяет указать, какое навигационное устройство требуется приложению. Варианты:
- undefined — требование к навигации не определено.
- nonav — навигационное устройство не требуется.
- dpad — требуется d-pad.
- trackball — требуется трекбол.
- wheel — требуется навигационное колесо (интересно, что это).
- android:reqTouchScreen — позволяет задать тип сенсорного экрана. Варианты:
- undefined — требование не задано.
- notouch — сенсорный экран не требуется.
- stylus — требуется сенсорный экран, который управляется стилусом.
- finger — требуется сенсорный экран, которым можно управлять пальцами.
Объявляет одну или несколько аппаратных или программных функций, требуемых для работы приложения.
Атрибуты:
- android:name — имя аппаратной или программной функции. Имена стандартные, чувствительны к регистру.
- android:required — если true , то приложение не может функционировать без функции, заданной атрибутом name элемента .
- android:glEsVersion — версия OpenGL ES , требуемая для работы приложения.
Позволяет указать размеры экрана, которые поддерживаются приложением. Если размер экрана будет больше, чем поддерживается приложением, то включится режим совместимости, что не очень хорошо, так как этот режим может вызвать размытие интерфейса из-за неправильного масштабирования. Поэтому рекомендуется создавать свои макеты под каждый размер экрана. Кроме того, с помощью отдельного макета можно оптимизировать интерфейс, например, чтобы на экране отображалось два окна (двупанельный интерфейс). Как поддерживать разные размеры экранов описано документации здесь.
По умолчанию, для каждого атрибута установлено значение true , поэтому используйте этот элемент, чтобы указать какие экраны вы не поддерживаете.
Атрибуты:
- android:smallScreens
- android:normalScreens
- android:largeScreens
- android:xlargeScreens
- android:anyDensity
Данные атрибуты были добавлены в API 13 (Android 3.2):
- android:requiresSmallestWidthDp — позволяет указать минимальную ширину экрана (наименьшая сторона устройства), чтобы Google Play отфильтровывал неподходящие устройства.
- android:compatibleWidthLimitDp — позволяет указать максимальную наименьшую ширину экрана. Если же значение превысит заданное, то пользователю будет предложено включить режим совместимости.
- android:largestWidthLimitDp — позволяет указать максимальную наименьшую ширину экрана. Если же значение превысит заданное, то будет принудительно включен режим совместимости без возможности отключения.
Позволяет задать все возможные размеры экранов, с которыми совместимо приложение. Данный элемент может быть указан в манифесте только один раз, зато внутри него можно добавлять тег с указанием поддерживаемого размера экрана.
Этот элемент носит исключительно информационный характер. С помощью него Google Play фильтрует устройства с неподдерживаемыми экранами.
Конфигурация экрана, которая не указана в этом элементе, считается неподдерживаемой приложением.
Для тех же целей проще использовать элемент , так как в нем не нужно указывать конкретные размеры экранов, а достаточно выставить логическое значение для нужного атрибута.
Определяет формат сжатия текстур GL. Элемент является информационным, т.е. необходим Google Play для фильтрации устройств, которые не поддерживают заданные параметры.
Обязательный элемент манифеста, который содержит информацию о всех компонентах приложения (activity, service, receiver, provider), а также атрибуты, которые могут влиять на эти компоненты. В манифесте может быть только один элемент .
Дочерние элементы:
Атрибуты:
- android:allowTaskReparenting — позволяет activity перемещаться из task’а, который ее запустил, в task переднего плана, с которым activity имеет общее taskAffinity -значение. Если атрибут задан в теге , то оно применяется ко всем activity. Но можно задавать и для конкретной activity.
- android:allowBackup — позволяет указать будет ли выполняться резервное копирование приложения. По умолчанию true , если указать false , то приложение не будет обслуживаться сервисом Backup Manager — интерфейс, через который приложение запрашивает операции резервного копирования и восстановления.
- android:allowClearUserData — применимо только для системных приложений, для обычных приложений игнорируется. Позволяет приложению сбрасывать пользовательские данные.
- android:allowNativeHeapPointerTagging — вот, что я поняла, почитав про этот тег: он добавлен временно и позволяет отключить Pointer Tagging. Оставляю ссылку на документацию, может поможет.
- android:backupAgent — следует использовать, если приложение выполняет резервное копирование. Значением данного атрибута является подкласс класса BackupAgent , где указывается, что именно будет сохранено в облачном хранилище и восстановлено после реинсталляции приложения.
- android:backupInForeground — если значение true , то резервное копирование может производиться, когда приложение активно. Вообще система закрывает приложение, если идет резервное копирование, поэтому включение этого параметра может повлиять на работу приложения.
- android:banner — картинка, которая будет отображаться на главном экране Android TV. При использовании этого атрибута в элементе , картинка применится ко всем компонентам приложения. Можно задать индивидуальную картинку для каждой . Актуально только при разработке приложения для Android TV. Подробнее.
- android:debuggable — раньше этот тег использовался для того, чтобы запускать приложение в режиме отладки на реальном устройстве. На данный момент, если приложение запускает на реальном устройстве в режиме отладки, этот тег вставляется автоматически со значением true и также автоматически удаляется после завершения. В любом случае, этот тег нужно удалять из релизной версии.
- android:description — краткое описание приложения, отображаемое пользователю.
- android:directBootAware — включает режим Direct Boot, при котором приложение получает ограниченный доступ к файлам сразу после запуска системы, но до того, как пользователь разблокирует устройство. Может использоваться такими приложениями, как будильники, мессенджеры. Подробнее в статье из блога Google или в документации.
- android:enabled — если false , то система не может создавать экземпляры компонентов приложения. Не знаю какой смысл добавлять этот атрибут в элемент , но его можно использовать для отключения конкретного дочернего компонента, если он не поддерживается какой-либо версией Android. Пример.
- android:extractNativeLibs — если true (по умолчанию), то нативные библиотеки приложения будут храниться в сжатом виде в APK, а при установке извлекаться PackageManager’ом и помещаться в / data / app /. При этом размер APK будет меньше, так как библиотеки сжаты. Но приложение будет дольше устанавливаться и занимать больше места в установленном виде.
Если false (по умолчание, если версия Gradle 3.6.0 и выше), то нативные библиотеки будут хранится в APK в несжатом виде. Размер APK увеличится, но и занимаемое после установки пространство уменьшится. Подробнее. - android:fullBackupContent — значением атрибута является ссылка на xml файл, в котором содержатся правила для автоматического резервного копирования. Подробнее о том, как оформлять файл, можно почитать здесь. Этот атрибут не является обязательным, так как большинство файлов приложения и так включено в автоматическое резервное копирование. Здесь перечислены эти файлы.
- android:fullBackupOnly — данный атрибут используется, если в приложении реализован кастомный BackupAgent. В этом случае присваивается значение true — будет использовано автоматическое резервное копирование вместо key/value .
- android:gwpAsanMode — указывает следует ли использовать GWP-ASan — анализатор памяти, который позволяет находить и исправлять проблемы, вызванные небезопасной работой с памятью.
- android:hasCode — если приложение не содержит Java-кода, а полностью реализовано на основе программного интерфейса NDK API, то данного атрибуту необходимо установить значение false .
- android:hasFragileUserData — если true , то когда пользователь будет удалять приложение, ему будет предложено сохранить данные приложения.
- android:hardwareAccelerated — включает аппаратное ускорение для всего приложения. Если minSDK или targetSDK больше или равно 14, то значение по умолчанию true . Подробнее.
- android:icon — иконка для всего приложения. Если данный атрибут использовать внутри, например, activity, то у этой activity будет персональная иконка.
- android:isGame — является ли приложение игрой. Нужен системе для сортировки и группировки всех игр вместе.
- android:killAfterRestore — используется системными приложениями, пока не ясно с какой целью.
- android:largeHeap — используется, если приложению может понадобится расширение размера кучи.
- android:label — название приложения, отображаемое пользователю.
- android:logo — логотип приложения.
- android:manageSpaceActivity — когда мы просматриваем приложения через системные настройки, можно заметить, что у некоторых приложений (как правило системных) вместо кнопки “Очистить кэш” есть кнопка “Управление памятью” (или вроде того). При нажатии на эту кнопку открывается другое окно, в котором можно выбрать, какие именно данные удалить. Такую функцию можно добавить к любому приложению с помощью этого атрибута. Значением атрибута является имя подкласса activity, которую система должна запустить при нажатии на эту кнопку.
- android:name — имя подкласса Application. Зачем этот атрибут добавлять пока непонятно.
- android:networkSecurityConfig — задается имя xml -файла, который содержит конфигурацию сетевой безопасности.
- android:permission — имя разрешения, которое должно быть предоставлено для использования приложения. Применяется ко всем компонентам приложения.
- android:persistent — в документации неявно сформулировано, что данный атрибут могут использовать только системные приложения. Если приложение не является системным, то атрибут игнорируется. А предназначение атрибута следующее — позволяет запускать фоновую службу и предотвращать ее автоматическое уничтожение. Взято отсюда.
- android:process — позволяет указать процесс, в котором будет работать приложение. По умолчанию имя процесса соответствует имени пакета, заданного в теге . Можно использовать для запуска компонентов двух приложений в одном процессе, но при условии, что оба приложения подписаны одним сертификатом. Если данному атрибуту было присвоено имя, которое начинается с двоеточия, то создается приватный процесс конкретно для этого приложения. Если же имя начинается с маленькой буквы, то создается глобальный процесс, который можно использовать совместно с другими приложениями.
- android:restoreAnyVersion — если true , то BackupManager будет пытаться восстановить данные приложения из облачного хранилища, даже если текущая версия приложения не совпадает с версией, которая выполняла резервное копирование, что в свою очередь может указывать на несовместимость данных.
- android:requestLegacyExternalStorage — атрибут добавлен относительно недавно в связи с тем, что в Android 10 приложениям запретили неограниченное обращение к файлам в хранилище и, если я правильно поняла, этот тег позволяет обойти эту защиту. Тем не менее решение временно, просто дали время для внесения изменений.
- android:requiredAccountType — можно задать тип учетной записи, которая требуется для работы приложения (например, com.google).
- resizeableActivity — поддерживает ли приложение многооконный режим. Можно задать для конкретной activity. Если target API 24 и выше, то значение по умолчанию = true .
- android:restrictedAccountType — позволяет указать, что ограниченным профилям разрешен доступ к основной учетной записи. Ограниченные профили были введены для совместной работы с одной учетной записи, но с некоторыми ограничениями (без доступа к почте, игровому магазину, календарю итд.).
- android:supportsRtl — если true и targetSdkVersion — 17 и выше, то приложение будет поддерживать макеты “справа налево”.
- android:taskAffinity — указывается имя task’а. Позволяет изменять поведение activity, например, чтобы в одном приложении activity работали в разных task’ах или activity разных приложений работал в одном. Данный атрибут будет работать при следующих обстоятельствах:
- Intent, который запускает activity, содержит флаг FLAG_ACTIVITY_NEW_TASK .
- У запускаемой activity установлен атрибут allowTaskReparenting = true . Атрибут означает, что activity может перемещаться между task’ом, который ее вызвал, и task’ом, который указан в taskAfinity — в зависимости от того, какой task сейчас активен.
- android:testOnly — с помощью этого атрибута, можно указать, что текущее приложение только для целей тестирования. Такое приложение можно установить только через adb (Android Debug Bridge) и его нельзя опубликовать в Google Play.
- android:theme — устанавливает тему для всего приложения (указывается ссылка на ресурс типа style.xml ). Компоненты приложения могут переопределить этот атрибут и задать свои значения.
- android:uiOptions — позволяет разделить actionBar на 2 части, если в нем слишком много элементов. Например, при горизонтальной ориентации в actionBar’е места много, все элементы умещаются и он выглядит как обычно. Но при вертикальной он может разделиться на 2 части — верхнюю и нижнюю. В верхней части останется заголовок и иконка, а в нижнюю переместятся элементы меню. Можно указывать для конкретной activity.
- android:usesCleartextTraffic — данный атрибут позволяет обойти запрет на отправку запросов без шифрования (http вместо https).
- android:vmSafeMode — если true , то отключает ART AOT-компилятор.
Дочерние элементы:
Атрибуты:
- android:allowEmbedded — указывает, что activity может быть запущена как вложенный дочерний элемент другой activity. Например, это может понадобится при внедрении в приложение Bubbles и при разработки для Android Wear.
- android:allowTaskReparenting — позволяет activity перемещаться из task’а, который ее запустил, в task переднего плана, с которым activity имеет общее taskAffinity -значение.
- android:alwaysRetainTaskState — если значение этого атрибута для корневой activity = true , то стек не будет чиститься и полностью восстановится даже после длительного времени. Атрибут есть смысл указывать только для корневой activity, так как для всех остальных заданное значение будет игнорироваться.
- android:autoRemoveFromRecents — если данный атрибут задать нескольким activity и если эти activity будут запущены пользователем, то они поместятся в один task, который будет находится на экране до тех пор, пока пользователь не закроет последнюю activity в этом task’е. При этом task сам завершит свою работу, так сказать самоликвидируется. Атрибут отменяет действие флага FLAG_ACTIVITY_RETAIN_IN_RECENTS .
- android:banner — картинка, которая будет отображаться на главном экране Android TV. При использовании этого атрибута в элементе , картинка применится ко всем компонентам приложения. Можно задать индивидуальную картинку для каждой . Актуально только при разработке приложения для Android TV.
- android:clearTaskOnLaunch — если значение этого атрибута для корневой activity = true , то back stack будет чиститься моментально, как только пользователь покинет task. Полная противоположность alwaysRetainTaskState .
- android:colorMode — отображение activity в режиме широкой цветовой гаммы (для отображения более ярких цветов). Если устройство не поддерживает такой режим, то атрибут игнорируется.
- android:configChanges — в данном атрибуте можно перечислить, какие изменения в конфигурации activity будут игнорироваться, т.е. данные изменения в конфигурации не будут вести к пересозданию activity. Вместо этого activity вызовет метод onConfigurationChanged() . Использование данного атрибуты считается плохим тоном, так как изменения в конфигурации никак не обрабатываются. Данный атрибут можно спокойно использовать, если в приложении все ресурсы (макеты, картинки итд.) для всех ориентаций экрана одинаковы.
- android:directBootAware — включает режим Direct Boot, при котором конкретная activity получает ограниченный доступ к файлам сразу после запуска системы,но до того, как пользователь разблокирует устройство. Может использоваться такими приложениями, как будильники, мессенджеры. Подробнее в статье из блога Google или в документации.
- android:documentLaunchMode — позволяет указать каким образом новый экземпляр activity будет добавляться в task. Например, на экране обзора task’ов могут быть отображены несколько документов из одного приложения. Подробнее.
- android:enabled — если false , то система не может создавать экземпляр activity. Можно использовать для отключения activity, которая не поддерживается какой-либо версией Android (хотя конкретный пример использования сложно представить).
- android:excludeFromRecents — если true , а также если атрибут задан для корневой activity, то task не будет отображаться на обзорном экране последних запущенный приложений. Подробнее.
- android:exported — если true , то activity может быть запущена компонентами других приложений, если false — activity может быть запущена только компонентами одного и того же приложения, либо приложениями с одинаковыми идентификаторами пользователя. В любом случае для запуска activity нужно знать ее точное имя класса.
- android:finishOnTaskLaunch — атрибут похож на clearTaskOnLaunch , но в отличии от него из task’а будет удалена та activity, для которой значение этого атрибута = true. Т.е. activity будет частью task’а только для текущего сеанса и если пользователь свернет task, то activity будет из него удалена.
- android:hardwareAccelerated — включает аппаратное ускорение для текущей activity. Подробнее.
- android:icon — иконка для текущей activity.
- android:immersive — включает режим погружения, в котором приложение отображается на весь экран, скрывая системные панели и панель навигации. Для того, чтобы увидеть эти панели пользователю нужно свайпнуть от верхнего или нижнего края экрана к центру.
- android:label — заголовок activity, отображаемый пользователю. Если не задан, то используется заголовок, установленный в элементе .
- android:launchMode — данный атрибут можно указать для каждой activity в манифесте. Имеет несколько значений:
- standard — при запуске activity создается новый экземпляр в стеке. Activity может размещаться в стеке несколько раз.
- singleTop — activity может располагаться в стеке несколько раз. Новая запись в стеке создается только в том случаи, если данная activity не расположена в вершине стека. Если она на данный момент является вершиной, то у нее сработает onNewIntent() метод, но она не будет пересоздана.
- singleTask — создает новый task и устанавливает activity корневой для него, но только в случае, если экземпляра данной activity нет ни в одном другом task’е. Если activity уже расположена в каком либо task’е, то откроется именно тот экземпляр и вызовется метод onNewIntent() . Она в свое время становится главной, и все верхние экземпляры удаляются, если они есть. При этом, если activity была вытащена из task’а в бэкграунде, то мы переключимся на этот task и его стек. Только один экземпляр такой activity может существовать.
- singleInstance — тоже что и singleTask , но для данной activity всегда будет создаваться отдельный task и она будет в ней корневой. Данный флаг указывает, что activity будет одним и единственным членом своего task’а.
- android:lockTaskMode — определяет, как система будет отображать activity в режиме блокировки задач (lock task mode). Подробнее о режиме здесь. Возможные значения:
- normal — значение по умолчанию. Task’и могут быть добавлены только с помощью метода startLockTask() .
- never — этот режим доступен только для системных приложений, для всех остальных игнорируется. В этом режиме task’и не запускаются и пользователь не может их закрепить на обзорном экране.
- if_whitelisted — если activity прошла авторизацию у Device Policy Controller, то применяется значение always , если не прошла — normal .
- always — режим доступен только для системных приложений.
- android:maxRecents — указывается максимальное количество task’ов, в которых может быть запущена эта activity. Если значение было превышено, то система начнет удалять task’и. По умолчанию — 16, максимальное количество — 50 (25 на устройствах с низким объемом памяти). Значение не может быть нулевым.
- android:maxAspectRatio — максимальное соотношение сторон, которое поддерживает приложение. Получается путем деления длинной стороны на короткую. Атрибут игнорируется, если задан атрибут resizeableActivity = true , так как это означает, что activity поддерживает любой размер экрана.
- android:multiprocess — если true , то activity будет запускаться в новом процессе. На stackoverflow пишут, что надо забыть о существовании этого атрибута.
- android:name — полное имя класса, который реализует activity.
- android:noHistory — если true , то к остановленной activity нельзя вернуться, так как она удаляется из стека. Удобно использовать, если при запуске приложения нужно показать лого и больше к нему не возвращаться.
- android:parentActivityName — указывается имя класса activity, которая будет открыта, если пользователь нажмет на стрелку “UP”. Например, данному атрибуту задано значение MainActivity , а пользователь находится в SettingsActivity . В этом случае, если он нажмет на стрелку “UP”, будет открыта MainActivity .
- android:persistableMode — можно указать, в каком виде будет сохранена activity в task’е при перезагрузке устройства. Если корневая activity в task’е устанавливает данному атрибуту значение persistRootOnly , то сохраняется только корневая activity. Иначе будут сохранены все activity, которым в данном атрибуте задано значение persistAcrossReboots .
- android:permission — имя разрешения, которое должно быть предоставлено для запуска activity или для получения от activity какой-либо информации.
- android:process — позволяет указать процесс, в котором будет работать activity. По умолчанию имя процесса соответствует имени пакета, заданного в теге . Но можно переопределить этот атрибут и распределить компоненты приложения по нескольким процессам.
- android:relinquishTaskIdentity — …
- resizeableActivity — может ли пользователь запустить данную activity в многооконном режиме. Если target API 24 и выше, то значение по умолчанию = true .
- android:screenOrientation — в какой ориентации будет отображаться activity на экране. Атрибут игнорируется, если приложение запущено в многооконном режиме. Все возможные значения здесь.
- android:showForAllUsers — отображается ли activity, если текущий пользователь отличается от пользователя, который ее запустил.
- android:stateNotNeeded — позволяет перезапустить activity без сохранения ее состояния. Т.е. при перезапуске не будет вызван метод onSaveInstanceState() , а в onCreate() будет передано значение NULL . Например, можно использовать для стартового экрана, чтобы избежать удаления из-за какого-либо сбоя.
- supportsPictureInPicture — поддерживает ли activity режим “картинка в картинке”. Это такой многооконный режим, в основном предназначенный для просмотра видео. Позволяет пользователю смотреть видео в маленьком окошке в углу экрана и одновременно переключаться и работать с другими приложениями.
- android:taskAffinity — устанавливается имя task’а. Используется для группировки activity, например, чтобы в одном приложении activity работали в разных task’ах или activity разных приложений работал в одном. Данный атрибут будет работать при следующих обстоятельствах:
- Intent, который запускает activity, содержит флаг FLAG_ACTIVITY_NEW_TASK .
- У запускаемой activity установлен атрибут allowTaskReparenting = true . Атрибут означает, что activity может перемещаться между task’ом, который ее вызвал, и task’ом, который указан в taskAfinity — в зависимости от того, какой task сейчас активен.
- android:theme — указывается ссылка на тему activity. Если данный атрибут не задан, то наследуется от одноименного атрибута в элементе . Если и он не задан, то используется системная тема.
- android:uiOptions — позволяет разделить actionBar на 2 части, если в нем слишком много элементов. Например, при горизонтальной ориентации в actionBar’е места много, все элементы умещаются и он выглядит как обычно. Но при вертикальной он может разделиться на 2 части — верхнюю и нижнюю. В верхней части останется заголовок и иконка, а в нижнюю переместятся элементы меню.
- android:windowSoftInputMode — указывается, как activity взаимодействует с экранной клавиатурой. Например, можно уменьшить окно, чтобы клавиатура поместилась или просто сдвинуть содержимое окна, тем самым освободив место для клавиатуры. Можно указывать несколько значений, разделяя их вертикальной линией | . Со всеми значениями можно ознакомиться здесь.
Данный элемент задает activity псевдоним и в манифесте должен следовать сразу после этой activity. Данный тег обязательно должен находится внутри элемента .
Когда мы разрабатываем приложение, то периодически можем менять названия классов, изменять activity, которая будет запускаться первой итд. И вроде ничего в этом страшного нет, но пользователя может смутить, например, исчезновения иконки приложения с главного экрана (потому что мы ранее изменили имя стартовой activity). Чтобы этого избежать используется данный элемент. Т.е. мы можем стартовой activity присвоить псевдоним и при запуске приложения система будет осуществлять поиск этой activity именно по псевдониму, а не по имени класса, который ее реализует. И если мы назначим стартовой другую activity, то пользователь уже не потеряет иконку на главном экране, так как псевдоним остался без изменений.
На эту тему есть интересная статья.
Дочерние элементы:
Атрибуты:
Данный элемент позволяет записать какие-либо данные по типу “ключ-значение”. Доступ к этим данным можно получить из всего приложения (если объявлены в внутри тега ), либо можно передать необходимые для работы данные конкретной activity (объявляется внутри тега ).
Количество элементов неограничено. Все их значения в итоге будут собраны в один объект Bundle, а получить эти значения можно с помощью PackageItemInfo.metaData .
Например, в приложении используются уникальные шрифты. Чтобы избежать задержек при запуске приложения, хотелось бы загружать их предварительно. Для этого создается файл в ресурсах, в котором перечисляются эти шрифты:
Источник