android basics v2.5

51
University of Castilla-La Mancha, Spain MAmI Research Lab Android Basics v2.5 Jesús Fontecha Diezma http://www.jesusfontecha.name

Upload: jesus-fontecha

Post on 28-Nov-2014

1.496 views

Category:

Technology


5 download

DESCRIPTION

Nueva versión del seminario Android Basics con los fundamentos sobre Android y los primeros pasos para la programación de aplicaciones.

TRANSCRIPT

Page 1: Android Basics v2.5

1

University of Castilla-La Mancha, SpainMAmI Research Lab

Android Basicsv2.5

Jesús Fontecha Diezma

http://www.jesusfontecha.name

Page 2: Android Basics v2.5

2

Introducción (I)

• SSOO de Google• Diseñado para ser ejecutado en dispositivos móviles.• Origen: 2007 Open Handset Alliance (OHA)

• Basado en el Kernel de Linux• Permite ejecutar aplicaciones en Java + XML

http://www.jesusfontecha.name

Page 3: Android Basics v2.5

3

Introducción (II)

• Evolución y Fragmentación• Cada año (aprox.) un nuevo firmware

4 de Septiembre de 2013

http://venturebeat.com/2013/09/04/google-updates-android-fragmentation-numbers-and-the-numbers-are-looking-better-than-ever/

http://kitkat.com

http://www.jesusfontecha.name

Page 4: Android Basics v2.5

4

• Actividades (activities)• El más importante• Representa una pantalla individual• Incluye fragmentos y vistas

Componentes de una aplicación Android• Servicios (services)

• Se ejecutan en segundo plano• Realizan acciones incluso cuando

las actividades no están visibles

• Proveedores de contenido (content providers)• Representan almacenes de datos

compartidos entre aplicaciones• Gestionan las BBDD de las aplicaciones

• Receptores broadcast (broadcast receivers)• Creados por aplicaciones que consumen

broadcast intents.

• Intenciones (intents)• Permiten el paso de información entre

actividades y servicios o al todo el sistema (broadcast intents)

• Definen “qué se hace”

• Notificaciones (notifications)• Referente a las notificaciones

del sistema que no interrumpen la actividad

• Se pueden ver como un tipo de servicios

• Vistas• Componentes básicos de la interfaz gráfica• Análogo a los controles de Java o .NET

http://www.jesusfontecha.name

Page 5: Android Basics v2.5

5

• Actividad y Content Provider

Agenda telefónica

public class Activity extends ApplicationContext {     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();          protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy(); }

Activity 1

Activity 2

Información detallada del contacto

Listado de nombres y teléfonos

Ejemplos de componentes (I)

Content provider

http://developer.android.com/guide/components/index.html

http://www.jesusfontecha.name

Page 6: Android Basics v2.5

6

Ejemplo de componentes (II)

• ServiciosCapturar posición GPSCapturar datos acelerómetro

• Broadcast receiversBatería Baja Llamada Cambio zona horariaTarjeta SD Otras aplicaciones

• IntentsMostrar una actividad desde otra Iniciar un servicioEnviar mensaje broadcast Iniciar otra aplicación

Cuadros de texto BotonesListas desplegables ImágenesBarras de desplazamiento

• Vistas

• Widgets

• Elementos visuales e interactivos• Se muestran en la pantalla principal del terminal

http://developer.android.com/guide/components/index.html

http://www.jesusfontecha.name

Page 7: Android Basics v2.5

7

Cuando es visible

Primera vez

Cuando se oculta

Asignación de memoria

Finaliza

Otra actividad en primer plano

Ciclo de vida/estados de una actividad

• Clases que extienden de Activity

http://www.jesusfontecha.name

Page 8: Android Basics v2.5

8

Métodos de transición entre estados

• onCreate(Bundle)• Invocado cuando la actividad arranca por primera vez• Utilizado para tareas de inicialización como crear la interfaz de usuario de la actividad

• onStart()• Invocado cuando la actividad va a ser mostrada al usuario

• onResume()• Invocar cuando la actividad va a empezar a interactuar con el usuario

• onPause()• Invocado cuando la actividad pasa a segundo plano porque otra actividad es lanzada con mayor prioridad

• onStop()• Invocado cuando la actividad deja de ser visible y no se necesitará durante un tiempo

