«

»

nov 18 2013

Desarrollo nativo en Google Glass

glass_header

Hoy os traigo un artículo basado en mi propia experiencia programando con las Google Glass. Recientemente tuve la oportunidad en mi trabajo de adaptar la aplicación de realidad aumentada que desarrollamos, junaio, para las Google Glass, por lo que pude enterarme de las particularidades de este dispositivo que como ya sabemos, corre una versión de Android, pero hay que tener ciertas cosas en consideración, que pasaré a explicar a continuación.

Hay que tener en cuenta que a día de hoy no hay un GDK (Glassware Development Kit) oficial de Google para aplicaciones nativas, lo hay para glassware basado en peticiones de red con la Mirror API, pero esto de desarrollo para Android tiene poco, así que lo que nos interesa es saber cómo desarrollar nativamente.

Google lo que recomienda es empezar desarrollando aplicaciones con el Android SDK y, cuando aparezca el GDK oficial, será rápido integrarlas con éste. Así mismo en la web del GDK hay varios ejemplos que corren en Google Glass y podemos ver que su código es totalmente Android.

Actualización (08/05/24): Dados los últimos cambios en el GDK de Google, parte de esta información está desactualizada. Asún así puedes seguir para saber más sobre desarrollo para Glass.

Especificaciones

Lo primero son las especificaciones, para que podamos conocer un poco mejor el dispositivo para el que estamos programando nuestra app:

  • Sistema operativo Android 4.0.4
  • Pantalla de alta resolución equivalente a una pantalla de 25 pulgadas de alta definición a 2,5 metros. Para lo que nos concierne en desarrollo, es una pantalla de 640×360 píxeles
  • Camera de 5 MP y grabación de vídeo a 720p
  • Audio a través de Bone Conduction Transducer o, en la versión 2.0 de Glass, un par de auriculares estéreo por el puerto miniUSB
  • Conectividad Wifi (802.11b/g) y Bluetooth.
  • 12 GB de memoria utilizable, sincronizada con almacenamiento en la nube de google, 16 GB de memoria flash en total.
  • Batería que dura un día de uso habitual, pero no vamos a hacer un uso habitual ya que la realidad aumentada consume un montón de batería así que nos duraba como mucho 30 minutos con WiFi.
  • Se carga a través de un puerto miniUSB.
  • Procesador TEXAS INSTRUMENTS OMAP4430 y 1 GB de RAM. Aproximadamente 680 MB para el usuario.
  • Sensor Invensense MPU6050 = giroscopio de 3 ejes y acelerómetro de 3 ejes
  • Sensor Asahi Kasei AKM8975 = sensor geomagnético de 3 ejes, o sea una brújula.
  • Sensor de guiño al lado del ojo
  • Sensor de proximidad
  • No lleva GPS, la localización se obtiene del teléfono del cual está emparejado.
  • Trackpad en la patilla derecha para interactuar con los dedos, no funciona como un ratón sino más bien cambiado el foco del elemento seleccionado hacia el siguiente o hacia el anterior (cómo si pulsas Tabulador o Shift+Tabulador en un teclado)
  • Micrófono para recibir comandos de voz.
  • Botón de cámara para hacer fotos.

Para movernos por Glass podemos usar el trackpad, deslizando el dedo hacia adelante o hacia atrás. Deslizarlo hacia abajo es el equivalente a pulsar el botón de volver hacia atrás en un teléfono. Pulsando una vez es el equivalente a hacer click, y dejando pulsado accedemos a la búsqueda por voz.

Configuración del entorno de desarrollo

Lo primero que hacemos cuando tenemos un dispositivo y queremos desarrollar con él es habilitar el modo de depuración y conectarlo al ordenador. Para ello desde la pantalla de inicio de Glass, vamos a la pantalla de settings y luego vamos a la pantalla de información del dispositivo. Al hacer click aquí podremos movernos a la opción de Debug Mode y habilitarlo si no lo está.
ScreenShot335
Después de esto, las conectamos al ordenador, y por supuesto, tendremos que instalar los drivers apropiados para que nos aparezca listado en ADB. Afortunadamente ya tenemos los drivers de Google gracias al ADT, así que sólo tenemos que actualizar el archivo c:ANDROID_SDKsdkextrasgoogleusb_driverandroid_winusb.inf
Abrimos el archivo y buscamos las secciones [Google.NTamd64] y [Google.NTx86] y en cada una de ellas añadimos las siguientes líneas:

;Google Glass
%SingleAdbInterface% = USB_Install, USBVID_18D1&PID_4E11&REV_0216
%CompositeAdbInterface% = USB_Install, USBVID_18D1&PID_4E11&MI_01
%SingleAdbInterface% = USB_Install, USBVID_18D1&PID_9001&REV_0216
%CompositeAdbInterface% = USB_Install, USBVID_18D1&PID_9001&MI_01

