26

Resumen - Curso de Bases Técnicas de Android

Espero que mis anotaciones durante el curso te puedan servir para hacer un repaso antes de presentar tu prueba. ¡Éxito!


¿Qué es Android?

  • Android es un sistema operativo Open Source de Google para dispositivos móviles, basado en el Kernel de Linux.

Retos de desarrollo

  • Disponibilidad
    • Variedad de dispositivos (hardware)
    • Versión del SO
    • Densidad de los dispositivos (pantallas)
  • Rendimiento
    • Memoria - CPU
  • Calidad
    • Que la aplicación haga lo que dice hacer
    • Workflow
    • Métricas de Diseño
    • Manejar el entorno de desarrollo
    • Testing

Consideraciones de compatibilidad

  • Identificadores del Hardware para Android
  • Versión de Android
    • minSdkVersion = Versión mínima de Android a la que le damos soporte (Cada versión tiene un número de API que hace referencia a la versión (15))
    • targetSdkVersion = Versión de Android objetivo de nuestro soporte (Cada versión tiene un número de API que hace referencia a la versión (26))

Activity

  • Son las diversas “pantallas” dentro de Android. Es sumamente importante tener el mayor control posible sobre el comportamiento de las actividades para así causar una mejor experiencia al usuario.
  • En Android Nativo todas las pantallas (activities) deben estar compuestas de dos archivos:
    • Un archivo Java con un objeto que herede de la clase Activity. Este archivo es el que controla la Interfaz.
    • Un Layout (.xml) que contiene la interfaz gráfica. Este archivo es el que el Java se encargará de mostrar en pantalla.

  • Ciclo de vida (resumen por @JuanGonzalez97)
    • onCreate(Bundle): Se llama en la creación de la actividad. Se utiliza para realizar todo tipo de inicializaciones, como la creación de la interfaz de usuario o la inicialización de estructuras de datos. Puede recibir información de estado de la actividad (en una instancia de la clase Bundle), por si se reanuda desde una actividad que ha sido destruida y vuelta a crear.

    • onStart(): Nos indica que la actividad está a punto de ser mostrada al usuario.

    • onResume(): Se llama cuando la actividad va a comenzar a interactuar con el usuario.

    • onPause(): Indica que la actividad está a punto de ser lanzada a segundo plano, normalmente porque otra actividad es lanzada.

    • onStop(): La actividad ya no va a ser visible para el usuario.

    • onRestart(): Indica que la actividad va a volver a ser representada después de haber pasado por onStop().

    • onDestroy(): Se llama antes de que la actividad sea totalmente destruida. Por ejemplo, cuando el usuario pulsa el botón de volver o cuando se llama al método finish().

Fragments

  • Son contenedores que tienen en su interior una porción de interfaz gráfica.
  • Un fragment entra en acción, por ejemplo, cuando se usa la barra inferior o superior de Android.
  • Los Fragments viven en actividades y tienen ciclos de vida, estos ciclos de vida están relacionados con el de la actividad.

  • **Clases de Fragments: **
    • FragmentManager = Es un manejador. Es importante trabajar con el soporte “getSupportFragmentManager” para que esté visible en todas nuestras versiones de Android.
    • Transacciones = Son las acciones que podemos realizar en el Fragment.
    • Commit = El resultado de una transacción. Lo que permite que ese resultado sea mostrado.

Intents

  • Nos sirven para unir componentes de una aplicación. Existen dos casos donde esto sucede:
  1. Explicitos = Donde se unen Activity’s dentro de la aplicación.
  2. Implicitos = Donde se unen Activity’s que vienen de diferentes aplicaciones.
  • Botón de Back = Android tiene este botón que simplemente navega en retroceso del flujo de la app.
  • Botón Up = Navega en Jerarquía del flujo de la información. Lo que hace es regresar al nivel superior de donde provino, diferente al botón de back que si retrocede en el flujo de la app.

Servicios

  • Es un componente de una aplicación que puede realizar operaciones de larga ejecución en segundo plano y que no proporciona una interfaz de usuario. Se originan en una Activity.
  • Pueden ser notificaciones, tracking, escuchar música,la lectura o escritura de un archivo y mucho más.

Acá está la documentación de Android para:

Broadcast Receivers

  • Receptor de transmisiones.
  • Siempre están alertas a lo que ocurre en el SO. Detecta cambios entre el SO y el Hardware.
  • Están definidos en el Android Manifest.

Ejemplo de Alarma:

publicclassAlarmReceiverextendsBroadcastReceiver {
	@overridepublicvoidonReceive(Context context, Intent intent) {
		Toast.makeText(context,
		"AlarmReceiver.onReceive()",
		Toast.LENGTH_LONG).show();
	}
}

En este ejemplo se crea una clase que hereda de BroadcastReceiver, se reescribe el método onReceive y se muestra un mensaje.

De esta forma se declara el ejemplo en el Android Manifest:

<applicationXXXXXXXXXXXXXXXXXXXXXXXXX ><XXXXXXXXXXXX><receiverandroid:name=".AlarmReceiver"android:process=":remote" /></application>

  • Como funciona:
    • Cualquier cambio que se produzca en el hardware, puede ser detectado por el BroadcastReceiver en el Android Manifest para que sea ejecutado el código pertinente.

Asynctask

  • Esta clase viene definida en el SDK de Android y sirve para trabajar con multiHilos (Cuando se ejecutan 2 o mas procesos al tiempo).
  • Las Asynctask son ideales para tareas de carga, descarga de datos o procesos que puedan entorpecer el hilo principal y, en consecuencia, la experiencia del usuario

  • Como funciona
    • Normalmente en el hilo principal se ejecuta onPreExecute(), en este método se suelen inicializar las variables si hace falta.
    • Una vez está creado el segundo hilo, puede enviar actualizaciones al hilo principal con el método publishProgress(), el hilo principal recibe la información enviada por el hilo secundario con el método onProgressUpdate() para mantener informado al usuario.
    • onPostExecute() suele ser un método del hilo principal para notificar que la Asynctask ha completado su tarea.

Ejemplo

private class DownloadFilesTask extends Asynctask<URL, Integer, Long> {
	protected Long doInBackground(URL... urls) {
		int count = urls.lenght;
		long totalSize = 0;
		for (int i = 0; i < count; i++) {
			totalSize += Downloader.downloadFile(urls[i]);
			publishProgress((int) ((i / (float) count) * 100));
			// Escape early if cancel() is called
			if (isCancelled()) break;
		}
		return totalSize;	
	}

	protected void onProgressUpdate(Integer... progress) {
		setProgressPercent(progress[0]);
	}

	protected void onPostExecute(Longresult) {
		showDialog("Downloaded " + result + "bytes");
	}
}
------------
// SELLAMADELASIGUIENTEMANERA

new DownloadFilesTask().execute(url1, url2, url3);

Gradle

  • Es una herramienta que hace mucho más rápida la construcción de proyectos de desarrollo. Lo que hace es tomar tu código, dependencias y/o librerias, las reúne y construye el archivo ejecutable (.apk).
    • Integra dependencias
    • Crear un sistema de archivos
    • Generar un ejecutable
  • Está basado en un lenguaje de programación Groovy.
  • Usa Domaing Speficied Language - Json.
    Ejemplo
static mapping = {
	table'person'
	columns {
		name column:'name'
	}
}
  • Los archivos de configuración de Gradle son de extensión .Json

Archivos de Configuración.

  • El archivo de configuración principal es build.gradle. Acá puedes encontrar:
    • Dependencias que se pueden integrar (descarga las librerias y las integra).
    • Compilación del código (genera el apk).
    • Empaquetado.

Estructura del proyecto

MyApp/					*Project*
|
+- build.gradle
|
+- settings.gradle
|
+- app/					*Module* (wear, tv, mobile, etc)
	|
	+- build.gradle
	|
	+- build/
	|
	+- libs/
	|
	+- src/
		|
		+- main/		*Sourceset*
		|
		+- java/
		||
		|	+- com.example.myapp/
		|
		+-res/
		||
		|	+- drawable/
		||
		|	+- layout/
		||
		|	+- ...
		|	
		+- AndroidManifest.xml

Generación de un archivo APK

  1. El compilador de Android convierte tu código fuente a un tipo de bytecode pero más eficiente para la máquina virtual de Android estos son archivos .dex.
  2. Gradle empaqueta los archivos .dex y todos los recursos que usaste en la aplicación, imágenes, audios, videos, etc. generando un .apk
  3. Gradle firma tu apk resultante usando una keystore.
  4. Se puede generar un apk a modo de solo pruebas o general un apk listo para ser lanzado a la tienda, para cada caso será el tipo de keystore que debas usar.
  5. Como detalle notarás que al ejecutar el empaquetado intervendrá zipalign quien generará una versión optimizada del .apk para el teléfono.

Diagrama original

Google Play Services

  • Son los servicios que Google proporciona para volver más robustas nuestras aplicaciones.
  • Para funcionar, es necesario:
    • Que el dispositivo tenga instalado “Google Play Services”.
    • Que las librerias/dependencias correctas estén incluídas en la aplicación.
  • Algunos de los servicios de Google que tenemos disponibles:
APIBIBLIOTECA
Google+com.google.android.gms: play-services-plus:15.0.0
Google Account Logincom.google.android.gms: play-services-auth:15.0.0
Google Actions, Base Client Librarycom.google.android.gms: play-services-base:15.0.0
Google Sign Incom.google.android.gms: play-services-identity:15.0.0
Google Analyticscom.google.android.gms: play-services-analytics:15.0.0
Google Awarenesscom.google.android.gms: play-services-awareness:15.0.0
Google Castcom.google.android.gms: play-services-cast:15.0.0
Google Cloud Messagingcom.google.android.gms: play-services-gcm:15.0.0
Google Drivecom.google.android.gms: play-services-drive:15.0.0
Google Fitcom.google.android.gms: play-services-fitness:15.0.0
Google Location and Activity Recognitioncom.google.android.gms: play-services-location:15.0.0
Google Mapscom.google.android.gms: play-services-maps:15.0.0
Google Mobile Adscom.google.android.gms: play-services-ads:15.0.0
Google Placescom.google.android.gms: play-services-places:15.0.0
Mobile Visioncom.google.android.gms: play-services-vision:15.0.0
Google Nearbycom.google.android.gms: play-services-nearby:15.0.0
Google Panorama Viewercom.google.android.gms: play-services-panorama:15.0.0
Google Play Game Servicescom.google.android.gms: play-services-games:15.0.0
SafetyNetcom.google.android.gms: play-services-safetynet :15.0.0
Android Paycom.google.android.gms: play-services-wallet :15.0.0
Wear OS by Googlecom.google.android.gms: play-services-wearable:15 .0.0

Lenguajes para programar Android

  • xml (para la interfaz)
  • Java
  • Kotlin
  • JS
    • React Native (Nos ayuda a trabajar la interfaz con html, css y JS en lugar de XML. Igual debes controlar con Java o Kotlin)
    • ionic (Funciona completamente con html, css y JS, nada de Java. Aplicación híbrida)
    • Xamarin (Trabaja con C#)

Material Design

Consideraciones para trabajar con hardware

  • En Android puedes acceder al hardware tanto como quieras pero siempre debes solicitar permiso al usuario.
    • La ventana de solicitud de permiso puede ser personalizada tanto como gustes.
  • Android también permite trabajar con Hardware externo, para esto, siempre debes instalar la librería que te permita interactuar con este nuevo hardware.

Niveles de almacenamiento y tipos

  • Almacenar información = persistir la información. Hacer que la información siempre esté disponible así la aplicación deje de ejecutarse.
  • Niveles:
    1. Se almacena un archivo o permite su salida. Se usa el método file de Java para la escritura y lectura de archivos.
    2. sharedpreferences : es un modelo que permite la persistencia de datos primitivos utilizando el modelo clave:valor, en formato .xml. Los datos se almacenan en el .apk de la aplicación o en la memoria del teléfono. Se puede validar si existe una memoria SDcard instalada.
    3. Bases de datos : Aqui puedes manejar colecciones de datos y relaciones de datos. Se almacenan en el .apk y en SDcards.
    4. Web Services : el nivel de persistencia sobrepasa el teléfono porque la información se almacena en internet. Se pueden hacer validaciones para verificar si el usuario está sin internet, con plan de datos o en red wifi.

File y SharedPreferences

<h3>File</h3>
  • Crea un archivo de cualquier tipo.
  • Se trabaja con la clase file en Java/kotlin.
    • Ejemplo
privateFile getTempFile(Context context, String url) {
	Filefile;
	try {
		String fileName = Uri.parse(url).getLastPathSegment();
		file = File.createTempFile(fileName, null, context.getCacheDir());
	} catch(IOException e) {}
	returnfile;
}
<manifest...><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE" />
	...
</manifest>

<h3>SharedPreferences</h3>
  • Utiliza una estructura .XML en forma de pares KEY:VALUE.
  • El archivo se guarda en la carpeta shared_pref, dentro de la .apk.
  • Se usan mucho para registrar preferencias de los usuarios como los colores, temas, scores, etc.
  • Como definirlas:
SharedPreferences pref = getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);SharedPreferences.Editor editor = pref.edit();
editor.putString("email","[email protected]");
editor.pitString("nombre", "Carlos");
editor.commit();

Content Providers Bases de Datos y Network

<h3>SQLite</h3>
  • Android trabaja las bases de datos a través de SQLite.
  • Los datos solo se mantienen almacenados mientras la aplicación esté instalada. Si se desinstala la aplicación, se borra la BD.
  • A SQLite se puede acceder con Java/Kotlin/React Native.
<h3>Content Provider</h3>
  • Básicamente tiene un enlace con una base de datos que vive en el SO, es decir, que la información almacenada es accesible desde otras aplicaciones (por ejemplo los contactos que guardas en el teléfono, se guardan en un Content Provider y son accesibles desde otras aplicaciones).
  • Content Proviver tiene los siguientes métodos:
    • Insert()
    • Update()
    • Delete()
    • Query()
<h3>Network</h3>
  • Nivel de persistencia en el que los datos se almacenan en un servidor a través de un webservice.
  • El servidor siempre debe estar online. Es buena idea usar intermediarios como Firebase, azure, IBM Cloud, entre otros.

Tipos de Testing en Android y UI Test

Escribe tu comentario
+ 2
Ordenar por:
3
4965Puntos

Excelentes anotaciones, muy utiles para repasar 😃

1
5018Puntos

super bien resumido y todo

1
10989Puntos

Está muy genial
¿Cómo los dejaste anotados aquí en la plataforma? 😮

1
51431Puntos
un año

Puedes hacer tutoriales en los cursos 😃