El tutor de nuestro curso online de Desarrollo de Aplicaciones para Android, Víctor Ramírez Las,…
Archivo Android Manifest
3.
Archivo Android Manifest
Continuamos con los primeros pasos para la creación de una Aplicación Android. En esta publicación describiremos el archivo AndroidManifest.xml, un fichero indispensable en un proyecto Android que cada aplicación deberá contener (con ese mismo nombre) en su directorio raíz.
Este archivo mostrará información esencial acerca de la App, por lo que el sistema Android deberá acceder a él antes de compilar cualquier línea de código del proyecto. De manera resumida, cumple las siguientes funciones:
- Establece el nombre del package de la aplicación, para identificar de manera única a la aplicación.
- Permite definir los componentes de la aplicación, es decir, Activities, Services, Content Providers etc., estableciendo qué clases implementan cada componente.
- Determina que Activity será lanzada inicialmente.
- Declara el nivel mínimo de la API que Android requiere para la aplicación.
- Se declaran los permisos que necesita la aplicación para realizar determinadas tareas, cómo el acceso a contactos del teléfono o realizar llamadas de teléfono, accediendo a zonas restringidas de la API e interactuando con otras aplicaciones (ampliamos un poco este punto más abajo),
A continuación mostramos la estructura general del archivo AndroidManifest.xml, con los elementos que puede contener. Hemos incluido un breve comentario en cada uno para dar una primera idea de su función.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
<?xml version="1.0" encoding="utf-8"?> <manifest> //Elemento raíz del fichero. Debe contener un elemento <application> <uses-permission /> //Permisos que debe aceptar el usuario al instalar la App <permission /> //Permiso de seguridad para limitar acceso a un componente o funcionalidad específica <permission-tree /> //Nombre base para un árbol de permisos (ej: com.academiaandroid.proyecto.audio) <permission-group /> //Nombre para un grupo lógico de permisos afines <instrumentation /> //Permite monitorizar interacciones de la App con el sistema <uses-sdk /> //Compatibilidad de la App con una ó más versiones Android (nivel de APIs soportadas) <uses-configuration /> //HW y SW específico que necesita la App (por ejemplo, un teclado físico) <uses-feature /> //HW o SW que utiliza la App (ej: bluetooth, cámara...) <supports-screens /> //Tamaños de pantallas soportadas por la App <compatible-screens /> //Configuraciones de pantallas compatibles con la App <supports-gl-texture /> //Formatos de compresión de textura GL soportados <application> //Declaración de la Aplicación <activity> //Declaración de Activity <intent-filter> //Especifica tipo de Intents a los que puede responder <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> //Alias para la Activity <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> //Declaración de Servicio <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> //Declaración de Broadcast Receiver <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> //Declaración de Content Provider <grant-uri-permission /> <meta-data /> <path-permission /> </provider> <uses-library /> //Especifica librería compartida que debe ser enlazada </application> </manifest> |
En la siguiente lista se enumeran todos los elementos que pueden aparecer dentro de un archivo AndroidManifest.xml. Hay que tener en cuenta que estos son los únicos permitidos y que no podemos crear nuestros propios elementos o atributos.
Tienes una descripción detallada de cada uno de esos elementos en la web de Android Developers si quieres profundizar en ellos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<action> <activity> <activity-alias> <application> <category> <data> <grant-uri-permission> <instrumentation> <intent-filter> <manifest> <meta-data> <permission> <permission-group> <permission-tree> <provider> <receiver> <service> <supports-screens> <uses-configuration> <uses-feature> <uses-library> <uses-permission> <uses-sdk> |
Permisos en AndroidManifest
Como comentamos al inicio, una de las funciones del archivo AndroidManifest.xml es indicar los permisos que tiene la App. Cada aplicación que se ejecuta en Android, lo hace desde un entorno limitado. Si desea acceder a recursos del sistema o de otra aplicación, necesitará solicitar permisos de manera explícita, y dependiendo del tipo de permiso, el sistema lo concederá de manera automática o solicitará al usuario la aprobación de dicha solicitud.
Hasta la versión Android 6.0, la declaración de permisos de la App debía hacerse previamente en el AndroidManifest.xml, antes de su instalación y ejecución en el dispositivo. A partir de la versión Marshmallow, es posible declarar permisos de una aplicación en tiempo de ejecución, simplificando en gran medida el proceso de instalación de la aplicación.
En las siguientes líneas se muestra varios ejemplos de permisos que es posible declarar:
1 2 3 4 5 |
android.permission.CALL_EMERGENCY_NUMBERS android.permission.READ_OWNER_DATA android.permission.SET_WALLPAPER android.permission.DEVICE_POWER |
y finalmente la sintaxis completa de la implementación de un ejemplo concreto, en este caso el permiso para escribir en un almacenamiento externo, que se deberá añadir directamente al archivo AndroidManifest.xml dentro del elemento <manifest>:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.academiaandroid.interfazusuario"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- Permiso declarado para escritura en almacenamiento externo del dispositivo --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="18" /> </manifest> |
En la siguiente publicación detallaremos la construcción del fichero compilado ejecutable APK