Después tendremos que buscar las Glass en el Administrador de dispositivos de Windows y decirle que queremos instalar los divers manualmente desde una carpeta de nuestro equipo, y le damos la ruta al android_winusb.inf que hemos editado.
Una vez hecho esto, ya podemos ver las Glass en ADB y podemos lanzar aplicaciones desde nuestro IDE o desde la línea de comandos con adb install myGlassApp.apk.

Lanzar aplicaciones instaladas desde las propias Glass

Ya hemos conseguido instalar los drivers y ver las Glass desde nuestro IDE y lanzar aplicaciones desde él, pero ahora queremos llevarnos las Glass y enseñarle a alguien nuestra aplicación, pero tenemos un problema, ¿cómo lanzo ahora mi aplicación desde el launcher de Google Glass? No hay manera de encontrar nuestra aplicación desde el menú ni diciendo “Ok glass”, ¿cómo arreglamos esto?
Los que habéis dicho que hay que instalar otro launcher, habeís acertado. Tenemos dos opciones para instalar otro launcher, podemos instalar el launcher oficial de Android, que aunque es un poco tosco manejarlo con el trackpad, funciona y podemos ver todas las aplicaciones instaladas, o instalar un launcher alternativo más parecido al de Glass que se llama Launchy y es open source.
Para instalar el launcher de Android y la aplicación de Settings de android que es más flexible que la que viene con Glass, podemos instalar estos APKs tomados de la charla del Google I/O
http://goo.gl/EqV8u – adb install Settings.apk
http://goo.gl/ytfSn – adb install Launcher2.apk
Una vez instalado, se puede abrir directamente yendo a la pantalla de settings de Glass y al hacer tap en el trackpad, nos preguntará con qué aplicación queremos abrirlo y ahí podemos seleccionar Launcher.
Glass Launcher
Es importante no marcar como acción por defecto porque sino no podremos volver a los settings de Glass sin desinstalar el launcher (adb unistall com.android.launcher (por si acaso)).
Picture1Ahora ya podemos abrir el menú de apps y ver lo que hay
Picture2
¡Ya somos capaces de abrir nuestras aplicaciones desde Glass sin un ordenador!

Portando aplicaciones

¿Qué aspecto tiene una aplicación de Android corriendo en Google Glass? Pues la misma pero en una pantalla más pequeña, en landscape y además no es táctil, por lo que no podemos tocar botones o interactuar con la interfaz.

device-2013-10-08-135917

junaio corriendo directamente en Google Glass

Probablemente lo primero que queramos quitar sea la barra de estado y toda aquella interfaz táctil que ya no se pueda “tocar”, así mismo, habría que quitar todo lo que se pueda de la decoración de la interfaz que esté en medio y no aporte nada en una pantalla  tan pequeña. Así que después de enredar en la carpeta layout-land-small, llegué a esto:

Picture3

Interfaz de junaio después de eliminar parte de ésta

Además se podía mover a la pantalla de la izquierda o la de la derecha deslizando con el dedo en el trackpad, que explicaré a continuación.

Después de esto decidimos quitar la mayoría de funciones que no se iban a poder utilizar en Glass como el mapa o las listas y decidimos hacer una aplicación nueva llamada Mirage, que sería una versión simplificada de junaio que además permite seleccionar objetos de realidad aumentada a través de una cruceta que hay en el centro de la pantalla, simulando un click en esta posición.

Mirage Memory Channel

Mirage es una versión simplificada de junaio para Google Glass

Show me the code!

Vale, ya os he aburrido bastante con junaio y os prometí cómo desarrollar nativamente para Glass, ¿verdad? Vamos al grano.

Cómo saber si estamos corriendo en Google Glass

Nada tan sencillo como comprobar las constantes Build.BRAND y el Build.PRODUCT

boolean isGlass = false;
HashMap<String, String> wereables = new HashMap<String, String>();
wereables.put("Google", "glass");

if (wereables.containsKey(Build.BRAND) && Build.PRODUCT.contains(wereables.get(Build.BRAND))) 
{
   isGlass = true;

   requestWindowFeature(Window.FEATURE_NO_TITLE);
   getWindow().setFlags(LayoutParams.FLAG_FULLSCREEN, LayoutParams.FLAG_FULLSCREEN);
}

Warning!

Psst, puedes añadir otros wereables con Android como las EPSON Moverio en la lista de wereables y así saber si estás en unas gafas o no.

Cómo operar con el trackpad

Para recibir los eventos del trackpad, debemos sobrecargar el evento onKey

@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_CAMERA && event.getAction() == KeyEvent.ACTION_DOWN) {
			//HANDLE CAMERA BUTTON EVENT
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
			//HANDLE CLICK EVENT
		} else if (keyCode == KeyEvent.KEYCODE_BACK) {
			onBackPressed();
			return true;
		} else if (keyCode == KeyEvent.KEYCODE_TAB) { //glass and keyboards
			if (event.isShiftPressed()) { //left/reverse
					//HANDLE SWIPE BACKWARDS
			} else { //right
				//HANDLE SWIPE FORWARD
			}
		}
		return super.onKeyDown(keyCode, event);
	}

