Desarrollo de aplicaciones para dispositivos móviles Android


Introducción
Johnattan Jaramillo G.
jjaramillo238@misena.edu.co
Contenido del curso
1- Introducción
2- Layouts y widgets
3- Actividades y fragmentos
4- Almacenamiento local
5- Almacenamiento remoto
6- Material design
7- Publicación y marketing de apps

INTRODUCCIÓN ANDROID (1/2)
- Introducción al desarrollo de aplicaciones para dispositivos móviles
- Dispositivos móviles y sistemas operativos
- Definición
- Historia
- Versiones
- ¿Porqué Android?
- Componentes de aplicaciones
- Android Stack
- Documentación
INTRODUCCIÓN ANDROID (2/2)
- Preparación del entorno de trabajo
- Requisitos de instalación
- Configuraciones adicionales
- Aprendizajes previos
- Perfil del desarrollador
- Mi primera aplicación
- Crear nuevo proyecto
- Ejecución de app
- Gestor de dependencias gradle
- Estructura de proyecto
- Ejercicio 1
Desarrollo de apps para dispositivos móviles
Número de aplicaciones disponibles en las principales tiendas de aplicaciones, marzo 2017

https://www.statista.com
Fuente
Desarrollo de apps para dispositivos móviles
Ingresos de la tienda de aplicaciones móviles a nivel mundial en 2015, 2016 y 2020 (en miles de millones de dólares)

https://www.statista.com
Fuente
Desarrollo de apps para dispositivos móviles
Distribución de ingresos de aplicaciones móviles a nivel mundial en 2017, por canal de monetización

https://www.statista.com
Fuente
Dispositivos moviles
Cuando hablamos de dispositivos móviles, pensamos en
- SmartPhone
- Tablet
- IPad
- Notebook
- Kindle

Sistemas operativos para dispositivos móviles
Cuando hablamos de sistemas operativos para dispositivos móviles, pensamos en
- Android
- iOS
- Windows Phone (Windos 10 Mobile)
- Blackberry
- FirefoxOS

Android:
Android SDK
Plataforma de software para dispositivos móviles. Incluye:
- Sistema operativo
- Middleware
- Aplicaciones básicas
Provee las herramientas y API's necesarias para desarrollar aplicaciones en la plataforma Android usando el lenguaje de programación Java

Historia (1/2)
- Google adquirió a Android el 17 de agosto de 2005.

- Andy Rubin fundó Android Incorporation en Palo Alto, California, en octubre del año 2003.

Historia (2/2)
- La OHA es un grupo de 84 empresas de tecnología y dispositivos móviles que aceleran la innovación del sector.
- El primer dispositivo móvil comercial en usar Android fue el HTC Dream It, el 22 de octubre de 2008.

Google formó la Open Handset Alliance (OHA) el 5 de noviembre de 2007.
Versiones (1/2)

Versiones (2/2)
-
Usan nombres de dulces en orden alfabético y de publicación
-
La última versión es la Oreo, Android 8.0 API Level 26
¿Porque Android?

- Código abierto
- Gran comunidad de desarrollo
- Mercado creciente
- Integración entre aplicaciones
- Costo de desarrollo reducido
- Mayor tasa de éxito
- Entorno de desarrollo integrado completo
Componentes de aplicaciones

Actividad
Representa una pantalla simple con la que el usuario puede interactuar.

- Pueden existir una o más
- Son independientes
- Se pueden relacionar
- Deben ser definidas en el archivo de configuración general
- Heredan de la clase Activity del SDK de Android


.xml
.class
Vista
Lógica de eventos
Servicio
Procesos largos en segundo plano que no requieren interacción con el usuario.

- Realizan tareas en segundo plano sin bloquear la interacción del usuario con las actividades
- Reproducir música/Enviar datos a servidor
- Heredan de la clase Service del SDK de Android
Reproducción de música en segundo plano
Broadcast receivers
Manejan la comunicación entre las aplicaciones y el sistema operativo.

- Se visualizan como alertas y notificaciones en la barra de estado
- Notificación de batería baja/Señal de audífono conectado
- No cuentan con interfaz de usuario
Notificación de batería cargada
Content providers

- Son usados para compartir información entre aplicaciones.
- En Android, la información no puede ser compartida directamente entre dos aplicaciones
Proveedores de contenido
Android Stack

Usan
ApplicactionFramework
APLICACIONES
Android Runtime
Usa
Android

Librerías
Linux Kernel

Desarrollador



Incluye
Dalvik Virtual Machine
ANDROID RUNTIME
Core Librares
Compilación JIT (Just In Time)

JDK
Código fuente
Bytecode
Write once, run anywhere

