La semana pasada anunciábamos la nueva sección Aprende Android en 20 conceptos, sección orientada a introducirnos en los conceptos más básicos para empezar a programar nuestra propia aplicación Android.

De hecho, aparte de los 20 conceptos, incluimos la semana pasada un punto 0 de introducción, donde podíamos instalarnos el entorno de desarrollo y tener nuestra máquina lista para empezar a programar.

Hoy toca hablar ya de los dos primeros conceptos: los Fundamentos de una aplicación y los Recursos.

1. Fundamentos de una aplicación

Lo primero que tenemos que mencionar es que las aplicaciones Android están escritas en el lenguaje de programación orientado a objetos Java. El SDK de Android tiene una serie de herramientas que permitirán compilar el código, incluyendo los datos y los recursos (de los que hablaremos a continuación), y lo meterá todo en un fichero APK, o también conocido como paquete Android. Este fichero será nuestro instalador.

Una vez instalada una aplicación, cada una de ellas tiene su propio sistema de seguridad, de tal modo que:

  • Cada aplicación será un usuario diferente dentro de Android como Sistema Operativo basado en un sistema Linux multiusuario. Este usuario será un ID de usuario Linux único.
  • Android dará permisos para todos los ficheros de una aplicación únicamente para el usuario que identifica dicha app.
  • Cada proceso tiene su propia máquina virtual, por lo que la ejecución de aplicaciones es totalmente independiente.
  • Por defecto, cada aplicación corre en su propio proceso Linux, el cual se gestiona a nivel de Sistema Operativo

arquitectura android

Con todas estas reglas, Android consigue implementar lo que se conoce como Principio de menor privilegio, consistente en otorgar los permisos justos a cada aplicación, de modo que el sistema sea lo más seguro posible.

android candado

Pero todo esto es el funcionamiento por defecto, pues podremos gestionarlo según nos interese, por ejemplo para compartir datos entre diferentes aplicaciones (un ejemplo perfecto son los Contactos).

Una vez conocido como funciona Android, es hora de pasar a definir los componentes de una aplicación. Éstos son los bloques básicos que podemos construir. Hay 4 diferentes tipos de componentes:

  • Activity: Representa una pantalla independiente con una interfaz de usuario. A pesar de que nuestra aplicación dispondrá de múltiples pantallas interconectadas entre sí, nosotros deberemos generarlas individual e independientemente (pudiendo pasar datos entre ellas, en caso de ser necesario). Entraremos en más detalle en esta clase cuando lleguemos al concepto 3.
  • Service: Es un componente que corre de fondo para hacer operaciones de larga duración o trabajo en procesos remotos. Contrario a la actividad, no dispone de interfaz gráfica. Veremos más detalles al llegar al concepto 11.
  • Content Provider: Este componente nos permite gestionar un conjunto de datos de la aplicación para compartir. Los Contactos son el ejemplo perfecto para este componente: datos que podemos compartir entre diferentes aplicaciones. Pero podemos crear nuestro propio conjunto de datos (más detalle en el concepto 13).
  • Broadcast Receiver: El cuarto de los componentes nos permite responder a anuncios broadcast del sistema. Un buen ejemplo es si queremos gestionar cuando tengamos el aviso de batería baja (el cual enviará un mensaje broadcast), aunque podemos diseñar nuestros propios mensajes (más detalles en el concepto 8).

Un aspecto interesante de diseño de Android es que una aplicación A podría abrir un componente de una aplicación B. El ejemplo ideal es cuando queremos usar la cámara en nuestra app, podemos hacer una Activity con la cámara, o abrir el componente de la cámara que viene ya instalada por defecto en el sistema operativo.

Para ello utilizamos un mensaje llamado Intent, el cual también sirve para activar 3 de los 4 componentes de una app (todos excepto el Content Provider), Más adelante veremos cómo hay métodos específicos para abrir cualquier componente a través de un Intent (concepto 7).

android componentes app

Pero, ¿cómo sabe nuestra aplicación qué componentes tiene disponibles? Para ello, existe el fichero AndroidManifest.xml. Este fichero será el encargado de comunicarle al sistema operativo:

  • las componentes de las que dispone la aplicación
  • los permisos necesarios para la aplicación (cámara, GPS…)
  • la versión de Android mínima necesaria
  • el hardware y software requerido y/o usado
  • las librerias externas que utiliza (como Google Maps…)

AndroidManifest

