Compartir a través de


Manifiesto de la aplicación Android

Cada aplicación .NET Multi-platform App UI (.NET MAUI) en Android tiene un archivo AndroidManifest.xml, ubicado en la carpeta Plataforms\Android , que describe información esencial sobre la aplicación para compilar herramientas, el sistema operativo Android y Google Play.

El archivo de manifiesto de la aplicación .NET MAUI Android se genera como parte del proceso de compilación de .NET MAUI en Android. Este proceso de compilación toma el XML en el archivo Platforms\Android\AndroidManifest.xml y lo combina con cualquier XML que se genere a partir de atributos específicos en las clases. El archivo de manifiesto resultante se puede encontrar en la carpeta obj. Por ejemplo, se puede encontrar en obj\Debug\net8.0-android\AndroidManifest.xml para depurar compilaciones en .NET 8.

Nota:

Visual Studio 17.6+ incluye un editor que simplifica el proceso de especificar detalles de la aplicación, la versión de Android de destino y los permisos necesarios en un archivo de manifiesto de Android.

Generación del manifiesto

Todas las aplicaciones .NET MAUI tienen una clase MainActivity que deriva de Activity, a través de la clase MauiAppCompatActivity y que tiene aplicado ActivityAttribute. Algunas aplicaciones pueden incluir clases adicionales que derivan de Activity y que tienen aplicado ActivityAttribute.

En tiempo de compilación, los ensamblados se examinan en busca de clases no abstract que se derivan de Activity y que tienen aplicado ActivityAttribute. Estas clases y atributos se usan para generar el manifiesto de la aplicación. Por ejemplo, suponga el siguiente código:

using Android.App;

namespace MyMauiApp;

public class MyActivity : Activity
{
}

En este ejemplo no se genera nada en el archivo de manifiesto. Para que se genere un elemento <activity/>, deberás agregar ActivityAttribute:

using Android.App;

namespace MyMauiApp;

[Activity]
public class MyActivity : Activity
{
}

Este ejemplo hace que se agregue el siguiente fragmento XML al archivo de manifiesto:

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

Nota:

ActivityAttribute no tiene ningún efecto en los tipos abstract.

Nombre de la actividad

El nombre de tipo de una actividad se basa en la comprobación de redundancia cíclica de 64 bits del nombre completo del ensamblado del tipo que se va a exportar. Esto permite proporcionar el mismo nombre completo a partir de dos ensamblados diferentes y no obtener un error de empaquetado.

Si deseas invalidar este valor predeterminado y especificar explícitamente el nombre de la actividad, usa la propiedad Name:

using Android.App;

namespace MyMauiApp;

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

Este ejemplo produce el siguiente fragmento de XML:

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

Nota:

Debes utilizar la propiedad Name solo por motivos de compatibilidad con versiones anteriores, ya que este cambio de nombre puede ralentizar la búsqueda de tipos en tiempo de ejecución.

Un escenario típico para establecer la propiedad Name es cuando necesitas obtener un nombre Java legible para la actividad. Esto puede ser útil si otra aplicación Android necesita poder abrir la aplicación o si tiene un script para iniciar la aplicación y probar el tiempo de inicio.

Iniciar desde el selector de aplicaciones

Si la aplicación .NET MAUI Android contiene varias actividades y debes especificar qué actividad debe iniciarse desde el iniciador de aplicaciones, use la propiedad MainLauncher:

using Android.App;

namespace MyMauiApp;

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

Este ejemplo produce el siguiente fragmento de 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>

Permisos

Al agregar permisos a una aplicación Android, se registran en el archivo de manifiesto. Por ejemplo, si estableces el permiso ACCESS_NETWORK_STATE, se agrega el siguiente elemento al archivo de manifiesto:

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

La plantilla de proyecto de aplicación .NET MAUI establece los permisos INTERNET y ACCESS_NETWORK_STATE en Platforms\Android\AndroidManifest.xml, ya que la mayoría de las aplicaciones requieren acceso a Internet. Si quitas el permiso INTERNET del manifiesto, las compilaciones de depuración seguirán incluyendo el permiso en el archivo de manifiesto generado.

Sugerencia

Si al cambiar a la compilación de versión, la aplicación pierde un permiso que estaba disponible en la compilación de depuración, comprueba que has habilitado explícitamente este permiso en tu archivo de manifiesto.

Características y acciones de intención