Ensambla a plataforma Android
Código ensamblado ligero
Ejecutable
Código de máquina
DVM
DVM es gratuito y emplea poca memoria para ahorro de batería
Dalvik es reemplazado por ART (Android Runtime) en la versión 5.0.
Precompilado
API
Servicios de alto nivel proporcionados en forma de clases
Facilita el trabajo de los desarrolladores
Escribir apps más fácil y rápido
Java
APPLICATION FRAMEWORK
Aplicaciones nativas
Escritas en un lenguaje de programación como C, C++, Assembler
Son específicas al hardware y el sistema operativo
Interactuar con componentes de bajo nivel
Java
LIBRERÍAS

Sistema operativo
Linux
Administración de memoria
Administración de energía
Administración de recursos
Administración de controladores
Reservar, liberar memoria
Procesos, hilos y tareas
Bluetooth, cámara
Instalación drivers

LINUX KERNEL
Documentación

Desarrollo de aplicaciones para dispositivos móviles con Android Studio


Requisitos de instalación (1/3)


JDK 8 o superior
Java Development Kit
Requisitos de instalación (2/3)
JRE 6 o superior
Java Runtime Environment


Requisitos de instalación (3/3)


Android Studio
IDE
Configuraciones adicionales: Smartphone (1/2)
Activar opciones de desarrollador en el smartphone

- Ingresar a ajustes
- Acerca del teléfono
- Presionar 7 veces número de compilación
- Opciones de programador
- Habilitar depuración por USB
Configuraciones adicionales: Emulador (1/2)
Configurar emulador de dispositivos virtuales
- Instalar el Intel HAXM Emulator
- Activar tecnología de virtualización en la BIOS (depende de cada fabricante)
-
Sintaxis, palabras reservadas y expresiones
-
Variables
-
Tipos de datos
-
Métodos cadenas
-
Operadores
-
Condicionales
-
Ciclos
-
Métodos

Aprendizajes previos: básico
(1/2)
Aprendizajes previos: intermedio (2/2)
-
Arreglos (vectores y matrices)
-
ArrayList
-
Clases y objetos
-
Constructores
-
Herencia
-
Polimorfismo
-
Encapsulación
-
Abstracción
-
Interfaces

Perfil del desarrollador

Paciencia
Perseverancia
Investigación
Vamos a crear nuestra primera aplicación

Crear nuevo proyecto
Paso1
Si no tienes un proyecto abierto, en la ventana Welcome to Android Studio haz clic en Start a new Android Studio project.

Paso1
Si tienes un proyecto abierto, selecciona File > New Project.

Crear nuevo proyecto
Paso2
Configurar el proyecto - Click en next

Nombre de la app (Inicia con letra, sin espacios, ni caracteres especiales)
Dominio de la empresa (Usado al momento de la publicación)
Nombre del paquete Java (Automático)
Ubicación del proyecto (No olvidar)
Soporte C++ y Kotlin (Desactivar)
Crear nuevo proyecto
Empecemos!
Paso3
Seleccionar plataformas - Click en next

Crear nuevo proyecto




En cada plataforma seleccionada, debemos indicar la versión del API a partir de la cuál se dará soporte a la app
Ayuda a escoger la versión del API de acuerdo a estudios de uso de versiones de Android


Paso4

Actividad en blanco
Crear nuevo proyecto
Seleccionar actividad - Click en next
No seleccionaremos plantilla de inicio, pues crearemos un diseño desde cero
Paso5

Nombre de la actividad (Java)
Crear nuevo proyecto
Configurar actividad - Click en next
Generar vista para la actividad
Nombre de la vista (XML)
Compatibilidad con versiones anteriores
Es altamente recomendado dejar los valores por defecto, puesto que la app siempre tendrá una actividad principal, la cuál marcará el inicio de la ejecución

Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!

Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
PROJECT WINDOW


En la ventana de proyecto se listan archivos y carpetas de la aplicación.
Por defecto, se usa la vista Android.

Estructura del proyecto
APP

Por defecto, la aplicación usa el módulo App.
Módulo
Archivos fuente
Opciones de compilación
Unidades discretas de funcionalidad
Proyecto tiene uno o más
Permite dependencia entre ellos
Puede ser compilado, probado y depurado independientemente
(Contenedor)
Nuevo. File->New->New Module

Estructura del proyecto
MANIFESTS

