Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
AndroidManifest.xml на платформе Android — это мощный файл, который позволяет описать функциональные возможности и требования приложения для Android. Но работать с ним непросто. Xamarin.Android помогает упростить работу, позволяя добавлять в классы настраиваемые атрибуты, которые будут использоваться для автоматического создания манифеста. Наша цель заключается в том, чтобы 99 % наших пользователей никогда не испытывали потребности вручную изменять AndroidManifest.xml.
AndroidManifest.xml создается в процессе сборки, а найденный в Properties/AndroidManifest.xml XML-код объединяется с XML, созданным на основе настраиваемых атрибутов. Итоговый файл AndroidManifest.xml помещается в подкаталог obj, например для отладочных сборок. Например, он может находиться в папке obj/Debug/android/AndroidManifest.xml. Используется стандартный процесс слияния. Настраиваемые атрибуты в коде используются для создания XML-элементов, и эти элементы вставляются в AndroidManifest.xml.
Основы
В процессе компиляции в сборках выполняется поиск классов, которые не являются abstract, наследуют от класса Activity и имеют объявленный атрибут [Activity]. На основе этих классов и атрибутов создается манифест. Рассмотрим следующий пример кода:
namespace Demo
{
public class MyActivity : Activity
{
}
}
В результате файл AndroidManifest.xml будет пустым. Если требуется <activity/> создать элемент, необходимо использовать [Activity] настраиваемый атрибут:
namespace Demo
{
[Activity]
public class MyActivity : Activity
{
}
}
Этот пример приводит к добавлению следующего фрагмента XML в файл AndroidManifest.xml:
<activity android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Атрибут [Activity] не влияет на типы abstract. Все типы abstract игнорируются.
Имя действия
Начиная с Xamarin.Android 5.1, имена типов для действий основаны на MD5SUM от имени экспортируемого типа с указанием сборки. Это позволяет предоставить одно и то же полное имя из двух разных сборок и не получить ошибку упаковки (до версии Xamarin.Android 5.1 имя типа действия по умолчанию составлялось из имени пространства имен и имени класса в нижнем регистре).
Если вы хотите переопределить это поведение по умолчанию и указать имя действия явным образом, используйте свойство Name:
[Activity (Name="awesome.demo.activity")]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:name="awesome.demo.activity" />
Примечание.
Свойство Name следует использовать только для поддержки обратной совместимости, так как такое переименование может замедлить поиск типов во время выполнения. Если у вас есть старый код, который ожидает, что в качестве имени типа для действия по умолчанию используется имя пространства имен и имя класса в нижнем регистре, воспользуйтесь рекомендациями по сохранению совместимости, касающимися имени вызываемой программы-оболочки.
Заголовок действия
По умолчанию Android присваивает приложению заголовок при выполнении.
Для этого используется значение /manifest/application/activity/@android:label.
В большинстве случаев это значение отличается от имени класса. Чтобы указать в приложении метку для заголовка окна, используйте свойство Label.
Например:
[Activity (Label="Awesome Demo App")]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity" />
Возможность запуска из средства выбора приложений
По умолчанию действие не отображается на экране запуска приложений Android. Это связано с тем, что в приложении может быть много действий. Вам не потребуется значок для каждого из них. Чтобы указать, какие из них должны запускаться через средство запуска приложений, используйте свойство MainLauncher. Например:
[Activity (Label="Awesome Demo App", MainLauncher=true)]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Значок действия
По умолчанию действию присваивается значок запуска, предоставляемый системой. Чтобы использовать пользовательский значок, добавьте нужный файл .png в папку Resources/drawable, задайте для него действие сборки AndroidResource и с помощью свойства Icon укажите этот файл в качестве значка. Например:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Разрешения
При добавлении разрешений в манифест Android (как описано в этой статье) такие разрешения записываются в файл Properties/AndroidManifest.xml.
Например, если задать разрешение INTERNET, то в Properties/AndroidManifest.xml будет добавлен следующий элемент:
<uses-permission android:name="android.permission.INTERNET" />
Отладка сборок автоматически задает некоторые разрешения для упрощения отладки (например INTERNET , и READ_EXTERNAL_STORAGE) — эти параметры задаются только в созданном obj/debug/android/AndroidManifest.xml и не отображаются, как включено в параметрах необходимых разрешений .
Например, если вы изучите созданный файл манифеста в obj/Debug/android/AndroidManifest.xml, то увидите следующие добавленные элементы разрешений:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
В версии сборки выпуска эти разрешения не включаются в манифест автоматически (obj/Debug/android/AndroidManifest.xml). Если вы обнаружите, что переключение на сборку выпуска приводит к потере приложения разрешения, которое было доступно в сборке отладки, убедитесь, что это разрешение явно задано в параметрах необходимых разрешений для приложения (см. раздел "Сборка > приложения Android в Visual Studio для Mac; см. раздел "Свойства > манифеста Android" в Visual Studio).
Дополнительные функции
Действия и функции намерения
Манифест Android предоставляет способ для описания возможностей действия. Это делается с помощью намерений и [IntentFilter] настраиваемый атрибут. Вы можете указать действия для своего действия с помощью конструктора ,IntentFilter конструктор, и какие категории соответствуют Свойство Categories. Необходимо указать хотя бы одно действие (именно поэтому действия предоставляются в конструкторе). [IntentFilter] может предоставляться несколько раз. При каждом его использовании в <activity/>создается отдельный элемент <intent-filter/>. Например:
[Activity (Label="Awesome Demo App", MainLauncher=true, Icon="@drawable/myicon")]
[IntentFilter (new[]{Intent.ActionView},
Categories=new[]{Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:icon="@drawable/myicon" android:label="Awesome Demo App"
android:name="md5a7a3c803e481ad8926683588c7e9031b.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.SAMPLE_CODE" />
<category android:name="my.custom.category" />
</intent-filter>
</activity>
Application, элемент
Кроме того, в манифесте Android можно объявлять свойства для всего приложения. Это делается с помощью элемента <application> и его аналога, настраиваемого атрибута Application. Обратите внимание, что это параметры уровня приложения (сборки), а не отдельные параметры для каждого действия. Как правило, свойства <application> объявляются для всего приложения, а затем переопределяются (по мере необходимости) для каждого действия.
Например, следующий атрибут Application, добавленный в AssemblyInfo.cs, означает, что приложение доступно для отладки, у него есть понятное для пользователя имя My App и в нем используется стиль Theme.Light в качестве темы по умолчанию для всех действий:
[assembly: Application (Debuggable=true,
Label="My App",
Theme="@android:style/Theme.Light")]
Это объявление приводит к созданию следующего фрагмента XML в файле obj/Debug/Android/AndroidManifest.xml:
<application android:label="My App"
android:debuggable="true"
android:theme="@android:style/Theme.Light"
... />
В этом примере все действия в приложении будут по умолчанию использовать стиль Theme.Light. Если задать для действия тему Theme.Dialog, то стиль Theme.Dialog будет применен только к этому действию. Все остальные действия в приложении будут использовать стиль по умолчанию Theme.Light, который задан в элементе <application>.
Элемент Application — не единственный способ настройки атрибутов <application>. Вместо этого вы можете вставлять атрибуты непосредственно в элемент <application> файла Properties/AndroidManifest.xml. Эти параметры объединяются в последний элемент <application> в файле obj/Debug/Android/AndroidManifest.xml. Обратите внимание, что содержимое Properties/AndroidManifest.xml всегда переопределяет данные, предоставленные пользовательскими атрибутами.
Есть множество атрибутов на уровне приложения, которые можно настроить в элементе <application>. Дополнительные сведения об этих параметрах см. в разделе документации по ApplicationAttribute, посвященном открытым свойствам.
Список настраиваемых атрибутов
- Android.App.ActivityAttribute: создает xml-фрагмент XML /manifest/application/activity
- Android.App.ApplicationAttribute: создает фрагмент XML /manifest/application
- Android.App.InstrumentationAttribute: создает фрагмент XML /manifest/инструментирования
- Android.App.IntentFilterAttribute: создает фрагмент XML //intent-filter
- Android.App.MetaDataAttribute: создает фрагмент XML //meta-data
- Android.App.PermissionAttribute: создает фрагмент XML //permission
- Android.App.PermissionGroupAttribute : создает xml-фрагмент //permission-group XML
- Android.App.PermissionTreeAttribute: создает фрагмент XML -дерева //permission-tree
- Android.App.ServiceAttribute: создает фрагмент XML /manifest/application/service
- Android.App.UsesLibraryAttribute: создает фрагмент XML /manifest/application/uses-library
- Android.App.UsesPermissionAttribute: создает xml-фрагмент XML /manifest/uses-permission
- Android.Content.BroadcastReceiverAttribute: создает фрагмент XML /manifest/application/receiver
- Android.Content.ContentProviderAttribute: создает фрагмент XML /manifest/application/provider
- Android.Content.GrantUriPermissionAttribute : создает xml-фрагмент XML /manifest/application/provider/grant-uri-permission XML