Anda di halaman 1dari 7

APUNTES CURSO 15h ANDROID

DIA 27/12/2010 (5h):

E-mail professor: jose@slashmobility.com

Modos de programación:

aumentar cohesión: cada clase tiene su función o objetivo determinado. No realiza diferentes
funciones diferentes. Programación modular.

Disminuir acoplamiento: si cambiamos la propiedad de un objeto, este cambio no tiene que afectar a
los otros objetos.

Widget (función) != appWidget (aplicación)

NDK programación de android a nivel S.O. Linux.

El lenguaje de programación utilizado a niveles superiores es APACHE HARMONY idéntico a


JAVA STANDARD EDITION.

Toda aplicación programada es SANDBOX, es decir nunca sobreescribirá la memoria de otra


aplicación. Como consecuencia no se puede compartir información entre aplicaciones de forma
directa.

Nota: Ctrl + shift + F → sirve para formatear el texto editado en eclipse.

Versiones del Sistema operativo Android:

Versión S.O. Android API level (versión API SDK)


' 1.6 4
' 2.1 5
' 2.2 6

Proceso de compilación y construcción de una aplicación:

(.java) → (.class) → (app.dex) → (.apk)

(.java) es el codigo “java” en que programamos.


(.class) es el resultado de la compilación máquina java.
(.dex) es el resultado de la compilación de la máquina dalvik (núcleo android)
(.apk) es la aplicación en sí que ejecutamos en el S.O. Android

ver página 9 del pdf: FO – 2. Desarrollo Android – Arquitectura del sistema

Fuentes de ingresos:

.Aplicación poco ética: recolección de datos de los usuarios


.Venta de una aplicación: 70% programador, 30% Google
.Publicidad en la aplicación (este método es útil si la aplicación es de uso habitual)
.Addmove
.Donaciones

Preparación e instalación del entorno de trabajo:

1. descargar e instalar eclipse (entorno de desarrollo integrado)


2. descargar e instalar el SDK de Android (kit de desarrollo de software Android)
3. descargar, instalar y configurar el ADT (plugin de Eclipse para utilizar el SDK de android de
forma cómoda y gráfica).

ver: http://www.greenandroid.es/

4. Crear variables de entorno adb ( crear su PATH). Ver página 9 del pdf: FO – 2. Desarrollo
Android – Arquitectura del sistema

en mi caso, por ejemplo:

export PATH=$PATH:/home/gerard/eclipse/android-sdk-linux_86/platform-tools/adb

5. Crear un ADV (emulador virtual android).

Creación de un emulador virtual dentro de eclipse (ADV, Android Virtual Device) :

1) window → Android SDK and AVD Manager


2) Name: nombreEmulador
3) Target: poner el API level correspondiente a la versión de S.O. Android
4) Size: poner el tamaño, normalmente 512 o 1024 MiB
5) clicar el botón “Create ADV”.

Nota 1: el emulador es un proceso que abre el puerto 5554 para que podamos comunicarnos con el
mediante telnet o mediante la herramienta “adb”.

Nota 2: para ejecutar la aplicación programada en el emulador, seleccionar el proyecto y con el


botón derecho del mouse seleccionar “run as” → Android aplication

Nota 3: para rotar el emulador ctrl+F12

Creación de un proyecto:
1)File → Android project
2)Sale una ventana donde tenemos que rellenar los siguientes campos:
Project name: nombreProyecto
Seleccionar el API determinada para la version del S.O. Determinada.
Application name: nombreProyecto
Package name: com.nombreEmpresa.nombreProyecto
Create Activity: test
Min SDK version: ponemos la versión mas antigua que queremos que sea compatible, en nuestro
caso pondriamos “4” para indicar que el sistema operativo compatible mas antiguo sea el 1.6.

Nota: Ctrl + space en el editor eclipse, te da sugerencias de autocompletado.

Estructura de un proyecto:
Consta de los siguientes directorios:

SRC → almacena el código fuente


GEN: R.java → almacena un fichero creado automáticamente por eclipse
ASSETS → cajon de sastre, guarda cosas.
RES → almacenamos en este directorio los recursos externos como iconos, imagenes, mp3, videos,
etc que necesitamos para realizar la aplicación. Ver pag 47 del fichero pdf: FO – 4.xxxxx.

Ver pagina 13 del fichero pdf: FO – 3. Desarrollo Android – Entorno de desarrollo

Que es adb?

Adb es android debug bridge, es una herramienta que sirve para comunicarse e interactuar con el
emulador mediante el puerto 5554. Funciona en la consola de linux. Los comandos mas
representativos son:
adb shell, entramos en la consola de comandos del emulador.
adb devices, muestra los emuladores o dispositivos conectados.
adb logcat, muestra las trazas del emulador.

Para poder utilizarlo, tenemos que entrar-lo como variable de entorno mediante el siguiente
comando en la consola bash:

export PATH=$PATH:/home/gerard/android-sdk-linux_86/platform-tools/

Que es DBMS?
Herramienta de eclipse que sirve para debugar la aplicación, ofrece la ventana logcat para ver las
trazas y la ventana console para buscar errores.

Permite acceder y ver el contenido del mobil y de la SDCard.