Describe las características fundamentales de una aplicación y cada uno de sus componentes
Interfaz entre el sistema operativo de Android y la aplicación.
Estructura del proyecto
MANIFESTS
- AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.doblet.layouts">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
MANIFESTS
- AndroidManifest.xml
- xmlns:android
Espacio de nombres. Debe definirse como "http://schemas.android.com/apk/res/android
- package
Nombre del paquete Java que sirve como identificado único de la aplicación
- versionCode
Número entero que permite identificar la versión de la app. No se muestra al usuario, permite al sistema administrar internamente actualizaciones
<manifest>
Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
MANIFESTS
- versionName
Cadena de texto que permite identificar el número de la versión de la app. Se muestra al usuario. Si no se especifica, es 1 por defecto
- android:minSdkVersion
Número entero que permite indicar la versión mínima de API soportada por la aplicación. Impide instalación de la app en versiones anteriores. Es obligatorio
- android:targetSdkVersion
Número entero que permite indicar la versión de API en la que se creó el proyecto. Garantiza soporte para versiones anteriores, más no para las posteriores
Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
MANIFESTS
<application>
Incluye todas las declaraciones de la aplicación
- android:icon
Indica la referencia a la imagen que se usa para el icono de la aplicación.
-El ícono está ubicado en la ruta: res/mipmap
-El icono permite abrir la aplicación en el dispositivo
- android:allowBackup
Indica si se permite a la aplicación participar en copias de seguridad y restauraciones
Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
MANIFESTS
- android:theme
Recurso de estilo que define un tema para todas las actividades de la aplicación. Las actividades pueden sobrescribir los temas con sus propios atributos
<activity>
Especifica una actividad
- android:name
- android:label
Nombre de la clase Java de la actividad
Etiqueta para identificar la actividad
Todas las actividades se deben especificar en el manifiesto
Estructura del proyecto
Conozcamos los archivos y carpetas de nuestro proyecto!
MANIFESTS
<intent-filter>
- android.intent.action.MAIN
- android.intent.category.LAUNCHER
Especifica el punto de entrada de la aplicación
Especifica que la aplicación puede ser lanzada desde el icono en dispositivo
Etiquetas permitidas en el manifiesto para especificar componentes
<activity>
<service>
Actividades
Servicios
<receiver>
<provider>
Broadcast receivers
Content providers

Estructura del proyecto
JAVA

Archivos de código fuente en Java
- Nombres de paquetes (incluye JUnit)
- Clases de actividades
- MainActivity.java pertenece al paquete especificado al momento de crear el proyecto
- La clase MainActivity hereda de AppCompactActivity, que a su vez hereda de FragmentActivity y Activity

Estructura del proyecto
JAVA

MainActivity.Java
package com.example.doblet.layouts;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}

Estructura del proyecto
RES

Recursos que no son de código
- Vistas XML
- Textos de interfaz de usuario
- Imágenes de mapa de bits
Estructura del proyecto
RES
Recursos que no son de código
Recursos de animación
- Ubicación: res/anim
- Acceso: R.anim
Animaciones predeterminadas
Transiciones
Cuadro
- Ubicación: res/drawable
- Acceso: R.drawable
Recursos de menú
- Ubicación: res/menu
- Acceso: R.menu
Contenidos para menús de aplicación
Estructura del proyecto
RES
Recursos que no son de código
Recursos de imagen
- Ubicación: res/drawable
- Acceso: R.drawable
Gráficos con mapas de bits o XML
Recursos de vistas
Vistas para la interfaz de usuario
- Ubicación: res/layout
- Acceso: R.layout
Estructura del proyecto
RES
Recursos que no son de código
Recursos de color
Colores que cambian basados en el estado de la vista
- Ubicación: res/color
- Acceso: R.color
Estructura del proyecto
RES
Recursos que no son de código
Recursos de color
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
Estructura del proyecto
RES
Recursos que no son de código
Recursos de strings
- Ubicación: res/values
- Acceso: R.string
Definen strings, string arrays (incluyen formatos y estilos)
- Textos de la aplicación
- Facilitan la traducción de la aplicación a otros idiomas
- Evitar repetición de código (centralizado)
- String: Recurso XML que provee una cadena de texto simple
- String Array: Recurso XML que provee un arreglo de cadenas de texto
Estructura del proyecto
RES
Recursos que no son de código
Recursos de strings
<resources>
<string name="app_name">Layouts</string>
</resources>
Estructura del proyecto
RES
Recursos que no son de código
Recursos de styles
- Ubicación: res/values
- Acceso: R.style
Definen la apariencia y el formato de los elementos de la interfaz de usuario
Especifica propiedades como:
- Height (altura)
- Padding (margen interior)
- Font color (color de fuente)
- Font size (tamaño de fuente)
- Background color (color de fondo)
- Estilos de la aplicación
- Similar a CSS
- Separa el diseño del contenido
Estructura del proyecto
RES
Recursos que no son de código
Recursos de styles
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
Ejecución de app (1/2):
Emulador
Probar aplicaciones en dispositivo virtual


Ejecución de app (2/2): Smartphone
Probar aplicaciones en dispositivo real


Ejercicio

- Ingresar a la documentación oficial de Android

- Desarrollar primera aplicación:
Copy of Aplicaciones móviles - Introducción
By juan david ramirez londoño
Copy of Aplicaciones móviles - Introducción
Curso Desarrollo de aplicaciones para dispositivos móviles
- 501