Visión General y Entorno de Desarrollo
Curso Android
¿Qué hace que Android sea tan especial?
- Plataforma realmente abierta
- Adaptable a cualquier tipo de hardware
- Portabilidad asegurada
- Gran cantidad de servicios incorporados
- Aceptable nivel de seguridad
- Optimizado para baja potencia y poca memoria
- Alta calidad de gráficos y sonido.
Los orígenes
2005
Google adquiere Android Inc.
Comienzan a trabajar en una máquina virtual Java optimizada para móviles Dalvik VM.
2007
Se crea consorcio Open Hanset Alliance
Objetivo: promover el diseño y difusión de la plataforma Android.
Compromiso: publicar como código abierto licencia Apache 2.0.
Primera versión del Android SDK.
2008
Primer móvil con Android (T-Mobile G1).
Google libera código fuente de Android.
Se abre el Android Market.

2009
Google lanza la versión 1.5 y 2.0 del SDK.
2010
Se consolida como una de los SO más utilizados.
Versiones 2.1, 2.2 y 2.3 del SDK.
2011
Versión 3.x para tablets (Honeycomb) y versión 4.x (Ice Cream Sandwich) tanto para móviles como para tablets.
50% del mercado.
2012
Android Market reemplazado por Google Play Store.
Versiones 4.1 y 4.2 (Jelly Bean).
70% del mercado.
2013
Versiones 4.3 y 4.4 (KitCat).
2014
Versión 4.5 (Lollipop).
Mercado 85%.
2015
Versión 6.0 (Marshmallow).
2016
Versión 7.0 (Nougat).
Comparativa con otras plataformas

Arquitectura Android

El núcleo Linux
- Linux versión 2.6
- Servicios como la seguridad, el manejo de la memoria, el multiproceso, la pila de protocolos y el soporte de drivers para dispositivos.
- Abstracción entre el hardware y el resto de la pila. Por lo tanto, es la única que es dependiente del hardware.
Runtime de Android
- Máquina virtual utilizado en Java
- Limitaciones de los dispositivos donde ha de correr Android (poca memoria y procesador limitado) .
- -> Google tomó la decisión de crear una nueva, la máquina virtual Dalvik, que respondiera mejor a estas limitaciones.
- A partir de Android 5.0 se reemplaza Dalvik por ART.
Librerías nativas
- Incluye un conjunto de librerías en C/C++ usadas en varios componentes de Android. Están compiladas en código nativo del procesador. Muchas de las librerías utilizan proyectos de código abierto.
Entorno de aplicación
- Proporciona una plataforma de desarrollo libre para aplicaciones con gran riqueza e innovaciones.
- Reutilización de componentes
-
Los servicios más importantes que incluye son:
- Views: extenso conjunto de vistas, (parte visual de los componentes).
- Resource Manager: proporciona acceso a recursos que no son en código.
- Activity Manager: maneja el ciclo de vida de las aplicaciones y proporciona un sistema de navegación entre ellas.
- Notification Manager: permite a las aplicaciones mostrar alertas personalizadas en la barra de estado.
- Content Providers: mecanismo sencillo para acceder a datos de otras aplicaciones (como los contactos).
Aplicaciones
- Conjunto de aplicaciones instaladas en una máquina Android.
- Para desarrollar aplicaciones en Java podemos utilizar el Android SDK. Existe otra opción consistente en desarrollar las aplicaciones utilizando C/C++. Para esta opción podemos utilizar el Android NDK (Native Development Kit)
Instalación de entorno de desarrollo
- Paquete de software Android SDK: incorpora todas las herramientas necesarias para el desarrollo de aplicaciones en Android. En él se incluye: conversor de código, depurador, librerías, emuladores, documentación, ejemplos de código, etc.
- IDE: agrupa, en un entorno visual, un editor de código con todas las herramientas de desarrollo.
- Google recomienda utilizar Android Studio (basado en el IDE IntelliJ IDEA). Otra alternativa sería instalar Eclipse y luego instalar el plug-in ADT para este IDE.
Instalación de máquina virtual java
-
Las aplicaciones Android están escritas en Java, por lo que necesitas instalar un software para ejecutar código Java en tu equipo. Este software se conoce como máquina virtual Java, entorno de ejecución Java, Java Runtime Environment (JRE) o Java Virtual Machine (JVM).
-
Es muy posible que ya tengas instalada la máquina virtual Java en tu equipo.
- Para instalar la máquina virtual Java accede a http://www.java.com/es/download/, descarga e instala el fichero correspondiente a tu sistema operativo.
Instalación de Android Studio
- Basado en el IDE IntelliJ IDEA
- Incorpora nuevas características que no encontramos en el tradicional IDE basado en Eclipse.
- Google va a potenciar este entorno para el desarrollo de aplicaciones, en detrimento del entorno basado en Eclipse, que va a dejar de mantenerse.
- http://developer.android.com/sdk/
Teclas de acceso rápido en Android Studio
Alt-Intro: Solución rápida (Ej. añade imports de las clases no resueltas).
Shift-F6: Cambia el nombre de un identificador.
Ctrl-Alt-L (Option-Cmd-L en Mac): Formatea automáticamente el código.
Ctrl-Q (F1 en Mac): Muestra documentación del código.
Ctrl-P: Muestra parámetros del método seleccionado.
F4 (Cmd-flecha hacia abajo en Mac): Salta a declaración.
Ctrl-Y (Cmd-Espacio en Mac): Borra línea.
Alt-Insert (Cmd-N en Mac): Inserta método.
Elección de plataforma de desarrollo
- A la hora de seleccionar la plataforma de desarrollo hay que consultar si necesitamos alguna característica especial que solo esté disponible a partir de una versión.
- Todos los usuarios con versiones inferiores a la seleccionada no podrán instalar la aplicación.