Nota: el acceso a la SDCard és mutex.

ACTIVITY

Un activity es simplemente una pantalla, una aplicación puede tener varias activity's pero hay que
definir una como principal.

Una activity es un thread que tiene un ciclo de de vida cíclico, que hay que tener en cuenta a la hora
de programar. Ver transparencias.

Si una activity esta parcialmente tapada, esta pasa al estado “on pause”.
Si una activity esta totalmente tapada, esta pasa al estado “on stop”.

Lo ideal es liberar recursos (como más mejor, solo los posibles como Sdcard, etc) cuando este en
estado “on pause”. En este estado también hay que guardar los datos introducidos o cambiados.
En estado “on Stop” hay que liberar los recursos visuales.

Cuando una activity se ha quedado colgada durante 5 sg. se aplica automáticamente el ANR
(aplication non responding) que es un mecanismo que lleva la activity al estado “on destroy”
directamente. Para evitar el ANR hay que utilizar “handlers” que son manejadores de eventos y
eventos.

ver página 7 del pdf: FO – 4. Desarrollo Android – Arquitectura de la aplicación

Nota: ListActivity es una Activity que tiene un layout en forma de lista, para listar cosas.

SERVICE:

Es como una activity pero sin pantalla és un thread que trabaja en modo background. No le afecta el
ANR

ANDROID MANIFEST.xml

Es un fichero que indica los componentes que vas ha utilizar en tu proyecto o aplicación.
Declaras los permisos y librerias necesarios para ejecutar la aplicación. En este fichero especificas
la seguridad solo a nivel de permisos de usuario.

INTENTS
Un intent es un mecanismo de paso de mensajes entre objetos. Declara la intención de hacer algo.

Intent (action – data)

donde: action es la acción o intención de hacer algo


data son los datos con que se quiere hacer algo, se expresan en URI

Ejemplo:

Intent (open – http://www.google.com)

El sistema android sabe interpretar los intents y sabe que aplicaciones llamar para realizar las
acciones. Este mecanismo permite independizar el objeto que realiza el intent del que lo recibe.

En este ejemplo un explorador de internet determinado por android visitará la dirección (URI).

Propiedades de los intents:

- Category: sirve para especificar prioridades entre aplicaciones para ejecutar un intent. De la
preferida a la menos deseada.
- Component: sirve para determinar solamente que aplicación debe ejecutar un determinado intent.
- Extras: son los datos que podemos pasar entre los diferentes componentes mediante los intents.
(pares key – value) = = = (variable - 5).

Ejemplos de URI:
http://google.com
contact://contactos/jose
ftp://algo

Un uso muy común de los intents es lanzar una Activity, existen 2 maneras de lanzar una Activity.
(1- startActivity ó 2- startActivityForResult). La primera crea 2 threats bien diferenciados, la
segunda es mas bien un thread.

Threads de ejecución startActivity ( existen 2 threads):

Activity Activity
#1 #2

StartActivity()
;

(thread 1) (thread 2)

Threads de ejecución startActivityForResult ( existe un solo thread):

Activity Activity
#1 #2

StartActivityForResult(
SetResult(
);
);
?????
Finish();
?????
OnActivityResult();

(thread 1)
Ejemplo uso de intents para lanzar Activitys :

Uri myUri = Uri.parse (“http://www.google.com”);


Intent myIntent = new Intent (Intent.ACTION_VIEW, myUri);
startActivity(myIntent); //startActivityForResult(myIntent);

- Explícitos: se establece un destinatario, ver


En los intents se setComponent(ComponentName)” o
pueden especificar “setClass(Context,Class)”.
los destinatarios
Ejemplo: Intent myIntent;
MyIntent. setComponent(Activity2);
StartActivity(myIntent);

- Implícitos: si no hay destinatario, se debe incluir


suficiente información para que Android determine
el mejor componente para ejecutar el intent.
Ver: Intent-Filters

ver pag 13 del fichero pdf: FO – 4.Desarrollo Android – Arquitectura de aplicación

INTENT_FILTER:

Solamente se definen en el Manifest. Se utilizan para filtrar los intents requeridos por un
componente.

CONTENT-PROVIDER:

Toda aplicación programada es SANDBOX, es decir nunca sobreescribirá la memoria de otra


aplicación. Como consecuencia no se puede compartir información entre aplicaciones de forma
directa.

Para poder compartir información se utilizan los content-providers.


Un content-provider es un medio que permite crear escribir y consultar todo tipo de informacion de
una manera standard.

PRACTICA #

e-mail: slashtest@hotmail.com
paswd: 1234

PROBELMAS Y FALLOS:
1) Al ejecutar “run as”, da el siguiente error:
[2011-01-01 23:11:16 - Emulator] invalid command-line parameter: wipe-data.

[2011-01-01 23:11:16 - Emulator] Hint: use '@foo' to launch a virtual device


named 'foo'.

[2011-01-01 23:11:16 - Emulator] please use -help for more information

Solución:

Run → run configurations → Android Application → Seleccionar el proyecto.

En la pestaña “Target” → Borrar “wipe-data” de la opción “Additional Emulator Command Line


Options”.