¿Qué es el AndroidManifest?
El AndroidManifest.xml es el archivo de configuración central de tu app. Antes de que el sistema Android pueda ejecutar cualquier componente de tu app, necesita saber que existe — y eso se hace declarándolo en el Manifest.
Está en app/src/main/AndroidManifest.xml. Es un archivo XML que el sistema lee en tiempo de instalación y de ejecución.
Estructura general
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- Permisos que la app necesita -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MiApp">
<!-- Componentes de la app van acá -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".DetalleActivity"
android:exported="false" />
</application>
</manifest>
Declarar Activities
Cada Activity que crees debe estar declarada en el Manifest. Si no lo hacés, el sistema lanza una ActivityNotFoundException cuando intentás abrirla.
<activity
android:name=".DetalleActivity"
android:label="Detalle"
android:exported="false"
android:screenOrientation="portrait" />
android:name— nombre de la clase. El punto inicial es shorthand para el package de la app.android:exported— sitrue, otras apps pueden abrir esta Activity. Para Activities internas siemprefalse.android:screenOrientation— forzar orientación (opcional).android:label— título que aparece en la toolbar y en el recents.
Obligatorio desde Android 12Toda Activity con un <intent-filter> debe declarar explícitamente android:exported="true" o "false". Si no lo hacés, el build falla.
Permisos
Si tu app necesita acceder a recursos protegidos del sistema (internet, cámara, ubicación, contactos), debés declarar los permisos necesarios:
<!-- Permiso normal: se otorga automáticamente al instalar -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Permiso peligroso: hay que pedirlo en runtime -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Los permisos "normales" (como INTERNET) se otorgan solos. Los "peligrosos" (cámara, ubicación, micrófono, contactos) hay que pedirlos en runtime con la Permission API — el sistema muestra un diálogo al usuario.
Regla de oroPedí solo los permisos que realmente necesitás. Google Play revisa los permisos declarados y una app con permisos injustificados puede ser rechazada o penalizada en el ranking.
Actividad principal (Launcher)
El sistema sabe cuál es la Activity que se abre al tocar el ícono de la app por el <intent-filter> especial:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
Solo una Activity de tu app debería tener este intent-filter. Esta es la que el sistema lanza como punto de entrada.
Errores comunes
- ActivityNotFoundException: olvidaste declarar la Activity en el Manifest.
- SecurityException: intentás usar un permiso que no declaraste (ej: hacer una llamada sin
CALL_PHONE). - Build error "android:exported": falta declarar exported en una Activity con intent-filter (Android 12+).