• onRestart()• Invocado cuando la actividad sale del estado de parada y entra en estado activo

• onDestroy()• Se invoca cuando la actividad pasa a ser destruida

• onSaveInstanceState(Bundle)• Permite a la actividad guardar su estado (ej: los valores introducidos en un campo de texto)• No necesita ser redefinido porque la clase Activity ya guarda todo el estado de por sí.

• onRestoreInstanceState(Bundle)• Recupera el estado guardado por el método anterior• Al igual que antes, no necesita ser redefinido

http://www.jesusfontecha.name

Page 9: Android Basics v2.5

9

• A partir de Android 3.0 y el crecimiento de terminales y tablets surge el problema de la fragmentación.• Solución: nacen los fragmentos… ¡qué paradoja!

Fragmentación en Android

¿Qué son?

Sección modular de una actividad• Tiene su propio ciclo de vida• Recibe sus propios eventos de entrada• Puede construirse y destruirse en ejecución• “como una subactividad que puedes reutilizar en distintas actividades”

Principio: Todas las aplicaciones Android deberían funcionar en todos los dispositivos Android

http://www.jesusfontecha.name

Page 10: Android Basics v2.5

10

• Misma Aplicación, diferentes dispositivos

Galaxy tab 10”

Galaxy S

Activ

idad

Frag

men

tos

Posibles transiciones

Ejemplo uso de fragmentos

http://www.jesusfontecha.name

Page 11: Android Basics v2.5

11

• ¿Qué suponen?• En aplicaciones antiguas:

• Uso de librerías de apoyo a la compatibilidad (support libraries). • Reescritura de clases

• En aplicaciones nuevas: • Versatilidad: Misma app compatible para cualquier

dispositivo. • Aumentar la importancia del diseño de las actividades.

Más difícil diseñar una buena app.• Reutilización de fragmentos.

• Cambian “un poco” aspectos iniciales de las actividades.Actividades compuestas por componentes vs Actividades compuestas por fragmentos

Ventajas e inconvenientes de los fragmentos

http://www.jesusfontecha.name

Page 12: Android Basics v2.5

12

• Patrones de diseño• Unificar y mejorar la apariencia de la interfaz gráfica• http://www.androidpatterns.com/• Dashboards, listas, pestañas, menús, etc.

“No es una obligación, pero sí una recomendación” (en ciertos casos necesaria para poder publicar la app)

Hacia la estandarización de aplicaciones (I)

http://www.jesusfontecha.name

Page 13: Android Basics v2.5

13

• Action Bars• Similar a una barra de tareas• Permite agrupar acciones• De acceso intuitivo y rápido

Hacia la estandarización de aplicaciones (II)

• Themes• Holo http://android-developers.blogspot.com.es/2012/01/holo-everywhere.html

http://www.jesusfontecha.name

Page 14: Android Basics v2.5

14

• ¿Qué necesitamos?

DVM

Librerías

EmuladorSDK

IDE

Conocimientos Java

PC

Desarrollo con Android

http://www.jesusfontecha.name

Page 15: Android Basics v2.5

15

1. Instalar Eclipse2. Instalar SDK Android

http://developer.android.com/sdk/index.html• Instalar las librerías necesarias

3. Añadir un AVD – SDK Manager• Tools > Manage AVDs > New• Definir características y crear

4. Configurar Plugin ADT - Eclipse• Help > Install New Software• Introducir url proveedor: https://dl-ssl.google.com/android/eclipse/

O… descargar el bundle

Instalación del SDK en Eclipse

http://www.jesusfontecha.name

Page 16: Android Basics v2.5

16

• La separación de lógica e interfaz favorece la aplicación del patrón Modelo-Vista-Controlador (MVC)

ModeloVista

Controlador

- Interfaz de usuario-Representación de la información

-Responsable de eventos- Lógica tras la interacción del usuario

Modelo – Vista - Controlador

http://www.jesusfontecha.name

Page 17: Android Basics v2.5

17

Consideraciones previas• Actividades

• Las aplicaciones Android están formadas por actividades• Todas las actividades de nuestra aplicación y de otras se van

almacenando en la pila de actividades• Procesos

• Las aplicaciones no tienen control sobre su ciclo de vida• Android puede matar sin avisar a los procesos que

considera innecesarios para mantener al sistema estable• Vistas

