
Si te estás lanzando al mundo del desarrollo móvil, te habrás dado cuenta de que hay un archivo que es el corazón de cualquier proyecto: el AndroidManifest.xml. Este documento no es un simple requisito formal, sino que funciona como la carta de presentación de tu aplicación ante el sistema operativo Android y la tienda de Google Play, detallando todo lo que la app es y lo que necesita para respirar.
Básicamente, sin este archivo ubicado en la raíz de los orígenes del proyecto, tu app simplemente no existiría para el teléfono. Es el encargado de comunicar la arquitectura interna, desde qué pantallas tiene hasta qué permisos solicita, permitiendo que las herramientas de compilación y el propio dispositivo sepan exactamente cómo gestionar la ejecución del software.
Fundamentos y Elementos Raíz del Manifiesto

Para empezar, el elemento raíz siempre es la etiqueta <manifest>. Aquí es donde se define el espacio de nombres de Android mediante el atributo xmlns:android, el cual debe mantenerse invariable. Además, es fundamental configurar el atributo package, que sirve como el identificador único y global de tu aplicación; si cambias este nombre tras publicar la app, los usuarios no podrán actualizarla ya que el sistema la reconocerá como una app distinta.
Dentro de este nodo principal, también encontramos información sobre el versionado. El versionCode es un número entero interno que ayuda al sistema a saber qué versión es más reciente, mientras que el versionName es la cadena de texto que ven los usuarios en la tienda de aplicaciones. Si usas Android Studio, gran parte de esto se gestiona automáticamente, aunque siempre es bueno saber qué ocurre bajo el capó.
Gestión de Componentes y el Nodo Application
El elemento <application> es, sin duda, uno de los pilares del archivo. En él se agrupan todos los componentes que forman la app. Es vital recordar que solo puede existir una etiqueta application en todo el documento y que debe ser el último elemento dentro del nodo manifest. Aquí definimos aspectos globales como el icono de la aplicación, la etiqueta de texto que identifica la app y el tema visual predominante.
Un detalle curioso es el atributo android:allowBackup. Si lo dejamos en true, el sistema Android realizará copias de seguridad de los datos de la app automáticamente. Además, en este apartado es donde se declaran los componentes específicos, como las actividades, los servicios y los receptores de emisión. Si te olvidas de registrar una clase de actividad aquí, el sistema lanzará un error y no podrá iniciar la pantalla correspondiente.

Actividades y el Poder de los Intent Filters
Las actividades son los controladores de las pantallas. Para declararlas, usamos la etiqueta <activity>. El atributo android:name es obligatorio y debe indicar la ruta completa de la clase Java o Kotlin. Un truco común es usar un punto al principio (por ejemplo, .MainActivity), lo que hace que el sistema adjunte automáticamente el prefijo del paquete definido en el build.gradle.
Pero, ¿cómo sabe Android qué pantalla abrir primero? Aquí entran los <intent-filter>. Estos filtros describen las capacidades de un componente. Si queremos que una actividad sea la puerta de entrada, añadimos una acción de tipo MAIN y una categoría LAUNCHER. De este modo, el sistema crea el icono de acceso directo en el menú de aplicaciones del dispositivo, permitiendo incluso crear tu propio launcher personalizado.
Además, los filtros de intents permiten que la app responda a peticiones implícitas. Por ejemplo, puedes configurar tu actividad para que se active cuando el usuario quiera ver o editar un tipo de dato específico, como un archivo de notas o una URL, definiendo la etiqueta <data> y la acción VIEW o EDIT.
Seguridad, Permisos y Compatibilidad de Hardware

La seguridad es un tema serio en Android. Para acceder a funciones sensibles como la cámara, los contactos o la red, debemos usar la etiqueta <uses-permission>. Aunque a partir de Android 6.0 algunos permisos se solicitan en tiempo de ejecución, todos deben estar declarados previamente en el manifiesto. Si no lo haces, la app simplemente no tendrá acceso a esas funciones y fallará, similar a cuando intentamos limitar el acceso de una app a fotos específicas.
Por otro lado, no todos los teléfonos son iguales. Para evitar que alguien instale tu app en un dispositivo que no tiene, por ejemplo, un sensor de brújula, utilizamos <uses-feature>. Al marcar el atributo android:required="true", Google Play filtrará los dispositivos compatibles, asegurando que la app solo se instale donde realmente pueda funcionar.
Finalmente, la compatibilidad de software se gestiona con <uses-sdk>. Aquí definimos la minSdkVersion, que es la versión mínima del sistema operativo necesaria para ejecutar la app. Es importante señalar que, si utilizas Android Studio, los valores definidos en el archivo build.gradle anularán lo que escribas en el manifiesto, por lo que se recomienda centralizar esta configuración en el script de Gradle.
Convenciones y Reglas de Escritura del XML
Para que el manifiesto no dé errores, hay que seguir ciertas normas. La mayoría de los elementos pueden aparecer varias veces, pero los atributos siempre empiezan con el prefijo android:. Un punto clave es el uso de recursos: en lugar de escribir el nombre de la app directamente, usamos @string/app_name. Esto permite que el texto cambie según el idioma del usuario sin tener que tocar el código.
En cuanto al orden, los elementos del mismo nivel (como actividades y servicios) no suelen importar, pero hay excepciones. Por ejemplo, un <activity-alias> debe ir siempre después de la actividad original. Además, para evitar conflictos con caracteres especiales en las cadenas de texto, se recomienda usar la doble barra invertida para escapar saltos de línea o caracteres Unicode.
Tener un dominio total sobre el AndroidManifest.xml implica comprender que este archivo es el vínculo técnico entre el código fuente y el sistema operativo, donde se gestionan desde los permisos y la compatibilidad de hardware hasta el despliegue de componentes y la visibilidad de la aplicación en el ecosistema móvil.
.png)