Para ello, utilizaremos etiquetas, que en el caso de los componentes serán:

<activity>   <service>   <receiver>   <provider>

Cada una de estas etiquetas tendrán una serie de atributos disponibles, donde indicaremos qué componente en cuestión será de todos los disponibles, icono o un sinfín de opciones disponibles. Además, si queremos indicar las capacidades de uno de nuestros componentes, podemos hacer uso de la etiqueta <intent-filter>.

2. Recursos de una app

recursos

A la hora de hacer un buen programa, siempre hay que externalizar los recursos del código, entendiendo por recursos imágenes, textos, estilos… De esta forma, también podremos especificar diferentes recursos dependiendo del tipo de dispositivo en el que estemos, sin necesidad de modificar el código. Para esto, el ejemplo perfecto es la versión móvil y tablet de una misma pantalla (o Activity, para ir entrando en la jerga): creamos una única Activity la cual utilizará una distribución de su contenido diferente según el tipo de dispositivo que usemos.

layouts

Siempre podemos especificar un recurso genérico o por defecto. En contraposición a éste, tendremos la opción de especificar que una versión concreta de un recurso es para una configuración específica.

Para detallar la configuración específica podemos basarnos en idiomas, resolución, orientación del dispositivo… Para ello, basta ver las posibilidades en esta página. Básicamente radica en añadir unas terminaciones a las carpetas donde almacenaremos los recursos, acordes a la configuración específica.

Todos los recursos irán bajo la carpeta /res. Pero, ¿qué recursos son los que podemos incluir? Los siguientes:

Para ello, deben ir en una estructura de carpetas específica, de forma que por ejemplo para añadir cadenas de texto en español utilizaríamos la carpeta /res/values-es o /res/drawable-xxhdpi para Drawables para pantallas de alta resolución.

A continuación podéis ver un diagrama de flujo de cómo Android elige el recurso adecuado:

recurso workflow

Teniendo claro cómo se gestionan los recursos, ¿cómo creamos algunos recursos específicos? Veamos a continuación algunos de ellos: layouts, menus y estilos.

Un layout define la estructura visual de una interfaz de usuario. A pesar de que podríamos crearla dinámicamente por código, lo ideal es declarar los elementos de la interfaz en un XML.

Para crear un layout, disponemos de muchos componentes gráficos ya en la API, aunque podemos crear los nuestros propios. Tenemos layouts donde insertar múltiples componentes, vistas de texto, botones… A continuación, podéis ver un ejemplo de un layout que nos pondrá un texto y justo debajo un botón:

layout ejemplo

En este caso, un LinearLayout nos pondrá elementos uno detrás de otro (en este caso al ser su orientación vertical, uno debajo de otro). A continuación un TextView que de ancho y alto ocupa lo que necesite (wrap_content), con el texto Hello, I am a TextView. Y similar para el botón. Cada uno con su identificador único.

Si queremos hacernos buenos a la hora de hacer layouts, lo ideal es que empecemos trabajando con el editor gráfico de eclipse o Android Studio, pero vayamos comprobando cómo queda el XML. Conforme pase el tiempo, os daréis cuenta que a veces será más rápido escribir directamente en el XML.

Cuando vamos a definir un menú en una de nuestras Actividades, éste también se define a través de un XML. Para más información, os recomiendo visitar el link. Aquí os dejo un ejemplo:

menu ejemplo

Por último, cuando hablamos de estilos, nos estamos referiendo al concepto más parecido a lo que es CSS para una web: externalizar estilos para poder ser reutilizados. Podremos definir estilos para asignarlos a entidades gráficas, así como crear un tema para asignarlo a toda la aplicación.

A continuación podéis ver como mostrar un texto con un formato específico:

texto sin estilo

Y como queda tras utilizarlo con estilos, donde el estilo CodeFont podríamos reutilizarlo en otras Views, o si decidiéramos cambiarlo, podríamos cambiarlo a todos a la vez:

texto con estilo

Llegados este punto, creo que es el momento de mencionaros la guía de diseño de interfaces para Android, una web donde podremos ver las tendencias y consejos sobre cómo montar una buena interfaz de usuario.

Por último, para jugar un poco con la asignación de recursos para diferentes configuraciones, estaría bien que sigáis este ejemplo de Google.

Con esto damos por terminados los dos primeros conceptos de esta sección. Es cierto que estos dos conceptos son muy densos, pues son conceptos donde pretendo explicar la estructura de la aplicación, pero muchos de las cosas que nombramos son las que iremos analizando a posteriori.