• Las interfaces de usuario de una actividad se crean mediante vistas (views)

• Las vistas se agrupan en diseños (layouts) que muestra la aplicación

http://www.jesusfontecha.name

Page 18: Android Basics v2.5

18

1. New Project > Android Application Project2. Definir las propiedades iniciales de la App

• Nombre• SDK desarrollo• Mínimo SDK requerido• Icono de aplicación• Actividad inicial (opcional)

Creación de un proyecto Android

http://www.jesusfontecha.name

Page 19: Android Basics v2.5

19

Vista del entorno de desarrollo

http://www.jesusfontecha.name

Page 20: Android Basics v2.5

20

• Código:• /src – Clases java y archivo R.java

• R.java: Autogenerado por Android (vbles. sistema)• Recursos:

• /res/drawable – Imágenes de la aplicación• /res/layout – Vistas y diseños de la aplicación• /res/values – Estilos (colores, dimensiones) y variables de

la aplicación• /res/anim – Animaciones• /res/menu – Menús de la aplicación• /res/xml – Varios

• Libraries – Librerías y referencias• AndroidManifest.xml – Archivo de manifiesto

• Define la configuración del proyecto

Estructura de directorios

http://www.jesusfontecha.name

Page 21: Android Basics v2.5

21

• Se accede a través de la clase estática R generada en tiempo de compilación• La clase R incluye subclases para cada tipo de recurso (ej: R.string, R.drawable)• Los recursos se definen como variables de la clase (ej: R.string.app_name,

R.drawable.icon)• El valor de las variables es una referencia al recurso, no a una instancia del recurso• La tabla de recursos de una app está representada por una instancia de la clase

Resources• Ejemplo de extracción de recursos:

Acceso a los recursos desde código

1. Resources myResources = getResources() ;

2. CharSequence styledText = myResources . getTex t (R.string.stop_message) ;

3. Drawable icon = myResources . getDrawabl e (R.drawabl e.a pp_icon) ;

4. String[ ] stringArray; stringArray= myResources.getStringArray(R.array.string_array);

• Acceso a los recursos del sistema (android.R): • CharSequence httpError=getString(android.R.string.httpErrorBadUrl);

• Hay otras formas de acceso dependiendo del tipo de recurso

http://www.jesusfontecha.name

Page 22: Android Basics v2.5

22

• Layouts. Distribución de componentes en pantalla

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">

<Button android:text="Button01" android:id="@+id/Button01" android:layout_width="wrap_content"

android:layout_height="wrap_content" />

<Button android:text="Button02" android:id="@+id/Button02" android:layout_width="wrap_content"

android:layout_height="wrap_content" /> </LinearLayout>

Linear Layout

<?xml version="1.0" encoding="utf-8"?> <TableLayout android:id="@+id/TableLayout01"

android:layout_width="fill_parent" android:layout_height="fill_parent“xmlns:android="http://schemas.android.com/apk/res/android">

<TableRow android:id="@+id/TableRow01"> <TextView android:id="@+id/TextView01" android:text="First Name:" android:width="100px" /> <EditText android:id="@+id/EditText01" android:width="220px" />

…<TableRow android:id="@+id/TableRow03">

<Button android:id="@+id/Button01“ … android:layout_height="wrap_content" android:text="Submit" /> <Button android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_...

</TableRow> </TableLayout>

Table Layout

Recursos contenedores: layouts (I)

http://www.jesusfontecha.name

Page 23: Android Basics v2.5

23

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01"

android:layout_width="fill_parent“ android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:id="@+id/TextView01 … /> <EditText android:id="@+id/EditText01" android:layout_width="220px“ …

android:layout_toRightOf="@+id/TextView01" android:layout_below="@+id/RelativeLayout01" />

<EditText android:id="@+id/EditText02" … android:layout_below="@+id/EditText01" android:layout_alignLeft="@+id/EditText01" />

<TextView android:id="@+id/TextView02" android:layout_width=…

<Button android:text="Submit" android:id="@+id/Button01” …android:layout_below="@id/EditText02" android:layout_alignLeft="@id/EditText02" /> <Button android:text="Reset" android:id="@+id/Button02“ … android:layout_below="@id/EditText02" android:layout_alignRight="@id/EditText02" />

</RelativeLayout>

Relative Layout

<?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/AbsoluteLayout01"

