Generar una app para Android con Coronalabs en 8 pasos

Para generar un fichero .apk instalable y ejecutable en un dispositivo Android, necesita seguir los siguientes pasos:

  1. Aprender un poco sobre LUA y Coronalabs. Por ejemplo mediante  el libro, muy recomendable,    “Mobile App Development with Corona: Getting Started” de  Brian G. Burton o con el  Getting starter de Coronalabs
  2. Instalar un editor de LUA para su entorno (Por ejemplo Zerobrane Studio) y escribir el programa (main.lua) y el fichero de parámetros de compilación (build.settings)
  3. Instalar el SDK de Java de Oracle  para el entorno en el que trabaje Windows o macOS
  4. Generar un certificado Java para firmar los apk (Debe guardarlo pues Google Play le obligará a usar el mismo certificado apra todas las versioens de una app)
  5. Descargar Coronalabs
  6. Ejecutar el mail.lua en el simulador de coronalabs
  7. Compilar o generar el build con coronalabs, obteniendo el .apk (Android aplication Package), e instalarlo en un dispositivo Android o distribuirlo mediante  Goole Play para lo cual necesita una cuenta de desarrollador de Google.
  8. Ejecutar el .apk en el dispositivo

¿Crear una app en nativo, hibrido o con un motor?

Con frecuencia me hacen preguntas del tipo  ¿Qué es mejor Windows o xOS? ¿Android o iOS? ¿Java o Swift? … y mi respuesta es siempre “depende”, si eres o aspiras a ser  un profesional tendrás que saber de todo (A mi me resulta indiferente trabajar en entorno windows, xOS o Linux, u otros menos conocidos) y usar tus conocimientos para satisfacer los requerimientos del cliente … si el cliente quiere Android, es poco serio que intentes venderle iOS.

Para un aficionado o recién llegado, que es quien suele preguntar,  mi respuesta es sencilla como eres tu quien se pone los requerimientos programa una app en lo que te resulte más cómodo, y si tienes que aprender un lenguaje de programación huye de los lenguajes nativos  cómo java o swift y aprende algún lenguaje de un motor  en los que  las curvas de aprendizaje y de satisfacción son más rápidas, así que recomiendo  Coronalabs (para aplicaciones de texto  o 2D, que usa el lenguaje  LUA) o Unity (para juegos y 3D), ambas son gratuitos y permite generar objetos para Android e iOS con un mismo fuente y te va sobrar para las aplicaciones que puedas imaginar (Ambas las usamos en Sonotrigger)

Asi, pero ejemplo mediante Coronalabs permite a partir de un fuente escrito en LUA generar una app para Android de Google sin necesidad de descargarse el Android Studio el SDK para Android o de usar un lenguaje de programación como  Java o kotlin, también una aplicación para iOS de Apple sin tener que reprogramar de nuevo la app en  Swift o Objective-C, pero también genera HTML5 que instalado en un servidor web permite la ejecución en un navegador o browser y objetos .dmg para MacOS de Apple y .exe para Windows de Microsoft ... un único programa fuente, ejecutables para cinco entornos distintos.

Debemos saber que hay un mayor número de instalaciones de Android que de iOS (En junio de 2018 77% vs 19%), sin embargo los ingresos de una aplicación es similar en Google Play que en Apple Store (Los usuarios de Apple compran más que los de Google, Aunque hay que restar la cuota anual de unos 100€), por otra parte Apple obliga  aun actualización más rápida que Google (El 76% de los dispositivos IOS tienen la ultima versión frente al 4,6%).

Una última advertencia para desarrollar una app para Android se pueden crear en un entorno Windows o xOS pues precisan de Java de Oracle que está disponible en estos entornos y algunos más, mientras que para una app para  iOS de Apple (iPhone, iPAD, etc.), se precisa de un ordenador con xOS pues requiere de XCODE,

Raspberry PI 3 model B y Raspbian: evaluando los lenguajes

Es un buen momento para recapitular el estado en el que nos encontramos.

El sistema con el que contamos lo componen:

  • La Raspberry Pi  cuyo modelo podemos comprobar con el comando de terminal cat /proc/cpuinfo y después buscar el modelo concreto en  esta lista de modelos y fabricantes. (Por ejemplo Hardware : BCM2835 corresponde a la  Pi 3 Model B 1GB a02082 Sony, UK).
  • El Sistema Operativo Raspbian iy para saber la versión con la que contamos podemos usar el comando de terminal uname -a  (Por ejemplo Linux raspberrypi 4.9.59-v7+ #1047 SMP Sun Oct 29 12:19:23 GMT 2017 armv7l GNU/Linux) o el comando cat /etc/os-release (Por ejemplo PRETTY_NAME=”Raspbian GNU/Linux 9 (stretch)” )

Los lenguajes de programación que hasta el momento hemos probado su correcto funcionamiento con el clásico programa “Hola mundo” y después su trabajo con el módulo GPIO para controlar un sencillo LED son los siguientes:

Software Version IDE Version Ejecución GPIO
Java 1.8.0_65 Bluej 3.1.7b Terminal Completo
Python 3.5.3 Integrado 3.5.3 Integrada Completo
Scratch 2 Integrado 2 Integrada Limitado
LUA 5.1.5 No Terminal Incompleta

Para futuros ejemplos en Raspberry Pi  usaré Python y para enseñar y disfrutar con los más pequeños Scratch.

Control de circuitos eléctricos con Raspberry Pi: Java

Después de hacer nuestro primer programa en Java, vamos a pasar a controlar un circuito eléctrico a través del GPIO de Raspberry PI.

Previamente hay que descargar las librerías de Java necesarias para trabajar con GPIO que están bajo el proyecto pi4j. En este caso además de poder usar el comando apt-get install pi4j‘ puede hacerlo directamente con el navegador en la URL http://get.pi4j.com/download/pi4j-1.2-SNAPSHOT.deb (Versiones anteriores dan el error “Unable to determine hardware version. I see: Hardware : BCM2835” ) descargándola y ejecutando.

Hay que comprobar que la libreria gpio ya está en el sistema mediante el comando  gpio -v

En JAVA la numeración de los PIN varía y así el 18 pasa a ser el 1 ver aquí.

El programa en JAVA quedaría así:

/**
 * led.java
 * Parpadea el LED 18
 */

import com.pi4j.io.gpio.GpioController;
import com.pi4j.io.gpio.GpioFactory;
import com.pi4j.io.gpio.GpioPinDigitalOutput;
import com.pi4j.io.gpio.PinState;
import com.pi4j.io.gpio.RaspiPin;

public class led
{
 public static void main(String[] args) throws InterruptedException {
 System.out.println("GPIO LED");
 // Crea controlador GPIO
 final GpioController gpio = GpioFactory.getInstance();
 // Pone PIN 18 como salida y ON
 final GpioPinDigitalOutput ledPin = 
 gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01,"LED");
 ledPin.high();
 System.out.println("LED ON");
 Thread.sleep(2000);
 // Pone PIN 18 como salida y OFF
 ledPin.low();
 System.out.println("LED OFF");
 gpio.shutdown();
} 
}

Algunos comentarios:

  • EN JAVA los comentarios pueden ir bloque entre /* y */  o en la linea a continuacion de //
  • Los métodos de la libreria GPIO controller pueden ser consultados en la documentación en linea.
  • Puede ajustarse el estado inicial (p.e. apagado) con gpio.provisionDigitalOutputPin(RaspiPin.GPIO_01, “LED”,ledPin.LOW); 
  • Puede programar parpadeo con la instrucción ledpin.blink(1000, 15000);
  • Puede cambiar el estado con  ledPin.toggle();
  • Puede tener un estado un tiempo determinado con ledPin.pulse(1000,true);
  • Para terminar gpio.shutdown();

Para ejecutar la clase led.class necesita ir al terminal y teclear java -classpath .:/opt/pi4j/lib/’*’ led

Programo en Java desde hace más de 15 años y mi conclusión es que en JAVA es muy dificil programar tareas sencillas (Por ejemplo Hola mundo)  pero muy fácil programar tareas complejas (Observe a potencia de los comandos).