Hay otras implementaciones que usan un GestureDetector para controlar el trackpad e incluso saber cuánto se ha desplazado, pero no las he probado ya que ésta me funcionaba bien. Además puedes definir distintas acciones dependiendo de la vista que tenga el foco simplemente sobrecargando el método onKeyDown de dicha vista.

Voice commands

Aún no he tenido la oportunidad de integrar comandos de voz, eso lo dejaré para otra entrada en este blog, pero para poder usar voz como introducción de datos (lo cual es muy útil en Glass) antes había que instalar previamente otro apk, es el VoiceSearch.apk de Android, afortunadamente a partir de la versión XE9 del SO de Glass, las clases de reconocimiento de voz están disponibles. De eso ya hablaré otro día pero un libro muy recomendable con una sección entera dedicada a reconocimiento de voz en android es Android Sensor Programming de Wrox

Hacking Google Glass

Y para terminar os dejo con el vídeo de Google I/O sobre desarrollo para Glass. Desde entonces han aparecido actualizaciones de Glass y la gente que se ha dedicado a destripar sus software ha encontrado cosas que vienen deshabilitadas por defecto pero que dan a entender qué cosas se pueden o podrían hacer con ellas.

Más sobre realidad aumentada

Si quieres saber cómo hacer aplicaciones de realidad aumentada como junaio, para Android e iOS, puedes descargarte el SDK de metaio, que ya viene preparado para las Google Glass y otros wearable devices, con el que puedes desarrollar multitud de aplicaciones de realidad aumentada basada en imágenes 2D y objetos 3D, así como basada en localización.

Podéis ver la presentación de mirage en insideAR por mi compañero Stefan Misslinger.

Acerca del autor

Fernando F. Gallego

Desarrollador de junaio Augmented Reality para Android desde Munich. Me encanta cacharrear y probar ideas y conceptos nuevos para aprender. Tengo tantos pet projects que podría montar un zoo de aplicaciones. Además me encanta el sushi, los gintonics y los smartphones. Puedes encontrarme en twitter como @ferdy182

  • http://www.androcode.es Inmaculada Alcón

    Crack! ;)

    • http://www.forgottenprojects.com/ Fernando F. Gallego

      habló! :P

  • https://www.facebook.com/casor6 Casor Castro Ortiz

    Hola, buen articulo, te felicito, una pregunta donde puedo comprar/conseguir los google glass, no se si tendras una pagina o algun local en especial donde lo pueda conseguir, muchas gracias por tu atencion

    • http://www.forgottenprojects.com/ Fernando F. Gallego

      Hola,

      las Glass aún no se venden, son un prototipo al que poca gente elegida tiene acceso de momento y poco a poco van ampliando este grupo de gente pero de momento no hay una fecha ni sitio donde se vendan.

      Puedes probar en eBay o si vives en Estados Unidos, apuntarte en la web de Glass http://www.google.com/glass/start/how-to-get-one/

      • https://www.facebook.com/casor6 Casor Castro Ortiz

        Hola,
        Muchas gracias por tu tiempo, soy de Mexico y si me gustaria tener las Glass, en otra pagina lei que segun salian a la venta a mediados del 2014, tendre que esperar para tenerlos en mis manos, gracias

  • http://gravatar.com/tyflos tyflos

    Hola, un artículo muy bueno. Me gustaría saber más sobre comandos de voz con GoogleGlass. Piensas escribir ese artículo pronto? Gracias

    • http://www.forgottenprojects.com/ Fernando F. Gallego

      Hola, tengo pensado otra parte de este artículo que cubra el GDK incluyendo comandos de voz y triggers. Un saludo.

      • http://gravatar.com/tyflos tyflos

        Hola, suena genial! muchas gracias. Estaré pendiente :-)

  • Andres Rodriguez

    Que tal Fernando buen dia felicidades por tu aplicacion tengo una pregunta en mi trabajo no corre esta aplicacion debido a que la red esta restringida salimos por proxy quiero saver por que puerto de red se comunica ya que se tramitara la apertura de este puerto para su ejecucion gracias y saludos

    • http://www.forgottenprojects.com ferdy182

      Si te refieres a junaio, usa peticiones web estándar al puerto 80

      • Andres Rodriguez

        Muchas gracias estare al pendiente saludos

  • http://geekytheory.com geekytheory

    Hola buenas, buen articulo, una pregunta:

    ¿Puedo desarrollar aplicaciones para Google Glass sin tener unas google glass?, hay algun emulador que funcione?

    Saludos!!!

    • http://www.forgottenprojects.com ferdy182

      Buenas, a día de hoy no hay emulador de glass como lo hay para android wear. Lo más parecido es usar un teléfono con android o un emulador de teléfono. Funcionará siempre que no uses la librería GDK, es decir, si funciona en un teléfono funcionará en Glass, pero no tendrás el look and feel ni algunas clases de la librería que vienen bien para reconocer gestos o pintar las cards por ejemplo.

  • Pingback: Como empezar a desarrollar apps para Google Glass -ATC 2014()