Diferencia entre revisiones de «Usuario:ManuelRomero/Manifest»
De WikiEducator
(→El fichero Manifest) |
|||
(2 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
− | {{:Usuario:ManuelRomero/Android/nav}} | + | {{:Usuario:ManuelRomero/Android/Manifest/nav}} |
<br> | <br> | ||
===Componentes en una aplicación Android=== | ===Componentes en una aplicación Android=== | ||
Línea 76: | Línea 76: | ||
</source> | </source> | ||
− | + | ===Atributos del elemento manifest=== | |
;xmlns | ;xmlns | ||
:'''''xml''''' '''''n'''''ame'''''s'''''pace | :'''''xml''''' '''''n'''''ame'''''s'''''pace | ||
:Define el namesapace de android y siempre debe tener el valor "http://schemas.android.com/apk/res/android" | :Define el namesapace de android y siempre debe tener el valor "http://schemas.android.com/apk/res/android" | ||
+ | ;'''''pakage''''' | ||
+ | :Nombre del paquete raiz de nuestra aplicación | ||
+ | :Este nombre tiene que ser único en el market | ||
+ | :Se usa un nombre de dominio escrito al revés para evitar posibles conflictos con otros desarrollos | ||
− | + | ;versionCode | |
− | + | :Número que se debe incrementar cada vez que actualizamos nuestra aplicacion en el market | |
− | + | :Este número es seguido por el market para ver la versión más reciente de una aplicación ''número más alto'' | |
− | + | :Este número no se muestra al usuario en el market | |
− | + | ;versionName | |
− | + | :Es lo que se muestra en el market | |
− | + | :Podemos poner lo que queramos | |
− | + | ;sharedUserId | |
− | + | :El nombre del ID de usuario de Linux que será compartido por otras aplicaciones | |
− | + | :Quien es el propietario de este proceso | |
− | + | ;sharedUserLabel | |
− | + | ||
+ | ;installLocation | ||
+ | :Donde debe ser instalada nuestra aplicación por defecto | ||
+ | :solo funcionan en versiones 2.2 o superior las anteriores las ignora | ||
+ | :Valores '''''android:installLocation=["auto" | "internalOnly" | "preferExternal"]''''' | ||
+ | ::auto : Puede ser instalado en el dispositivo externo, pero por defecto la almacenará en el dispositivo interno | ||
+ | ::internalOnly :Sólo se puede instalar en el dispositivo interno | ||
+ | ::preferExternal :Se instalará en el dispositivo externo (tarjeta SD)por defecto pero si hay problemas se puede instalar en el dispositivo interno. | ||
+ | *Ejemplo | ||
<Source lang=xml> | <Source lang=xml> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | <manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
Línea 103: | Línea 115: | ||
</source> | </source> | ||
− | + | ===Elemento application=== | |
− | + | ;Sintaxis | |
− | + | <source lang=xml> | |
− | + | <application android:allowTaskReparenting=["true" | "false"] | |
− | + | android:backupAgent="string" | |
− | < | + | android:debuggable=["true" | "false"] |
− | + | android:description="string resource" | |
− | + | android:enabled=["true" | "false"] | |
− | + | android:hasCode=["true" | "false"] | |
− | + | android:hardwareAccelerated=["true" | "false"] | |
+ | android:icon="drawable resource" | ||
+ | android:killAfterRestore=["true" | "false"] | ||
+ | android:largeHeap=["true" | "false"] | ||
+ | android:label="string resource" | ||
+ | android:logo="drawable resource" | ||
+ | android:manageSpaceActivity="string" | ||
+ | android:name="string" | ||
+ | android:permission="string" | ||
+ | android:persistent=["true" | "false"] | ||
+ | android:process="string" | ||
+ | android:restoreAnyVersion=["true" | "false"] | ||
+ | android:taskAffinity="string" | ||
+ | android:theme="resource or theme" | ||
+ | android:uiOptions=["none" | "splitActionBarWhenNarrow"] > | ||
+ | . . . | ||
+ | </application> | ||
</source> | </source> | ||
− | *Atributos de la | + | *Analizaremos sólo el atributo ico y label |
− | ** | + | *Atributos cuyos valores son recursos del sistema |
− | * | + | ===Atributos icon, label === |
− | * | + | [[Imagen:AtributosApplication.png]] |
+ | ;icon | ||
+ | :Es el icono de la aplicación para el market | ||
+ | :También será para lanzar nuestra aplicación en el emulador o móvil | ||
+ | ;label | ||
+ | *String que se va a mostrar para nuestra aplicación en el lanzado de la aplicación | ||
+ | *Barra de título de nuestra aplicación | ||
+ | |||
+ | ===Atributo debuggable=== | ||
+ | *Lo normal es tener este atributo a true | ||
+ | *Cuando se vaya a publicar en el market pasarlo a false | ||
+ | |||
+ | |||
+ | ===Activity=== | ||
+ | *Una aplicación android por lo menos ha de tener un activity | ||
+ | ;Sintaxis | ||
<source lang=xml> | <source lang=xml> | ||
− | + | <activity android:allowTaskReparenting=["true" | "false"] | |
− | + | android:alwaysRetainTaskState=["true" | "false"] | |
− | + | android:clearTaskOnLaunch=["true" | "false"] | |
− | + | android:configChanges=["mcc", "mnc", "locale", | |
+ | "touchscreen", "keyboard", "keyboardHidden", | ||
+ | "navigation", "screenLayout", "fontScale", "uiMode", | ||
+ | "orientation", "screenSize", "smallestScreenSize"] | ||
+ | android:enabled=["true" | "false"] | ||
+ | android:excludeFromRecents=["true" | "false"] | ||
+ | android:exported=["true" | "false"] | ||
+ | android:finishOnTaskLaunch=["true" | "false"] | ||
+ | android:hardwareAccelerated=["true" | "false"] | ||
+ | android:icon="drawable resource" | ||
+ | android:label="string resource" | ||
+ | android:launchMode=["multiple" | "singleTop" | | ||
+ | "singleTask" | "singleInstance"] | ||
+ | android:multiprocess=["true" | "false"] | ||
+ | android:name="string" | ||
+ | android:noHistory=["true" | "false"] | ||
+ | android:parentActivityName="string" | ||
+ | android:permission="string" | ||
+ | android:process="string" | ||
+ | android:screenOrientation=["unspecified" | "user" | "behind" | | ||
+ | "landscape" | "portrait" | | ||
+ | "reverseLandscape" | "reversePortrait" | | ||
+ | "sensorLandscape" | "sensorPortrait" | | ||
+ | "sensor" | "fullSensor" | "nosensor"] | ||
+ | android:stateNotNeeded=["true" | "false"] | ||
+ | android:taskAffinity="string" | ||
+ | android:theme="resource or theme" | ||
+ | android:uiOptions=["none" | "splitActionBarWhenNarrow"] | ||
+ | android:windowSoftInputMode=["stateUnspecified", | ||
+ | "stateUnchanged", "stateHidden", | ||
+ | "stateAlwaysHidden", "stateVisible", | ||
+ | "stateAlwaysVisible", "adjustUnspecified", | ||
+ | "adjustResize", "adjustPan"] > | ||
+ | . . . | ||
+ | </activity> | ||
</source> | </source> | ||
+ | *En nuestra aplicación aparece la siguiente información que de momento es la que vamos a analizar | ||
+ | |||
− | |||
− | |||
<source lang=xml> | <source lang=xml> | ||
<activity | <activity | ||
Línea 137: | Línea 214: | ||
</activity> | </activity> | ||
</source> | </source> | ||
− | |||
− | </ | + | |
+ | ===Atributos de activity=== | ||
+ | ;name | ||
+ | :Es el nombre de la clase '''''activity''''' | ||
+ | :normalmente se especifica en crudo no referenciado al ficheor '''''string.xml''''' | ||
+ | ;label | ||
+ | *El string que va a aparecer en la bara de título de la actividad | ||
+ | *Será usado en junto con el icono del lanzador | ||
+ | *Si no se especifica aparecería el label de la aplicación | ||
+ | ;screenOrientation | ||
+ | <source lang=xml> | ||
+ | android:screenOrientation=["unspecified" | "user" | "behind" | | ||
+ | "landscape" | "portrait" | | ||
+ | "reverseLandscape" | "reversePortrait" | | ||
+ | "sensorLandscape" | "sensorPortrait" | | ||
+ | "sensor" | "fullSensor" | "nosensor"] | ||
+ | </source> | ||
+ | *Valores deseados para ciertas activity son landscape o portrait esto obliga a que use esta orienteación | ||
+ | *En otros casos o si se deja vacío la orientación cambiará indicado por el acelerómetro | ||
+ | *Esto provocará que nuestra actividad se destuya y luego restaurada, cosa que seguramente no queremos que ocurra. | ||
+ | |||
+ | |||
+ | ;configChanges | ||
+ | *Esto también puede provocar un cambio en la pantalla | ||
+ | *A la vez destruye y vuelve a recostruir nuestra actividad | ||
+ | <source lang=xml> | ||
+ | android:configChanges=["mcc", "mnc", "locale", | ||
+ | "touchscreen", "keyboard", "keyboardHidden", | ||
+ | "navigation", "screenLayout", "fontScale", "uiMode", | ||
+ | "orientation", "screenSize", "smallestScreenSize"] | ||
+ | |||
+ | *Se pueden elegir varios, por ejemplo | ||
+ | </source> | ||
+ | android:configChanges="keyboard|keyboardHidden|orientation" | ||
+ | </source> | ||
+ | *En este caso estamos diciendo que cuando aparezca o desaparezca el teclado | ||
+ | *O cuando cambie la orienteación estos cambios si se producen ejecutándose nuestra actividad | ||
+ | *Los queremos gestionar nostros y no que el sistema destruya u luego recargue nuestra actividad. | ||
+ | |||
+ | ===Intent=== | ||
+ | *Sirve para especificar que activity o service inicia nuestra aplicación | ||
+ | *intent-filter tenemos muchos | ||
+ | **action | ||
+ | esta activity va a ser un punto de entrada para nuestra aplicació´n | ||
+ | **category | ||
+ | que esta activity sea añadida con su icono al lanzador de aplicaciones | ||
+ | *Ambos sólo tienen un atributo name | ||
+ | *En ambos casos como name le pasamos un '''''intent''''' | ||
+ | <source lang=xml> | ||
+ | <intent-filter> | ||
+ | <action android:name="android.intent.action.MAIN" /> | ||
+ | <category android:name="android.intent.category.LAUNCHER" /> | ||
+ | </intent-filter> | ||
</source> | </source> | ||
− | + | *Sólo una activity debe tener estas dos etiquetas | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
===Lista de atributos=== | ===Lista de atributos=== |
Última revisión de 08:38 19 feb 2013
Componentes en una aplicación Android
- ACTIVITY
- INTENT
- SERVICE
- BROADCAST RECEIVER
- CONTENT PROVIDER
- VIEW
- WIDGET
- Los cuantro primeros son muy importantes
- Casi siempre van a estar presente en una aplicación o desarrollo
Activity
- Componente principal de la interfaz gráfica
- Representa cada una de las pantalla de nuestra aplicación
Service
- Son servicios o procesos ejecutados en segundo plano
- No disponen de interfaz gráfica
- Por ejemplo un objeto reloj o cargar información en una base de datos
Content Provider
- Permite compartir datos entre aplicaciones
- No necesitamos mostrar la forma en la que hacemos las cosas a otras aplicaciones
Broadcast Receiver
- Detecta mensajes y eventos generados por el sistema y reacciona ante ellos
- Pueden recibir mensajes de objetos Intends
- Por ejemplo batería baja o se ha recibido un mensaje
View
- Componentes básicos con los construimos nuestras aplicaciones
- Existen muchos componentes de este tipo: Botones, Listas desplegables
Widget
- Elementos visuales interactivos
- Tienen comportamiento propio
Intent
- Elementos u objetos que permiten que exista comunicación entre actividades de una aplicación
- También se pueden comunicar otros objetos descritos anteriormente
El fichero Manifest
- Cada proyecto tiene un fichero AndroidManifext.xml
- Definiremos información sobre nuestra aplicación
- Datos de versionado y nombre de nuestra aplicacion
- Los componentes de nuestra aplicación y como reaccionan.
- Permisos
- Perfiles de Hardware
- Veriones de Android que soporta
- Sirve para que el sistema antes de ejecutar la aplicación concozca los componentes que va a tener cargados
- Es un fichero XML, por lo tanto tendrá elementos, atributos y valores para los atributos
- Sólo se pueden incluir elementos definidos, el usuario no puede incorporar elementos propios (listados más abajo)
- Al menos debe tener una etiqueta manifest y una aplication y éstas sólo pueden estar una vez
<manifest .... atributos=valor > .... <application ...atributos=valor > ... otros elementos... </application> </manifest>
manifest
- Es el nodo raiz del fichero manifest.xml
- Sintaxis
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="string" android:sharedUserId="string" android:sharedUserLabel="string resource" android:versionCode="integer" android:versionName="string" android:installLocation=["auto" | "internalOnly" | "preferExternal"] > . . . </manifest>
Atributos del elemento manifest
- xmlns
- xml namespace
- Define el namesapace de android y siempre debe tener el valor "http://schemas.android.com/apk/res/android"
- pakage
- Nombre del paquete raiz de nuestra aplicación
- Este nombre tiene que ser único en el market
- Se usa un nombre de dominio escrito al revés para evitar posibles conflictos con otros desarrollos
- versionCode
- Número que se debe incrementar cada vez que actualizamos nuestra aplicacion en el market
- Este número es seguido por el market para ver la versión más reciente de una aplicación número más alto
- Este número no se muestra al usuario en el market
- versionName
- Es lo que se muestra en el market
- Podemos poner lo que queramos
- sharedUserId
- El nombre del ID de usuario de Linux que será compartido por otras aplicaciones
- Quien es el propietario de este proceso
- sharedUserLabel
- installLocation
- Donde debe ser instalada nuestra aplicación por defecto
- solo funcionan en versiones 2.2 o superior las anteriores las ignora
- Valores android:installLocation=["auto" | "internalOnly" | "preferExternal"]
- auto : Puede ser instalado en el dispositivo externo, pero por defecto la almacenará en el dispositivo interno
- internalOnly :Sólo se puede instalar en el dispositivo interno
- preferExternal :Se instalará en el dispositivo externo (tarjeta SD)por defecto pero si hay problemas se puede instalar en el dispositivo interno.
- Ejemplo
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.ciclovidaactividad" android:versionCode="1" android:versionName="1.0" android:installLocation="preferExternal"> </manifest>
Elemento application
- Sintaxis
<application android:allowTaskReparenting=["true" | "false"] android:backupAgent="string" android:debuggable=["true" | "false"] android:description="string resource" android:enabled=["true" | "false"] android:hasCode=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:killAfterRestore=["true" | "false"] android:largeHeap=["true" | "false"] android:label="string resource" android:logo="drawable resource" android:manageSpaceActivity="string" android:name="string" android:permission="string" android:persistent=["true" | "false"] android:process="string" android:restoreAnyVersion=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] > . . . </application>
- Analizaremos sólo el atributo ico y label
- Atributos cuyos valores son recursos del sistema
Atributos icon, label
- icon
- Es el icono de la aplicación para el market
- También será para lanzar nuestra aplicación en el emulador o móvil
- label
- String que se va a mostrar para nuestra aplicación en el lanzado de la aplicación
- Barra de título de nuestra aplicación
Atributo debuggable
- Lo normal es tener este atributo a true
- Cuando se vaya a publicar en el market pasarlo a false
Activity
- Una aplicación android por lo menos ha de tener un activity
- Sintaxis
<activity android:allowTaskReparenting=["true" | "false"] android:alwaysRetainTaskState=["true" | "false"] android:clearTaskOnLaunch=["true" | "false"] android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"] android:enabled=["true" | "false"] android:excludeFromRecents=["true" | "false"] android:exported=["true" | "false"] android:finishOnTaskLaunch=["true" | "false"] android:hardwareAccelerated=["true" | "false"] android:icon="drawable resource" android:label="string resource" android:launchMode=["multiple" | "singleTop" | "singleTask" | "singleInstance"] android:multiprocess=["true" | "false"] android:name="string" android:noHistory=["true" | "false"] android:parentActivityName="string" android:permission="string" android:process="string" android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "sensor" | "fullSensor" | "nosensor"] android:stateNotNeeded=["true" | "false"] android:taskAffinity="string" android:theme="resource or theme" android:uiOptions=["none" | "splitActionBarWhenNarrow"] android:windowSoftInputMode=["stateUnspecified", "stateUnchanged", "stateHidden", "stateAlwaysHidden", "stateVisible", "stateAlwaysVisible", "adjustUnspecified", "adjustResize", "adjustPan"] > . . . </activity>
- En nuestra aplicación aparece la siguiente información que de momento es la que vamos a analizar
<activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Atributos de activity
- name
- Es el nombre de la clase activity
- normalmente se especifica en crudo no referenciado al ficheor string.xml
- label
- El string que va a aparecer en la bara de título de la actividad
- Será usado en junto con el icono del lanzador
- Si no se especifica aparecería el label de la aplicación
- screenOrientation
android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "reverseLandscape" | "reversePortrait" | "sensorLandscape" | "sensorPortrait" | "sensor" | "fullSensor" | "nosensor"]
- Valores deseados para ciertas activity son landscape o portrait esto obliga a que use esta orienteación
- En otros casos o si se deja vacío la orientación cambiará indicado por el acelerómetro
- Esto provocará que nuestra actividad se destuya y luego restaurada, cosa que seguramente no queremos que ocurra.
- configChanges
- Esto también puede provocar un cambio en la pantalla
- A la vez destruye y vuelve a recostruir nuestra actividad
android:configChanges=["mcc", "mnc", "locale", "touchscreen", "keyboard", "keyboardHidden", "navigation", "screenLayout", "fontScale", "uiMode", "orientation", "screenSize", "smallestScreenSize"] *Se pueden elegir varios, por ejemplo
android:configChanges="keyboard|keyboardHidden|orientation" </source>
- En este caso estamos diciendo que cuando aparezca o desaparezca el teclado
- O cuando cambie la orienteación estos cambios si se producen ejecutándose nuestra actividad
- Los queremos gestionar nostros y no que el sistema destruya u luego recargue nuestra actividad.
Intent
- Sirve para especificar que activity o service inicia nuestra aplicación
- intent-filter tenemos muchos
- action
esta activity va a ser un punto de entrada para nuestra aplicació´n
- category
que esta activity sea añadida con su icono al lanzador de aplicaciones
- Ambos sólo tienen un atributo name
- En ambos casos como name le pasamos un intent
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
- Sólo una activity debe tener estas dos etiquetas
Lista de atributos
En este ficheros sólo pueden aparecer los siguientes elementos
<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>
Diagrama general
<?xml version="1.0" encoding="utf-8"?> <manifest> <uses-permission /> <permission /> <permission-tree /> <permission-group /> <instrumentation /> <uses-sdk /> <uses-configuration /> <uses-feature /> <supports-screens /> <compatible-screens /> <supports-gl-texture /> <application> <activity> <intent-filter> <action /> <category /> <data /> </intent-filter> <meta-data /> </activity> <activity-alias> <intent-filter> . . . </intent-filter> <meta-data /> </activity-alias> <service> <intent-filter> . . . </intent-filter> <meta-data/> </service> <receiver> <intent-filter> . . . </intent-filter> <meta-data /> </receiver> <provider> <grant-uri-permission /> <meta-data /> </provider> <uses-library /> </application> </manifest>