Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
У каждого приложения .NET Multi-platform App UI (.NET MAUI) на Android есть файл AndroidManifest.xml, расположенный в папке Platform\Android, в котором описываются основные сведения о приложении для создания инструментов, операционной системы Android и Google Play.
Файл манифеста для приложения .NET MAUI Android создается в рамках процесса сборки .NET MAUI в Android. Этот процесс сборки принимает XML в файле платформ\Android\AndroidManifest.xml и объединяет его с любым XML-кодом, созданным из определенных атрибутов в ваших классах. Полученный файл манифеста можно найти в папке obj. Например, его можно найти в obj\Debug\net8.0-android\AndroidManifest.xml для debug-сборок на .NET 8.
Заметка
Visual Studio 17.6+ включает редактор, упрощающий процесс указания сведений о приложении, целевой версии Android и необходимых разрешений в файле манифеста Android.
Создание манифеста
Все приложения .NET MAUI имеют класс MainActivity
, производный от Activity, через класс MauiAppCompatActivity
, к которому применяется ActivityAttribute. Некоторые приложения могут включать дополнительные классы, производные от Activity, к которым применяется ActivityAttribute.
Во время сборки сканируются сборки для классов, которые не являютсяabstract
, производны от Activity и к которым применен ActivityAttribute. Эти классы и атрибуты используются для создания манифеста приложения. Например, рассмотрим следующий код:
using Android.App;
namespace MyMauiApp;
public class MyActivity : Activity
{
}
Этот пример приводит к тому, что в файле манифеста не создается ничего. Чтобы создать элемент <activity/>
, необходимо добавить ActivityAttribute:
using Android.App;
namespace MyMauiApp;
[Activity]
public class MyActivity : Activity
{
}
Этот пример приводит к добавлению следующего фрагмента XML в файл манифеста:
<activity android:name="crc64bdb9c38958c20c7c.MyActivity" />
Заметка
ActivityAttribute не влияет на типы abstract
.
Название действия
Имя типа активности основано на 64-битной циклической избыточной проверке собранного квалифицированного имени экспортируемого типа. Это позволяет предоставить одно и то же полностью квалифицированное имя из двух разных сборок без возникновения упаковочной ошибки.
Чтобы переопределить это значение по умолчанию и явно указать имя действия, используйте свойство Name:
using Android.App;
namespace MyMauiApp;
[Activity (Name="companyname.mymauiapp.activity")]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:name="companyname.mymauiapp.activity" />
Заметка
Для обратной совместимости следует использовать только свойство Name
, так как такое переименование может замедлить поиск типов во время выполнения.
Типичный сценарий настройки свойства Name заключается в том, что необходимо получить удобочитаемое имя Java для вашего действия. Это может быть полезно, если другое приложение Android должно быть в состоянии открыть приложение или если у вас есть скрипт для запуска приложения и тестирования времени запуска.
Запуск из бирающего приложения
Если приложение .NET MAUI Android содержит несколько действий, и необходимо указать, какое действие должно быть запущено из средства запуска приложений, используйте свойство MainLauncher:
using Android.App;
namespace MyMauiApp;
[Activity (Label="My Maui App", MainLauncher = true)]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:label="My Maui App"
android:name="crc64bdb9c38958c20c7c.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Разрешения
При добавлении разрешений в приложение Android они записываются в файл манифеста. Например, если задать разрешение ACCESS_NETWORK_STATE
, в файл манифеста добавляется следующий элемент:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Шаблон проекта приложения .NET MAUI задает разрешения INTERNET
и ACCESS_NETWORK_STATE
в Платформах\Android\AndroidManifest.xml, так как для большинства приложений требуется доступ к Интернету. Если удалить разрешение INTERNET
из манифеста, сборки отладки по-прежнему будут включать разрешение в созданный файл манифеста.
Совет
Если вы обнаружите, что переключение на релизную сборку приводит к тому, что приложение теряет разрешение, доступное в отладочной сборке, убедитесь, что вы явно указали требуемое разрешение в файле манифеста.
Действия и функции намерения
Файл манифеста Android предоставляет способ описания возможностей приложения. Это достигается с помощью намерений и IntentFilterAttribute. Вы можете указать, какие действия подходят для действия с помощью конструктора IntentFilterAttribute и какие категории соответствуют свойству Categories. Необходимо предоставить как минимум одно действие, поэтому они и предоставляются в конструкторе.
[IntentFilter]
можно предоставить несколько раз, и каждое использование приводит к отдельному элементу <intent-filter/>
в <activity/>
:
using Android.App;
using Android.Content;
namespace MyMauiApp;
[Activity(Label = "My Maui App", MainLauncher = true)]
[IntentFilter(new[] {Intent.ActionView},
Categories = new[] {Intent.CategorySampleCode, "my.custom.category"})]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:label="My Maui App"
android:name="crc64bdb9c38958c20c7c.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>
Элемент приложения
Файл манифеста Android также предоставляет способ объявления свойств для всего приложения. Это достигается с помощью элемента <application>
и его аналога, ApplicationAttribute. Обычно вы объявляете <application>
свойства для всего приложения, а затем переопределяете эти свойства по мере необходимости для каждой активности.
Например, следующий атрибут Application
можно добавить в MainApplication.cs, чтобы указать, что имя приложения, доступное для чтения, — "My Maui App", и что он использует стиль Maui.SplashTheme
в качестве темы по умолчанию для всех действий:
using Android.App;
using Android.Runtime;
namespace MyMauiApp;
[Application(Label = "My Maui App", Theme = "@style/Maui.SplashTheme")]
public class MainApplication : MauiApplication
{
public MainApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership)
{
}
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
Это объявление приводит к созданию следующего фрагмента XML в obj\Debug\net8.0-android\AndroidManifest.xml:
<application android:label="MyMauiApp" android:theme="@style/Maui.SplashTheme" android:debuggable="true" ...>
Заметка
Отладочные сборки автоматически устанавливают android:debuggable="true"
, чтобы отладчики и другие средства могли подключаться к вашему приложению. Однако он не установлен для релизных сборок.
В этом примере все действия в приложении по умолчанию будут использовать стиль Maui.SplashTheme
. Если для темы действия задано значение Maui.MyTheme
, это действие будет использовать стиль Maui.MyTheme
, а другие действия в приложении по умолчанию будут использоваться в стиле Maui.SplashTheme
, заданном в элементе <application>
.
ApplicationAttribute — это не единственный способ настройки атрибутов <application>
. Вы также можете вставить свойства непосредственно в элемент <application>
файла манифеста. Затем эти свойства объединяются в созданный файл манифеста. Дополнительные сведения см. в разделе свойств ApplicationAttribute.
Важно
Содержимое платформ \Android\AndroidManifest.xml всегда переопределяет данные, предоставляемые атрибутами.
Строка заголовка приложения
В приложениях Android есть строка заголовка, отображающая метку. Значение свойства сборки $(ApplicationTitle)
в файле проекта приложения .NET MAUI отображается в строке заголовка. .NET MAUI включает его в созданный манифест в качестве значения android.label
:
<application android:label="My Maui App" ... />
Чтобы указать метку действий в строке заголовка, используйте свойство Label:
using Android.App;
namespace MyMauiApp;
[Activity (Label="My Maui App")]
public class MyActivity : Activity
{
}
В этом примере создается следующий фрагмент XML:
<activity android:label="My Maui App"
android:name="crc64bdb9c38958c20c7c.MyActivity" />
Значок приложения
По умолчанию вашему приложению будет предоставлен значок .NET. Информация о том, как указать пользовательский значок, см. в разделе Изменение значка приложения .NET MAUI.
Атрибуты
В следующей таблице показаны атрибуты .NET для Android, которые создают фрагменты XML манифеста Android: