Archivo de la categoría: Android

Android Virtual Device

Hola a todos,

compartiendo con todos ustedes más notas del curso de Android, en esta ocasión vamos a conocer el AVD; cómo usarlo para crear una máquina virtual de Android y depurar nuestras aplicaciones.

Aquí las notas: http://www.nachintoch.mx/teaching/mobile_dev/avd.pdf

Android Debug Bridge

Hola a todos,

continuando con el curso de Android, en esta ocasión les comparto unas notas sobre el ADB. Vamos a conocer esta herramienta y algunas de las instrucciones comunes que nos permiten interactuar con los dispositivos en los que probamos nuestras aplicaciones.

Sin más, aquí las notas: http://www.nachintoch.mx/teaching/mobile_dev/adb.pdf

Introducción a Android Studio (notas del curso de Android)

Hola a todos,

hoy les comparto una introducción a Android Studio. Vamos a conocer un poco de su historia, sus funciones principales y cómo nos ayuda a provechar el framework de Android.

El enlace a las notas: http://www.nachintoch.mx/teaching/mobile_dev/Android-Studio.pdf

Qué tomar en cuenta al desarrollar una aplicación para móviles (Notas del curso de Android)

Hola a todos,

aquí con otra entrega de las notas del curso de Android. En esta ocasión, vamos a continuar conociendo las capacidades y limitaciones de los dispositivos móviles en general; estas consideraciones no solo aplican a Android.

Las notas aquí: http://www.nachintoch.mx/teaching/mobile_dev/consideraciones-generales-dev-mob.pdf

Android como plataforma de desarrollo

Hola a todos,

Trayéndoles las siguientes notas del curso de Android, ahora vamos a conocer a Android como plataforma de desarrollo. Conoceremos las herramientas con las que podemos producir aplicaciones Android, cómo se administra la ejecución de las aplicaciones, cómo y qué se debe tomar en cuenta al desarrollar una aplicación.

Aquí las notas: http://www.nachintoch.mx/teaching/mobile_dev/android-framework.pdf

Android como Sistema Operativo

Hola a todos,

Continuando con el curso de Android, les comparto ahora un material que nos habla de las características de Android como sistema operativo. Un sistema operativo es un software bastante grande, que se encarga de administrar todos los recursos del sistema, atender las ordenes del usuario y mantener sus aplicaciones en ejecución.

¿qué mecanismos usa Android para realizar administrar la ejecución de un dispositivo móvil?

Aquí el enlace a las notas: http://www.nachintoch.mx/teaching/mobile_dev/android-OS.pdf

Introducción a Android (primeras notas del curso de Android)

Hola a todos,

Como comenté en el último post, estoy participando en un curso de Android y tengo el gusto de compartir con todos ustedes el material y las aplicaciones que desarrolle para el curso. Esto es algo que llevaba queriendo hacer hay ya un par de años; así que espero que encuentren el material de utilidad.

En esta primera publicación, les comparto unas notas que nos introducen a esta fantástica plataforma (si no lo habían notado ya, soy muy entusiasta de Android), nos cuenta sus orígenes y nos trae al presente para poder conocerla.

Más adelante, aplicaremos estos conceptos en aplicaciones; mientras conocemos el SDK y otras herramientas como Android Jetpack.

Enlace a las notas: http://www.nachintoch.mx/teaching/mobile_dev/introduccion.pdf

Android y Picasso: como resolver cargas infinitas (pérdida de objetivos-Target)

Hola a todos!

Si usas Picasso como una biblioteca tercera en tu aplicación Android, es posible que las descargas de imágenes hechas con Picasso parezcan nunca terminar.

Si activamos la caracterísitca de depuración de Picasso; como se muestra a continuación,

Picasso picasso = new Picasso.Builder(context).loggingEnabled(true).build();

al iniciar una carga con picasso, indicando algún objetivo

picasso.load("http://www.nachintoch.mx/images/shell_sort.gif").into(target);

es posible que veamos el siguiente mensaje en la consola de depuración (“Monitor Android”):

target got garbage collected

Esto significa que se ha ejecutado el recolector de basura y se ha llevado el target que le hayamos dado a Picasso al iniciar la carga. Al haber perdido el target, la imagen nunca se mostrará en el mismo y puede dejar nuestra aplicación en un estado inadecuado.


Esto ocurre debido a que Picasso mantiene referencias débiles a los target, por lo que son susceptibles a ser recolectados. Y aunque nuestra aplicación requiera un bajo consumo de recursos, siempre existe la posibilidad de que existan múltiples servicios en ejecución o alguna otra aplicación de alto consumo de recursos; como los juegos, y el SO al requerir liberar recursos, invoque el recolector de basura y ocurra este problema con los target.

Por lo anterior; considero una buena práctica aplicar siempre esta solución cuando se trabaje con Picasso para mitigar riesgos…


Si alguna vez has trabajado con referencias; por ejemplo, al implementar listas ligadas, probablemente tengas ya una idea de la solución, y es que es bastante simple.

Basta con mantener una referencia a nuestro target en el programa. No importa si declaramos una variable específica para los target, o si los almacenamos en un arreglo o en alguna estructura de datos; como una lista, un mapa o una cola concurrente.

Para hacer esto, podemos hacer lo siguiente. Puesto que Picasso requiere que los target implementen la interfaz com.squareup.picasso.Target podemos aprovechar los métodos que nos obliga a implementar en los target.

Para mantener una referencia a los target y evitar que sean recolectados, al iniciar la carga; hacemos la referencia al target:

Target target = someTarget;

