Condividi tramite


Manifesto dell'app Android

Ogni app .NET multipiattaforma dell'interfaccia utente (.NET MAUI) in Android ha un file di AndroidManifest.xml , che si trova nella cartella Platforms\Android , che descrive le informazioni essenziali sull'app per creare strumenti, il sistema operativo Android e Google Play.

Il file manifesto per l'app ANDROID .NET MAUI viene generato come parte del processo di compilazione MAUI .NET in Android. Questo processo di compilazione accetta il codice XML nel file Platforms\Android\AndroidManifest.xml e lo unisce a qualsiasi XML generato da attributi specifici nelle classi. Il file manifesto risultante è disponibile nella cartella obj . Ad esempio, è disponibile in obj\Debug\net8.0-android\AndroidManifest.xml per le build di debug in .NET 8.

Nota

Visual Studio 17.6+ include un editor che semplifica il processo di specificare i dettagli dell'app, la versione android di destinazione e le autorizzazioni necessarie in un file manifesto Android.

Generazione del manifesto

Tutte le app MAUI .NET hanno una MainActivity classe che deriva da Activity, tramite la MauiAppCompatActivity classe e che ha l'oggetto ActivityAttribute applicato. Alcune app possono includere classi aggiuntive che derivano da Activity e che hanno applicato .ActivityAttribute

In fase di compilazione, gli assembly vengono analizzati perabstract individuare classi non che derivano da Activity e che hanno applicato .ActivityAttribute Queste classi e attributi vengono usati per generare il manifesto dell'app. Si consideri il codice di esempio seguente:

using Android.App;

namespace MyMauiApp;

public class MyActivity : Activity
{
}

In questo esempio non viene generato alcun elemento nel file manifesto. Per generare un <activity/> elemento, è necessario aggiungere :ActivityAttribute

using Android.App;

namespace MyMauiApp;

[Activity]
public class MyActivity : Activity
{
}

In questo esempio viene aggiunto il frammento XML seguente al file manifesto:

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

Nota

ActivityAttribute non ha alcun effetto sui abstract tipi.

Nome dell'attività

Il nome del tipo di un'attività si basa sul controllo della ridondanza ciclico a 64 bit del nome completo dell'assembly del tipo esportato. In questo modo è possibile specificare lo stesso nome completo da due assembly diversi senza ricevere un errore di creazione del pacchetto.

Per eseguire l'override di questo valore predefinito e specificare in modo esplicito il nome dell'attività, usare la Name proprietà :

using Android.App;

namespace MyMauiApp;

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

In questo esempio viene generato il frammento XML seguente:

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

Nota

È consigliabile usare la proprietà solo per motivi di compatibilità con le versioni precedenti, in quanto la ridenominazione può rallentare la Name ricerca dei tipi in fase di esecuzione.

Uno scenario tipico per l'impostazione della Name proprietà è quando è necessario ottenere un nome Java leggibile per l'attività. Questo può essere utile se un'altra app Android deve essere in grado di aprire l'app o se hai uno script per avviare l'app e testare il tempo di avvio.

Avviare dalla selezione dell'app

Se l'app ANDROID .NET MAUI contiene più attività ed è necessario specificare quale attività deve essere avviata dall'utilità di avvio dell'app, usare la MainLauncher proprietà :

using Android.App;

namespace MyMauiApp;

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

In questo esempio viene generato il frammento XML seguente:

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

Autorizzazioni

Quando si aggiungono autorizzazioni a un'app Android, vengono registrate nel file manifesto. Ad esempio, se si imposta l'autorizzazione, l'elemento ACCESS_NETWORK_STATE seguente viene aggiunto al file manifesto:

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

Il modello di progetto dell'app .NET MAUI imposta le INTERNET autorizzazioni e ACCESS_NETWORK_STATE in Platforms\Android\AndroidManifest.xml, perché la maggior parte delle app richiede l'accesso a Internet. Se si rimuove l'autorizzazione INTERNET dal manifesto, le compilazioni di debug includeranno comunque l'autorizzazione nel file manifesto generato.

Suggerimento

Se si scopre che il passaggio a una build di versione causa la perdita di un'autorizzazione disponibile nella compilazione di debug, verificare di aver impostato in modo esplicito l'autorizzazione necessaria nel file manifesto.

Azioni e funzionalità delle finalità

Il file manifesto Android consente di descrivere le funzionalità dell'app. Questo risultato viene ottenuto tramite finalità e .IntentFilterAttribute È possibile specificare le azioni appropriate per l'attività con il IntentFilterAttribute costruttore e quali categorie sono appropriate con la Categories proprietà . È necessario specificare almeno un'attività, motivo per cui le attività vengono fornite nel costruttore. Un [IntentFilter] oggetto può essere fornito più volte e ogni utilizzo restituisce un elemento separato <intent-filter/> all'interno di <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
{
}

In questo esempio viene generato il frammento XML seguente:

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

Elemento Application

Il file manifesto Android offre anche un modo per dichiarare le proprietà per l'intera app. Questo risultato viene ottenuto tramite l'elemento <application> e la relativa controparte, ovvero .ApplicationAttribute In genere dichiari <application> le proprietà per l'intera app e quindi esegui l'override di queste proprietà in base alle esigenze.

Ad esempio, l'attributo seguente Application può essere aggiunto a MainApplication.cs per indicare che il nome leggibile dell'app è "My Maui App" e che usa lo Maui.SplashTheme stile come tema predefinito per tutte le attività:

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

Questa dichiarazione determina la generazione del frammento XML seguente in obj\Debug\net8.0-android\AndroidManifest.xml:

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

Nota

Le compilazioni di debug vengono impostate android:debuggable="true" automaticamente in modo che i debugger e altri strumenti possano collegarsi all'app. Tuttavia, non è impostato per le build di versione.

In questo esempio, per impostazione predefinita tutte le attività nell'app saranno lo Maui.SplashTheme stile. Se imposti il tema di un'attività su Maui.MyTheme, solo l'attività userà lo Maui.MyTheme stile mentre per impostazione predefinita qualsiasi altra attività nell'app sarà lo Maui.SplashTheme stile impostato nell'elemento <application> .

Non ApplicationAttribute è l'unico modo per configurare <application> gli attributi. È anche possibile inserire proprietà direttamente nell'elemento <application> del file manifesto. Queste proprietà vengono quindi unite nel file manifesto generato. Per altre informazioni, vedere la sezione delle proprietà di ApplicationAttribute.

Importante

Il contenuto di Platforms\Android\AndroidManifest.xml esegue sempre l'override dei dati forniti dagli attributi.

Barra del titolo dell'app

L'app Android ha una barra del titolo che visualizza un'etichetta. Il valore della $(ApplicationTitle) proprietà di compilazione, nel file di progetto dell'app MAUI .NET, viene visualizzato sulla barra del titolo. .NET MAUI lo include nel manifesto generato come valore di android.label:

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

Per specificare un'etichetta di attività sulla barra del titolo, usare la Label proprietà :

using Android.App;

namespace MyMauiApp;

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

In questo esempio viene generato il frammento XML seguente:

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

Icona app

Per impostazione predefinita, all'app verrà assegnata un'icona .NET. Per informazioni sulla specifica di un'icona personalizzata, vedere Modificare un'icona dell'app MAUI .NET.

Attributi

La tabella seguente illustra gli attributi .NET per Android che generano frammenti XML manifesto Android:

Attributo Descrizione
Android.App.ActivityAttribute Genera un frammento XML di attività .
Android.App.ApplicationAttribute Genera un frammento XML dell'applicazione .
Android.App.InstrumentationAttribute Genera un frammento XML di strumentazione .
Android.App.IntentFilterAttribute Genera un frammento XML filtro finalità.
Android.App.MetaDataAttribute Genera un frammento XML di metadati .
Android.App.PermissionAttribute Genera un frammento XML di autorizzazione .
Android.App.PermissionGroupAttribute Genera un frammento XML del gruppo di autorizzazioni.
Android.App.PermissionTreeAttribute Genera un frammento XML dell'albero delle autorizzazioni.
Android.App.ServiceAttribute Genera un frammento XML del servizio .
Android.App.UsesLibraryAttribute Genera un frammento XML della libreria uses.
Android.App.UsesPermissionAttribute Genera un frammento XML di autorizzazione utilizzata.
Android.Content.BroadcastReceiverAttribute Genera un frammento XML ricevitore .
Android.Content.ContentProviderAttribute Genera un frammento XML del provider .
Android.Content.GrantUriPermissionAttribute Genera un frammento XML grant-uri-permission .

Vedi anche