android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<EditText android:id="@+id/EditText01" android:layout_width="200px" android:layout_height="wrap_content" android:layout_x="12px" android:layout_y="12px" />

<Button android:text="Search" android:id="@+id/Button01" android:layout_width="100px" android:layout_height="wrap_content" android:layout_x="220px" android:layout_y="12px" />

</AbsoluteLayout>Absolute Layout

Recursos contenedores: layouts (II)

http://www.jesusfontecha.name

Page 24: Android Basics v2.5

24

<?xml version="1.0" encoding="utf-8"?> <FrameLayout android:id="@+id/FrameLayout01" android:layout_width="fill_parent"

android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<ImageView android:id="@+id/ImageView01" android:src="@drawable/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scaleType="center" />

<TextView android:text="Android Partaker" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="20dip" android:layout_gravity="center_horizontal|bottom" android:padding="10dip" android:textColor="#AA0000" android:textStyle="bold" android:textSize="20px" android:background="#00000000" />

</FrameLayout>

Frame Layout

Source: http://androidpartaker.wordpress.com/2010/07/03/introduction-to-android-ui-layouts/

Recursos contenedores: layouts (III)

http://www.jesusfontecha.name

Page 25: Android Basics v2.5

25

Views/Componentes Área de trabajo

Jerarquía Layouts-Componentes

Propiedades Componente selección

Vista de diseño

http://www.jesusfontecha.name

Page 26: Android Basics v2.5

26

Ejemplo de archivo manifiesto

http://www.jesusfontecha.name

Page 27: Android Basics v2.5

27

Contenido del archivo manifiesto• Nodos

• manifest: incluye el nombre del paquete de la aplicación• application: incluye los metadatos de la aplicación (título, icono, tema)

• Contiene los nodos de las actividades, servicios proveedores de contenidos y receptores broadcast definidos en la aplicación.

• uses-permission: declara los permisos que la aplicación necesita para funcionar• Son presentados al usuario durante la instalación de la aplicación

• permission: define los permisos requeridos para que otras aplicaciones puedan acceder a partes restringidas de la aplicación.

• instrumentation: permite definir tests de ejecución para las Actividades y Servicios.

http://www.jesusfontecha.name

Page 28: Android Basics v2.5

28

MainActivity.java

Ejemplo de actividad: Hello world!

http://www.jesusfontecha.name

Page 29: Android Basics v2.5

29

Fragmento.java

Ejemplo de fragmento en una actividad

http://www.jesusfontecha.name

Page 30: Android Basics v2.5

30

Archivo JavaTextView tv= new TextView(this)tv.setWidth(100);tv.setHeight(60);tv.setText("phone"); setContentView(tv);

Archivo XML<TextView android:id="@+id/nameLabel" android:text="phone:" android:layout_width="100" android:layout_height="60"/>

• Ejemplo: Programación de un componente

• Vale, entonces… ¿Cómo lo hago? Depende• Recomendación: Declarar XML siempre que se pueda• ¡En layouts siempre!• Aún dejándolos “vacíos” (ya se “rellenarán” en tiempo de ejecución)

Programación procedural y declarativa

http://www.jesusfontecha.name

Page 31: Android Basics v2.5

31

• Handlers• Maneja eventos de entrada sin importar dónde está el foco.• No están necesariamente asociados a un view.• Botón atrás, tocar pantalla,…

• Listeners• Maneja eventos generados por un view o viewgroup.

Views

Eventos

Eventos sobre componentes (I)

http://www.jesusfontecha.name

Page 32: Android Basics v2.5

32

• Button

Eventos sobre componentes (II)

http://www.jesusfontecha.name

Page 33: Android Basics v2.5

33

Eventos sobre componentes (III)• EditText

http://www.jesusfontecha.name

Page 34: Android Basics v2.5

34

Eventos sobre componentes (IV)• ImageView

http://www.jesusfontecha.name

Page 35: Android Basics v2.5

35

Eventos sobre componentes (V)• CheckBox

http://www.jesusfontecha.name

Page 36: Android Basics v2.5

36

• Más Eventos• onLongClick, onFocusChange, onTouch, onKeyDown, onKeyUp,…

• Más Componentes• Texto TextView, AutocompleteTextView,…• Botón ImageButton, TogleButton, RadioButton,…• Vistas compuestas ExpandableListView, Listview…• Barras ProgressBar, SeekBar, RatinBar,…• Menús• ¡Controles compuestos!

ListItem

¿Cómo lleno la lista?

Más eventos y componentes

http://www.jesusfontecha.name

Page 37: Android Basics v2.5

37

• ¿Qué es?• Objeto que proporciona una interfaz común para

cada modelo de datos detrás de un control de selección.

• Tipos• ListAdapter• ArrayAdapter• SpinnerAdapter• SimpleCursorAdapter• CustomAdapters

Fundamentos sobre adaptadores

//Creamos el adaptador ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.comidas,android.R.layout.simple_spinner_item); //Añadimos el layout para el menú adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); //Le indicamos al spinner el adaptador a usar prueba.setAdapter(adapter);

¡Los datos no tienen porque proceder de recursos estáticos!

<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="comidas"> <item>Salchichas</item> <item>Huevos</item> <item>Tomates</item> </string-array> </resources>

http://www.jesusfontecha.name

Page 38: Android Basics v2.5

38

• Interfaz SensorEventListener

mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);List<Sensor> listSensors = mSensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER);

http://developer.android.com/reference/android/hardware/Sensor.html

• Sensores

Recuperamos el sensor

onSensorChanged()Método

Eventos sobre elementos hardware

http://www.jesusfontecha.name

Page 39: Android Basics v2.5

39

View view = inflater.inflate(R.layout.fragment_edit_name, container);

Más sobre actividades y fragmentos

• Existen actividades y fragmentos con propósitos específicos• ListActivity y ListFragment Diseñadas para trabajar con ListViews• Hay más: TabActivity, FragmentActivity, ExpandableListActivity,…

• No olvidar: ¡Los fragmentos se “inflan” dentro de las actividades

• Los fragmentos tal cual se conocen son compatibles con versiones antiguas de firmware Android:• Solución: importar librerías que facilitan la compatibilidad (support.v4)• Se espera que con el tiempo desaparezca esta necesidad debida a la

fragmentación• Los fragmentos son muy útiles para mostrar u ocultar secciones o partes de la

aplicación dependiendo del dispositivo que la ejecuta: tablet vs móvil.

http://www.jesusfontecha.name

Page 40: Android Basics v2.5

40

• Intents• Objetos utilizados para enviar mensajes asíncronos dentro de una aplicación o

entre varias aplicaciones.• Posibilitan la transición entre actividades.• Permiten la comunicación entre componentes.

http://androideity.com/2011/10/17/trabajando-con-intents-en-android-overview/

Más sobre intents y bundles (I)

• Bundle• Contenedor para agrupar los datos. • Pueden ser usados conjuntamente con Intents.

http://www.jesusfontecha.name

Page 41: Android Basics v2.5

41

• Ejemplo Intent

Intent intent = new Intent();intent.setClass(getActivity(), NuevaActividad.class);intent.putExtra("identificador", id);intent.putExtra("nombre", nombre);startActivity(intent);

String id = getActivity().getIntent().getStringExtra("identificador");String nombre = getActivity().getIntent().getStringExtra("nombre");

Actividad 1 Actividad 2

identificador

nombre

Más sobre intents y bundles (II)

http://www.jesusfontecha.name

Page 42: Android Basics v2.5

42

Bundle extras = intent.getExtras();String key = extras.getString("mynkey");

Bundle b=new Bundle();b.putString("myname", nombre);

¡también podemos pasar objetos!

Serializable Parcelable

• Un Bundle nos sirve como contenedor de datos (clave/valor) mientras que un Intent es mucho más, aunque lleva asociado un Bundle.

Más sobre intents y bundles (III)• Ejemplo Bundle

• ¡Hay mucho más! Evolución constante• Nuevos firmwares• Nuevas funciones

http://www.jesusfontecha.name

Page 43: Android Basics v2.5

43

Depuración y ejecución de aplicaciones (I)• Como desarrollador, existen dos opciones para depurar y ejecutar aplicaciones Android:

• Utilizando el emulador del SDK• Utilizando un dispositivo real conectado vía USB

• Pasos para utilizar un dispositivo real:

1. Activar el modo depuración USB en el dispositivo (ajustes)

http://www.jesusfontecha.name

Page 44: Android Basics v2.5

44

