Manifeste de l’application Android

Chaque application de .NET Multi-platform App UI (.NET MAUI) sur Android a un fichier AndroidManifest.xml, situé dans le dossier Platforms\Android, qui décrit les informations essentielles sur votre application pour créer des outils, le système d’exploitation Android et Google Play.

Le fichier manifeste de votre application Android .NET MAUI est généré dans le cadre du processus de génération .NET MAUI sur Android. Ce processus de génération prend le code XML dans le fichier Platforms\Android\AndroidManifest.xml et le fusionne avec n’importe quel code XML généré à partir d’attributs spécifiques sur vos classes. Le fichier manifeste résultant se trouve dans le dossier obj. Par exemple, il se trouve dans obj\Debug\net8.0-android\AndroidManifest.xml pour les versions debug sur .NET 8.

Remarque

Visual Studio 17.6+ inclut un éditeur qui simplifie le processus de spécification des détails de l’application, de la version Android cible et des autorisations requises dans un fichier manifeste Android.

Génération du manifeste

Toutes les applications .NET MAUI ont une classe MainActivity qui dérive de Activity, via la classe MauiAppCompatActivity, et qui a le ActivityAttribute appliqué à celle-ci. Certaines applications peuvent inclure des classes supplémentaires dérivées de Activity et qui ont ActivityAttribute d’appliqué.

Au moment de la génération, les assemblys sont analysés pour les classes non-abstract qui dérivent de Activity et qui ont ActivityAttribute d’appliqué. Ces classes et attributs sont utilisés pour générer le manifeste de l’application. Considérons par exemple le code suivant :

using Android.App;

namespace MyMauiApp;

public class MyActivity : Activity
{
}

Cet exemple ne génère rien dans le fichier manifeste. Pour qu’un élément <activity/> soit généré, vous devez ajouter le ActivityAttribute :

using Android.App;

namespace MyMauiApp;

[Activity]
public class MyActivity : Activity
{
}

Cet exemple entraîne l’ajout du fragment XML suivant au fichier manifeste :

<activity android:name="crc64bdb9c38958c20c7c.MyActivity" />

Remarque

ActivityAttribute n’a aucun effet sur les types abstract.

Nom de l’activité

Le nom du type d’une activité est basé sur la vérification de redondance cyclique 64 bits du nom qualifié d’assembly du type exporté. Cela permet de fournir le même nom complet qualifié à partir de deux assemblys différents sans recevoir d’erreur d’empaquetage.

Pour remplacer cette valeur par défaut et spécifier explicitement le nom de votre activité, utilisez la propriété Name :

using Android.App;

namespace MyMauiApp;

[Activity (Name="companyname.mymauiapp.activity")]
public class MyActivity : Activity
{
}

Cet exemple produit le fragment XML suivant :

<activity android:name="companyname.mymauiapp.activity" />

Remarque

Vous devez uniquement utiliser la propriété Name pour des raisons de compatibilité descendante, car un changement de nom peut ralentir la recherche de type au moment de l’exécution.

Un scénario classique pour définir la propriété Name est lorsque vous devez obtenir un nom Java lisible pour votre activité. Cela peut être utile si une autre application Android doit être en mesure d’ouvrir votre application, ou si vous avez un script pour lancer votre application et tester le temps de démarrage.

Lancer à partir du sélecteur d’application

Si votre application Android .NET MAUI contient plusieurs activités et que vous devez spécifier quelle activité doit être lancée à partir du lanceur d’applications, utilisez la propriété MainLauncher :

using Android.App;

namespace MyMauiApp;

[Activity (Label="My Maui App", MainLauncher = true)]
public class MyActivity : Activity
{
}

Cet exemple produit le fragment XML suivant :

<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>

Autorisations

Lorsque vous ajoutez des autorisations à une application Android, elles sont enregistrées dans le fichier manifeste. Par exemple, si vous définissez l’autorisation ACCESS_NETWORK_STATE, l’élément suivant est ajouté au fichier manifeste :

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Le modèle de projet d’application .NET MAUI définit les autorisations INTERNET et ACCESS_NETWORK_STATE dans Platforms\Android\AndroidManifest.xml, car la plupart des applications nécessitent un accès à Internet. Si vous supprimez l’autorisation INTERNET de votre manifeste, les versions debug incluent toujours l’autorisation dans le fichier manifeste généré.

Conseil

Si vous constatez que le passage à un build de mise en production entraîne la perte d’une autorisation disponible dans la version debug, vérifiez que vous avez explicitement défini l’autorisation requise dans votre fichier manifeste.

Actions et fonctionnalités d’intention