¿Preparados para los siguientes conceptos? 

Ver la sección Aprende Android en 20 conceptos

  • elodiado

    Felicidades, MUY completo!

    • Jose Angel Zamora

      Gracias. Me alegro de que esté gustando

  • Joaquin Crespo

    Muy completo, para leer tranquilo y sabiendo programar algo en Java (que estoy aprendiendo). Muy bueno.

  • Daniel Llanes

    Me parece que no me vale de nada haber aprendido a programar en flash y as3,no? :( malditos cursos de oferta! jajaja

    • Jesús Martínez

      XD puedes usar Adobe Air…

      • Daniel Llanes

        Claro, he hecho un par de cosas pero el archivo apk que crea flash con el adobe air me ocupa mínimo 26 megas, es el hello world mas grande del mundo…. Por eso quiero intentarlo aquí, pero me veo muy perdido

    • Miguel Angel Bernal

      Pero los fundamentos de programación es experiencia que ayuda a entender mejor lo nuevo ;)

  • gabri santi

    hola, tengo una duda, querria saber como guardar un proyecto en formato (.apk) para poder instalarlo en el movil, porque al buscar en la carpeta, no hay ningun archivo .apk

    . solo hay o (.jar), (.java), (.xml) y no los puedo ejecutar en el movil. seria de gran ayuda si me resolviesen el problema

    gracias de antemano

    • Jesús Martínez

      En la carpeta bin tienes el .apk temporal de la aplicación, sin embargo para compilar una app como debe de ser, es en archivo/exportar y ahí eliges “exportar” como proyecto Android o algo así.

  • Marlon Molina Hidalgo

    Hola, confirmenme si este no es la version es español del curso Programming Mobile Applications for Android Handheld Systems Course Team??

    Si es así, está genial que lo estén traduciendo.

  • sergio gil

    por favor te agradeceria que pusieses mas fotos que muestren el proceso que estas realizando

    • Santiago

      Concuerdo, igual deseo aprender a realizar apps con estos tutoriales!

  • Ramón Martínez Nieto

    Buenas,

    He leido detenidamente un par de veces tus dos primeras entradas y están muy bien explicadas. En paralelo estoy intentando aprender Java, hace unos años estudie HTML, CSS, PHP y algo de JavaScript (sólo algo). Mi duda es si en tus entradas vas a mencionar Java, o al menos como manejar con Java los objetos creados con Android. Ya que estoy estudiando Java pero no acabo de entender como mezclarlo con Android.

    Supongo que es muy pronto para hacerte este pregunta :P. A ver si consigo pasarme de la web a Android en un par de meses.

    Saludos y buen trabajo ;)

  • Freddy Garcia

    Gracias por la creacion de estos tutoriales. sigue asi amigo espero que no te desanimes por los pocos comentarios que veas

  • Silver506

    Genial, muchas gracias!

  • GërsØn Hërnândzz

    gracias x el curso ya estoy aprendiendo mucho :D

  • GërsØn Hërnândzz

    al abrir eclipse me aparece
    “Failed to create the Java Virtual Machine” xq me sale esto?? alguien tan amable me podria explicar?

Samsung deja de usar Android en los nuevos Smartwatch Samsung Gear 2 y Gear 2 Neo
Todo lo que necesitas para promocionar tu aplicación Android
Vídeos El Androide Libre
Huawei Mate 10 y Mate 10 Pro: opiniones y toma de contacto
Nuevo Samsung Galaxy J2 2017
Nubia Z17S y Nubia Z17 mini S, características y precio
Honor 6C Pro, características y precio
Nos colamos en la fábrica de Huawei: así se fabrican sus móviles
He probado el Huawei de 4 cámaras y debería llegar a España
Honor 7X, características y precio
Samsung ha presentado nuevos sensores que acercan el modo retrato a los móviles baratos
Así es el Samsung Galaxy A5 2018
Cómo tener identificador constante de música, igual que en el Google Pixel 2
Descarga la barra de navegación flotante del LG V30 en tu móvil Android
Honor Waterplay, tablet Android resistente al agua
Los Nokia 2, Nokia 7 y Nokia 9 llegarían a principios de 2018
ZTE Axon M, dos pantallas y diseño plegable
Firefox Rocket, el navegador más ligero y potente (APK)

Últimas noticias

Lo más visto