Depuración y ejecución de aplicaciones (II)2. Conectar el dispositivo vía USB al PC3. En el IDE, al pulsar “Ejecutar cómo” o “Depurar cómo”, aparece automáticamente

la ventana para selección de dispositivo (o emulador) 4. El apk se instalará y desplegará en el dispositivo.

Dispositivos conectados

Emuladores

Nota: La depuración de es uno de los aspectos más importantes de la programación de aplicaciones

http://www.jesusfontecha.name

Page 45: Android Basics v2.5

45

Ejemplo de aplicación Android (I)

http://www.sgoliver.net/blog/?p=1316

• Crear el proyecto Android con una actividad en blanco.• Modificar el layout de la actividad para que contenga un TextView, un EditText y un

Button.• Desde el diseñador visual• Desde el xml de la actividad

Page 46: Android Basics v2.5

46

Ejemplo de aplicación Android (II)

• Dar el texto “Escribe tu nombre” al TextView• Usar las propiedades del componente• Pero antes… declarar el texto como un string en los recursos

• Crear una segunda actividad llamada FrmSaludo que contendrá el saludo

• El layout de esta actividad contendrá un TextView

• ¡Comprobar que se definen las actividades en el manifiesto!

• Favorece el aislar mensajes y nombres de variables del código• Útil cuando se desea traducir la app a varios idiomas

Page 47: Android Basics v2.5

47

Ejemplo de aplicación Android (III)

• Programamos la parte Java en la actividad principal para:• Obtener las referencias de los controles de la interfaz• Crear un bundle que almacene el nombre introducido en el campo de texto• Realizar la transición desde la actividad principal hacia la actividad FrmSaludo

Page 48: Android Basics v2.5

48

Ejemplo de aplicación Android (IV)

• Programamos la parte Java en la actividad FrmSaludo para:• Obtener las referencias de los controles de la interfaz• Obtener el dato del nombre del Bundle• Escribir el nombre como texto del control TextView txtSaludo.

• Ejecutamos la aplicación desde el IDE

Ejemplo descargable desde: http://jesusfontecha.name/recursos/ejemplos/HolaAndroid.zip

Page 49: Android Basics v2.5

49

• Buscar librerías, porciones de código y frameworks que me resuelvan parte de mi problema o me faciliten la implementación Reutilización

• Buscar soluciones y respuestas a problemas de implementación (bajo la premisa: “¡seguro que a alguien le sucedió antes!”)• Foros y páginas especializadas. (http://stackoverflow.com/)

• Tanto las aplicaciones móviles como web están en constante evolución. Existen cada vez más frameworks, lenguajes y librerías• Auto-nota mental: ¡No te creas que lo sabes todo!

• Librerías en Android para:• Almacenamiento de datos (SQLite)• Bibliotecas de medios• Bibliotecas gráficas (2D y 3D –OpenGL)• Servicios Web (Ksoap)• Mapas (API Google Maps)• Juegos (libGDX, Unity engine, AndEngine)• …¡y muchas más!

Sobre el uso de librerías y otros consejos

http://www.jesusfontecha.name

Page 50: Android Basics v2.5

50

Firmar una aplicación Android

http://www.jesusfontecha.name

http://androideity.com/2011/08/25/%C2%BFcomo-firmar-aplicaciones-android/

• Pasos para construir un apk de nuestra aplicación, instalable en cualquier dispositivo compatible

1. Cuando ejecutamos nuestra aplicación en Eclipse, se nos crea un archivo .apk en el directorio de MiProyecto/bin.

2. Ese .apk no es válido para instalar en un dispositivo. Lo que podemos comprobar si copiamos/pegamos dicho apk en la memoria o SD del dispositivo y lo intentamos instalar.

3. Para construir una app Android válida (la cual puede contener nuestra aplicación html5+javascript desarrollada con PhoneGap), debemos firmarla o certificarla desde el Eclipse para crear un apk instalable válido. Para ello mirar los pasos a dar en este tutorial.

4. Con el apk firmado, ya podemos instalar la aplicación en cualquier dispositivo compatible. • De esta forma, nuestro apk contenido en el directorio de MiProyecto/bin es

válido y podemos compartirlo con otras personas e incluso subirlo al Market de Android.

Page 51: Android Basics v2.5

51

Jesús Fontecha DiezmaAndroid Basics V2.5

http://www.jesusfontecha.name