- Reducido número de usuarios que utilizan la versión 2.x (0,9%).
- Si usamos como versión mínima la 4.0 o 4.1 para desarrollar nuestro proyecto, dado que daríamos cobertura a más del 98% de los terminales.
- Las versiones 3.x han tenido muy poca difusión, por lo que no aparecen en la tabla.
- Las versiones 5.x, son mayoritarias.
- La versión 7.0 todavía no dispone de un número importante de usuarios. No obstante, estas cifras cambian mes a mes, por lo que recomendamos consultar los siguientes enlaces antes de tomar decisiones sobre las versiones a utilizar.
Ficheros y carpetas de un proyecto Android
Módulos
- Un proyecto en Android Studio puede contener varios módulos.
- Cada módulo corresponde a una aplicación o ejecutable diferente.
- Disponer de varios módulos en un mismo proyecto nos será muy útil cuando queramos crear varias versiones de nuestra aplicación, para dispositivo móvil, Wear, TV, Glass, etc. También si queremos crear varias versiones de nuestra aplicación con nivel mínimo de SDK diferentes.
- En este ejemplo, el módulo ha sido creado con el nombre app.

Contenido del módulo
- Descriptor de la aplicación (manifests)
- El código fuente en Java (java)
- Una serie de ficheros con recursos (res)
- Ficheros para construir el módulo (Gradle Scripts).
- Cada elemento se almacena en una carpeta específica, que hemos indicado entre paréntesis.
AndroidManifest.xml
- Este fichero describe la aplicación Android.
- Define su nombre, paquete, icóno, estilos, etc.
- Indica las actividades, las intenciones, los servicios y los proveedores de contenido de la aplicación.
- Declara los permisos que requerirá la aplicación.
- Indica la versión mínima de Android para poder ejecutarla, el paquete Java, la versión de la aplicación, etc.
java
Carpeta que contiene el código fuente de la aplicación. Los ficheros Java se almacenan en carpetas según el nombre de su paquete.
- MainActivity: Clase Java con el código de la actividad inicial.
- ApplicationTest: Clase Java pensada para insertar código de testeo de la aplicación utilizando el API JUnit.
res
Carpeta que contiene los recursos usados por la aplicación.
- drawable: En esta carpeta se almacenan los ficheros de imágenes (JPG o PNG) y descriptores de imágenes en XML.
- mipmap: Es una carpeta con la misma finalidad que res/drawable. La única diferencia es que si ponemos los gráficos en mipmap, estos no son rescaldados para adaptarlos a la densidad gráfica del dispositivo donde se ejecuta la aplicación, sino que se buscará en las subcarpetas el gráfico con la densidad más parecida y se utilizará directamente. Es recomendable guardar los iconos de aplicación en esta carpeta.
- layout: Contiene ficheros XML con vistas de la aplicación. Las vistas nos permitirán configurar las diferentes pantallas que compondrán la interfaz de usuario de la aplicación. Se utiliza un formato similar al HTML usado para diseñar páginas web.
- menu: Ficheros XML con los menús de cada actividad. En el proyecto no hay ningún menú por lo que no se muestra esta carpeta.
-
values: También utilizaremos ficheros XML para indicar valores usados en la aplicación, de esta manera podremos cambiarlos desde estos ficheros sin necesidad de ir al código fuente.
- En colors.xml se definen los tres colores primarios de la aplicación.
- En dimens.xml, se ha definido el margen horizontal y vertical por defecto.
- En el fichero strings.xml, tendrás que definir todas las cadenas de caracteres de tu aplicación. Creando recursos alternativos resultará muy sencillo traducir una aplicación a otro idioma.
- En styles.xml, podrás definir los estilos y temas de tu aplicación.
- anim: Contiene ficheros XML con animaciones de vistas (Tween).
- animator: Contiene ficheros XML con animaciones de propiedades.
- xml: Otros ficheros XML requeridos por la aplicación.
- raw: Ficheros adicionales que no se encuentran en formato XML.
Gradle Scripts
-
En esta carpeta se almacenan una serie de ficheros Gradle que permiten compilar y construir la aplicación.
-
El fichero más importante es build.gradle (Module:app) que es donde se configuran las opciones de compilación del módulo.
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.example.myapplication"
minSdkVersion 9
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
}-
compileSdkVersion: nos permite definir la versión del sdk con la que compilamos la aplicación. Las nuevas versiones no solo añaden funcionalidades al API, también añaden mejoras en los procesos.
-
buildToolsVersion: define la versión de las herramientas de construcción.
-
applicationId: ha de coincidir con el nombre del paquete Java creado para la aplicación. Se utiliza como identificador único de la aplicación, de forma que no se permite instalar una aplicación si ya existe otra con el mismo paquete.
-
minSdkVersion especifica el nivel mínimo de API que requiere la aplicación. La aplicación no podrá ser instalada en dispositivos con versiones anteriores y solo podremos usar las funcionalidades del API hasta este nivel (con excepción de las librerías de compatibilidad).
-
targetSdkVersion indica la versión más alta con la que se ha puesto a prueba la aplicación. Cuando salgan nuevas versiones del SDK tendrás que comprobar la aplicación con estas versiones y actualizar el valor.
-
versionCode y versionName indica la versión de tu aplicación. Cada vez que publiques una nueva versión incrementa en uno el valor de versionCode y aumenta el valor de versionName según la importancia de la actualización. Si es una actualización menor el nuevo valor podría ser "1.1" y si es mayor "2.0".
-
buildTypes se añaden otras configuraciones dependiendo del tipo de compilación que queramos (relase para distribución, debug para depuración, etc.).
-
dependencies: indica todas las librerías que han de ser incluidas en nuestro proyecto. Si necesitas usar alguna librería de compatibilidad adicional has de incluirla aquí.
Componentes de una aplicación
Vista (View)
- Las vistas son los elementos que componen la interfaz de usuario de una aplicación: por ejemplo, un botón o una entrada de texto.
- Todas las vistas van a ser objetos descendientes de la clase View, y por tanto, pueden ser definidas utilizando código Java. Sin embargo, lo habitual será definir las vistas utilizando un fichero XML y dejar que el sistema cree los objetos por nosotros a partir de este fichero. Esta forma de trabajar es muy similar a la definición de una página web utilizando código HTML.
Layout
- Un layout es un conjunto de vistas agrupadas de una determinada forma.
- Hay diferentes tipos de layouts para organizar las vistas de forma lineal, en cuadrícula o indicando la posición absoluta de cada vista.
- Los layouts también son objetos descendientes de la clase View.
- Igual que las vistas, los layouts pueden ser definidos en código, aunque la forma habitual de definirlos es utilizando código XML.
Actividad (Activity)
- Pantallas de la aplicación.
- Su función principal es la creación de la interfaz de usuario. Una aplicación suele necesitar varias actividades para crear la interfaz de usuario.
- Las diferentes actividades creadas serán independientes entre sí, aunque todas trabajarán para un objetivo común.
- Toda actividad ha de pertenecer a una clase descendiente de Activity.
Servicio (Service)
- Un servicio es un proceso que se ejecuta “detrás”, sin la necesidad de una interacción con el usuario.
- En Android disponemos de dos tipos de servicios: servicios locales, que son ejecutados en el mismo proceso y servicios remotos, que son ejecutados en procesos separados.
Intención (Intent)
-
Una intención representa la voluntad de realizar alguna acción; como realizar una llamada de teléfono, visualizar una página web. Se utiliza cada vez que queramos:
- Lanzar una actividad
- Lanzar un servicio
- Enviar un anuncio de tipo broadcast
- Comunicarnos con un servicio
-
Los componentes lanzados pueden ser internos o externos a nuestra aplicación. También utilizaremos las intenciones para el intercambio de información entre estos componentes.
Fragment
-
La llegada de las tabletas trajo el problema de que las aplicaciones de Android ahora deben soportar pantallas más grandes. Si diseñamos una aplicación pensada para un dispositivo móvil y luego la ejecutamos en una tableta, el resultado no suele resultar satisfactorio.
Para ayudar al diseñador a resolver este problema, en la versión 3.0 de Android aparecen los fragments. Un fragment está formado por la unión de varias vistas para crear un bloque funcional de la interfaz de usuario. Una vez creados los fragments, podemos combinar uno o varios fragments dentro de una actividad, según el tamaño de pantalla disponible.
Receptor de anuncios (Broadcast Receiver)
- Un receptor de anuncios recibe anuncios broadcast y reacciona ante ellos. Los anuncios broadcast pueden ser originados por el sistema (por ejemplo: Batería baja, Llamada entrante) o por las aplicaciones.
- Las aplicaciones también pueden crear y lanzar nuevos tipos de anuncios broadcast. Los receptores de anuncios no disponen de interfaz de usuario, aunque pueden iniciar una actividad si lo estiman oportuno.
Proovedores de contenido (Content Provider)
Las aplicaciones instaladas en un terminal Android necesitan compartir información. Android define un mecanismo estándar para que las aplicaciones puedan compartir datos sin necesidad de comprometer la seguridad del sistema de ficheros. Con este mecanismo podremos acceder a datos de otras aplicaciones, como la lista de contactos, o proporcionar datos a otras aplicaciones.
Depurar
Depurar con el entorno de desarrollo
- Android Studio integra excelentes herramientas para la depuración de código. Para probarlos, introduce un error en tu código modificando MainActivity para que en método onCreate()tenga este código:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Object o = null;
o.toString();
setContentView(R.layout.activity_main);
}Este cambio introduce un NullPointerException en tu código.
Para averiguar más sobre el error, inserta un punto de ruptura (breakpoint) en el código fuente en la línea Object o = null; (el breakpoint se introduce haciendo clic en la barra de la izquierda).
Entonces selecciona Run > Debug ‘app’ (Mayús+F9) o pulse en para ejecutarlo en modo Debug. Tu aplicación se reiniciará pero esta vez quedará suspendida cuando alcance el punto de ruptura que has introducido. Entonces puedes recorrer el código en modo Debug, igual que se haría en cualquier otro entorno de programación. Pulsa en Run > Step Over (F8) para ir ejecutando las líneas una a una.
Depurar con mensajes de Log
-
El sistema Android utiliza el fichero LogCat para registrar todos los problemas y eventos principales que ocurren en el sistema. Ante cualquier error resulta muy interesante consultarlo para tratar de encontrar su origen.
-
La clase Log proporciona un mecanismo para introducir mensajes desde nuestro código en este fichero. Puede ser muy útil para depurar nuestros programas o para verificar el funcionamiento del código. Disponemos de varios métodos para generar distintos tipos de mensajes:
Log.e(): Errors
Log.w(): Warnings
Log.i(): Information
Log.d(): Debugging
Log.v(): Verbose
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("HolaMundo","Entramos en onCreate");
super.onCreate(savedInstanceState);
Object o = null;
o.toString();
setContentView(R.layout.activity_main);
}Curso Android Clase 1
By Marina Garcia
Curso Android Clase 1
- 767