El archivo de manifiesto de Android proporciona una manera de describir las funcionalidades de la aplicación. Esto se hace mediante intenciones y IntentFilterAttribute. Puedes especificar qué acciones son adecuadas para la actividad con el constructor IntentFilterAttribute y qué categorías son adecuadas con la propiedad Categories. Se debe proporcionar al menos una actividad, que es el motivo por el que se proporcionan las actividades en el constructor. Se puede proporcionar [IntentFilter] varias veces y cada una de ellas tiene como resultado un elemento <intent-filter/> independiente dentro de <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
{
}

Este ejemplo produce el siguiente fragmento de 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>

Elemento Application

El archivo de manifiesto de Android también proporciona una manera de declarar las propiedades de toda la aplicación. Esto se logra a través del elemento <application> y su homólogo, ApplicationAttribute. Normalmente, se declaran las propiedades <application> para toda la aplicación y, a continuación, se reemplazan estas propiedades, según sea necesario, en cada actividad.

Por ejemplo, el atributo Application siguiente se agrega a MainApplication.cs para indicar que el nombre legible para el usuario es "Mi aplicación MAUI" y que usa el estilo Maui.SplashTheme como tema predeterminado para todas las actividades:

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

Esta declaración hace que se genere el fragmento XML siguiente en obj/Debug/net8.0-android/AndroidManifest.xml:

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

Nota:

Las compilaciones de depuración establecen android:debuggable="true" automáticamente para que los depuradores y otras herramientas puedan asociarse a la aplicación. Sin embargo, no está establecido para las compilaciones de versión.

En este ejemplo, todas las actividades de la aplicación tendrán como valor predeterminado el estilo Maui.SplashTheme. Si estableces el tema de una actividad en Maui.MyTheme, solo esa actividad usará el estilo Maui.MyTheme, mientras que todas las demás actividades de la aplicación tendrán como valor predeterminado el estilo Maui.SplashTheme establecido en el elemento <application>.

ApplicationAttribute no es la única manera de configurar los atributos <application>. También puedes insertar propiedades directamente en el elemento <application> del archivo de manifiesto. Estas propiedades se combinan en el archivo de manifiesto generado. Para obtener más información, consulta la sección de propiedades de ApplicationAttribute.

Importante

El contenido de Platforms\Android\AndroidManifest.xml siempre se antepone los datos proporcionados por atributos.

Barra de título de la aplicación

La aplicación Android tiene una barra de título que muestra una etiqueta. El valor de la propiedad de compilación $(ApplicationTitle), en el archivo de proyecto de la aplicación .NET MAUI, se muestra en la barra de título. .NET MAUI lo incluye en el manifiesto generado como el valor de android.label:

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

Para especificar la etiqueta de actividades en la barra de título, usa la propiedad Label:

using Android.App;

namespace MyMauiApp;

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

Este ejemplo produce el siguiente fragmento de XML:

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

Icono de aplicación

De forma predeterminada, la aplicación recibirá un icono de .NET. Para obtener información sobre cómo especificar un icono personalizado, consulta Cambiar un icono de aplicación .NET MAUI.

Atributos

En la tabla siguiente se muestran los atributos de .NET para Android que generan fragmentos XML de manifiesto de Android:

Atributo Descripción
Android.App.ActivityAttribute Genera un fragmento XML de actividad.
Android.App.ApplicationAttribute Genera un fragmento XML de aplicación.
Android.App.InstrumentationAttribute Genera un fragmento XML de instrumentación.
Android.App.IntentFilterAttribute Genera un fragmento XML de filtro de intención.
Android.App.MetaDataAttribute Genera un fragmento XML de metadatos.
Android.App.PermissionAttribute Genera un fragmento XML de permisos.
Android.App.PermissionGroupAttribute Genera un fragmento XML de grupo de permisos.
Android.App.PermissionTreeAttribute Genera un fragmento XML de árbol de permisos.
Android.App.ServiceAttribute Genera un fragmento XML de servicio.
Android.App.UsesLibraryAttribute Genera un fragmento XML de uses-library.
Android.App.UsesPermissionAttribute Genera un fragmento XML de uses-permission.
Android.Content.BroadcastReceiverAttribute Genera un fragmento XML de receptor.
Android.Content.ContentProviderAttribute Genera un fragmento XML de proveedor.
Android.Content.GrantUriPermissionAttribute Genera un fragmento XML de grant-url-permission.

Consulte también