Le fichier manifeste Android vous permet de décrire les fonctionnalités de votre application. Cela est obtenu par le biais d’Intentions et des IntentFilterAttribute. Vous pouvez spécifier les actions appropriées pour votre activité avec le constructeur IntentFilterAttribute et les catégories appropriées avec la propriété Categories. Au moins une activité doit être fournie, c’est pourquoi les activités sont fournies dans le constructeur. Un [IntentFilter] peut être fourni plusieurs fois, et chaque utilisation entraîne un élément <intent-filter/> distinct dans le <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
{
}

Cet exemple produit le fragment XML suivant :

<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>

Élément d’application

Le fichier manifeste Android vous permet également de déclarer des propriétés pour l’ensemble de votre application. Ceci est obtenu via l’élément <application> et son équivalent, le ApplicationAttribute. En règle générale, vous déclarez des propriétés <application> pour l’ensemble de votre application, puis remplacez ces propriétés selon les besoins d’une activité.

Par exemple, l’attribut Application suivant peut être ajouté à MainApplication.cs pour indiquer que le nom lisible par l’utilisateur de l’application est « Mon application Maui » et qu’il utilise le style Maui.SplashTheme comme thème par défaut pour toutes les activités :

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();
}

Cette déclaration entraîne la génération du fragment XML suivant dans obj\Debug\net8.0-android\AndroidManifest.xml :

<application android:label="MyMauiApp" android:theme="@style/Maui.SplashTheme" android:debuggable="true" ...>

Remarque

Les versions debug définissent automatiquement android:debuggable="true" afin que les débogueurs et d’autres outils puissent être attachés à votre application. Toutefois, il n’est pas défini pour les builds de mise en production.

Dans cet exemple, toutes les activités de l’application ont le style Maui.SplashTheme par défaut. Si vous définissez le thème d’une activité sur Maui.MyTheme, seule cette activité utilisera le style Maui.MyTheme, tandis que toutes les autres activités de votre application auront le style Maui.SplashTheme par défaut défini dans l’élément <application>.

Le ApplicationAttribute n’est pas la seule façon de configurer les attributs <application>. Vous pouvez également insérer des propriétés directement dans l’élément <application> du fichier manifeste. Ces propriétés sont ensuite fusionnées dans le fichier manifeste généré. Pour plus d’informations, consultez la section propriétés de ApplicationAttribute.

Important

Le contenu de Platforms\Android\AndroidManifest.xml remplace toujours les données fournies par les attributs.

Barre de titre de l’application

L’application Android a une barre de titre qui affiche une étiquette. La valeur de la propriété de build $(ApplicationTitle), dans votre fichier projet d’application .NET MAUI, s’affiche dans la barre de titre. .NET MAUI l’inclut dans le manifeste généré comme la valeur de android.label :

<application android:label="My Maui App" ... />

Pour spécifier une étiquette d’activités dans la barre de titre, utilisez la propriété Label :

using Android.App;

namespace MyMauiApp;

[Activity (Label="My Maui App")]
public class MyActivity : Activity
{
}

Cet exemple produit le fragment XML suivant :

<activity android:label="My Maui App"
          android:name="crc64bdb9c38958c20c7c.MyActivity" />

Icône d’application

Par défaut, votre application a une icône .NET. Pour plus d’informations sur la spécification d’une icône personnalisée, consultez Modifier l’icône d’une application .NET MAUI.

Attributs

Le tableau suivant présente les attributs .NET pour Android qui génèrent des fragments XML de manifeste Android :

Attribut Description
Android.App.ActivityAttribute Génère un fragment XML activity.
Android.App.ApplicationAttribute Génère un fragment XML application.
Android.App.InstrumentationAttribute Génère un fragment XML instrumentation.
Android.App.IntentFilterAttribute Génère un fragment XML intent-filter.
Android.App.MetaDataAttribute Génère un fragment XML meta-data.
Android.App.PermissionAttribute Génère un fragment XML permission.
Android.App.PermissionGroupAttribute Génère un fragment XML permission-group.
Android.App.PermissionTreeAttribute Génère un fragment XML permission-tree.
Android.App.ServiceAttribute Génère un fragment XML service.
Android.App.UsesLibraryAttribute Génère un fragment XML uses-library.
Android.App.UsesPermissionAttribute Génère un fragment XML uses-permission.
Android.Content.BroadcastReceiverAttribute Génère un fragment XML receiver.
Android.Content.ContentProviderAttribute Génère un fragment XML provider.
Android.Content.GrantUriPermissionAttribute Génère un fragment XML grant-uri-permission.

Voir aussi