Target[] targets = new Targets[]{someTarget};
LinkedList<Target> targets = new LinkedList<>();
targets.add(someTarget);
picasso.load("http://www.nachintoch.mx/images/rgb.jpg").into(someTarget);

Una vez que se haya realizado la carga, será invocado el método de Target onBitmapLoaded o onBitapFailed; dependiendo de si la carga fue exitosa o no. En ambos, incluimos el siguiente código para liberar los targets y con ellos el espacio en memoria: queremos que el recolector se lleve los targets después de que la carga haya concluido; no antes.

if(target == this) target = null;

int index = Arrays.asList(targets).indexOf(this);
if(index >= 0) targets[index] = null;

targets.remove(this);

Dependiendo de la estrategia que hayas usado para mantener una referencia “fuerte” al target y evitar la recolección de basura sino hasta este punto del programa; donde es esperado que ocurra.


Así que en pocas palabras, la solución a la recolección de los targets durante la carga con Picasso es mantener una referencia al target directamente.

Espero esto saque de algún apuro a alguien, yo perdí un día completo para descubrir esta solución y que el límite sea la imaginación.

Android Studio: Error “Unable to detect adb version…” al actualizar platform-tools o el IDE

Hola a todos!

Ya hemos resuelto algunos de los errores comunes que ocurren al usar Andorid Studio y el Android SDK en sus versiones más recientes en sistemas de 32 bits: es posible hacerlo sin tener que apuntar completamente a versiones previas, como hemos visto hasta ahora.

Esta semana vamos a resolver el problema de no ver nuestros dispositivos o emuladores para ejecutar una aplicación en desarrollo, o que el sistema no reconozca el ADB como un programa válido

unable-detect-adb


Esto se debe a que las nuevas versiones del ADB son programas de 64 bits y como ya he comentado en post anteriores, no es posible ejecutar estos programas en sistemas de 32 bits; por limitaciones físicas de los equipos…. Y no; instalar 2 veces el sistema operativo, no lo hace de 64 bits.

Puesto que no podemos ejecutar un programa de 64 bits por esta limitaciones, la solución es reemplazar el binario del ADB por uno de 32 bits. Podemos usar el que viene incluido con platform-tools v23.0.1, que podemos descargar a continuación:

https://dl-ssl.google.com/android/repository/platform-tools_r23.0.1-linux.zip

Descomprimimos el archivo y en el primer nivel jerárquico de directorios que contiene el ZIP, debe aparecer un archivo llamado “adb”

platform-tools

Copiamos el archivo “adb” y lo pegamos en

<android_sdk_home>/platform-tools

En este directorio ya exista un archivo llamado “adb”; debemos sobreescribirlo, pues al actualizar Android Studio o platform-tools se inserta la nueva versión de ADB; esa de 64 bits que nos da problemas, y debemos reemplazarla por esta versión de 32 bits para poderlo ejecutar.


Una vez que hayamos sobreescrito el archivo adb, Android Studio y el sistema deberían reconocer y ejecutar correctamente el ADB y deberíamos poder contactar nuestros dispositivos y emuladores Android.

correct-adb


-El límite es la imaginación-

Android Studio y Gradle: Error “SDK Build Tools is too low”

¡Hola a todos!

Continuamos los post sobre desarrollo de Android usando equipos de 32 bits, esta semana resolviendo un problema causado por las nuevas versiones de Gradle; que son de 64 bits y Build Tools versiones 24.x.x o superior.

Si usamos un sistema de 32 bits; de forma similar a como ya ve explicado en post anteriores, los binarios de 64 bits siempre se ejecutarán con error o no serán reconocidos del todo. Android Studio va a advertirnos a través de errores que las cosas van mal y en que en general todo se resume a que “SDK Build Tools is too low”.

Afortunadamente, como en otros casos, este error es bastante fácil de resolver; así que manos a la obra.


Para resolver este problema, debemos abrir el archivo <proyecto>/build.gradle y ubicar la versión de build tools en uso. La versión de 32 bits más reciente que podeos usar es la 23.0.3, cualquier superior a 24.x.x contiene binarios de 64 bits y no podemos usarla. Por lo que debemos cambiar la versión a una menor.

Es muy importante localizar todas las apariciones de la versión de build tools; por ejemplo en la versión de compilación o en los paquetes de soporte. El archivo debe de verse similar a este:

sdk_buildtools_too_low

Si después de hacer estas modificaciones tienes problemas, recomendaría revisar este otro post que resuelve un problema similar.


Además, debemos asegurarnos de usar una versión de gradle menor o igual a 2.2.3.

Para usar Gradle 2.2.3 o inferior; es importante primero que nada decir que no queremos actualizar la versión de gradle si Android Studio pregunta al cargar un proyecto. Este cuadro de diálogo aparece siempre que abrimos un proyecto con una versión de gradle que Android Studio identifica como obsoleta, nueva o es actualizado

gradle1

Si ya estamos usando una versión de gradle superior a 2.x, para cambiarla; debemos ir a File > Project structure. Al seleccionar, aparecerá un cuadro de diálogo con una barra de navegación lateral derecha. Por defecto, aparecerá seleccionada la sección “SDK Location”, cambiamos a “Project” dando clic.

gradle

Podemos dejar “Gradle version” como 3.3 SOLAMENTE si además estamos usando un envolvente (que es necesario para trabajar con las versiones más recientes de Android Studio), pero en todo caso es importante fijar la versión de Android en 2.2.3


Haciendo estos cambios deberíamos poder continuar desarrollando Android en nuestros equipos prontos a exhibirse en museos con el título: de cuando los enteros eran de 32 bits.

Así, que el límite sea la imaginación.

Saludos.