golang / go

El subrepositorio móvil de Go añade soporte para plataformas móviles (Android e iOS) y proporciona herramientas para construir aplicaciones móviles.

Hay dos estrategias que puedes seguir para incluir Go en tu pila móvil:

  • Escribir aplicaciones móviles nativas totalmente Go.
  • Escribir aplicaciones SDK generando bindings desde un paquete Go e invocarlos desde Java (en Android) y Objective-C (en iOS).

Este artículo contendrá guías paso a paso para explicar cómo lograr estas estrategias.

  • Herramientas
  • Aplicaciones nativas
    • Creación e implementación en Android
    • Creación e implementación en iOS
    • Icono de la aplicación
  • .

  • Aplicaciones del SDK
    • Creación e implementación en Android
    • Creación e implementación en iOS
    • Simulador de iOS

Herramientas

Nota: Es necesario tener Go 1.5 o superior para instalar las herramientas móviles. (O al menos Go 1.7.4 si se utiliza macOS Sierra)

Go Mobile introduce una nueva herramienta, gomobile, para ayudarle con la construcción y el proceso de unión.

¡gomobile soporta Go Modules ahora! $ gomobile bind -v -o android.aar -target=android ./package bajo el directorio del proyecto funciona ahora.

En macOS, necesitarás tenerXcode Command Line Toolsinstalado.

$ go get golang.org/x/mobile/cmd/gomobile

(Las siguientes secciones te ayudarán a usar la herramienta gomobile.)

Aplicaciones nativas

La categoría nativa incluye aplicaciones escritas completamente en Go. Actualmente, el sitio webgolang.org/x/mobilecontiene sólo un pequeño conjunto de paquetes que se centran en:

  • Control y configuración de aplicaciones
  • Bindings OpenGL ES 2 y ES 3
  • Gestión de activos
  • Gestión de eventos
  • Los paquetes experimentales incluyen bindings OpenAL, audio, fuentes, sprites y sensores de movimiento

Hay varias aplicaciones nativas de ejemplo bajo golang.org/x/mobile/example. Construiremos y desplegaremos el ejemplo básico tanto en un dispositivo Android como iOS.

Consigue la aplicación.

$ go get -d golang.org/x/mobile/example/basic

Construir y desplegar en Android

Ejecuta gomobile build para construir un APK de Android.

$ gomobile build -target=android golang.org/x/mobile/example/basic

El comando Build construirá un APK llamado basic.apk.

Si se define un AndroidManifest.xml en el directorio del paquete, se añade a la salida del APK. De lo contrario, se genera un manifiesto por defecto.

Si tiene el comando adb instalado en su máquina, puede utilizar gomobile install para construir y empujar el APK a su dispositivo móvil.

$ gomobile install golang.org/x/mobile/example/basic

Construir y desplegar a iOS

Ejecutar gomobile build para construir el paquete como una aplicación iOS.

Nota: target=ios requiere que la máquina anfitriona ejecute macOS. Necesita obtener una identidad de firma y descargar perfiles de aprovisionamiento para poder continuar.

$ gomobile build -target=ios golang.org/x/mobile/example/basic

El comando de construcción construirá un paquete de aplicaciones, llamado basic.app.

Puede desplegar los archivos .app arrastrándolos y soltándolos en el dispositivo.

  • En Xcode, abra la ventana > Dispositivos.
  • Seleccione el dispositivo físico en el panel izquierdo.
  • Arrastre y suelte el archivo .app a la sección «Aplicaciones instaladas».
  • Marque la opción «Copiar elementos si es necesario»

Desplegar paquete de aplicaciones

Alternativamente, puede desplegar paquetes de aplicaciones en su dispositivo iOS utilizando la herramienta de línea de comandos de la utilidad ios-deploy. Utilice ios-deploy para empujar la aplicación a su dispositivo.

$ ios-deploy -b basic.app

Icono de la aplicación

Es posible establecer un icono de la aplicación mediante la creación de assets/icon.png.

Aplicaciones SDK y la generación de bindings

En esta categoría, le mostraremos cómo puede utilizar un paquete de Go en su aplicación Android o iOS existente.

Las ventajas de seguir esta estrategia:

  • Puedes reutilizar un paquete Go de una aplicación móvil sin hacer cambios significativos en tu aplicación existente.
  • En los casos en los que quieras compartir una base de código común entre tu aplicación Android e iOS, puedes escribir la funcionalidad común una vez en Go y pegarlas al código específico de la plataforma invocando el paquete Go a través de bindings.

Las limitaciones actuales se enumeran a continuación.

  • Sólo un subconjunto de tipos de Go están actualmente soportados.
  • Los bindings del lenguaje tienen una sobrecarga de rendimiento.
  • Hay algunas limitaciones en el aspecto de las APIs exportadas debido a las limitaciones del lenguaje de destino.

Usaremos el paquete de ejemplo bajo golang.org/x/mobile/example/bind/hello para generar bindings e invocar la función Greetings desde Java y Objective-C.

Consigue el ejemplo ejecutando el siguiente comando.

$ go get -d golang.org/x/mobile/example/bind/...

Construir y desplegar en Android

Nota: Go Mobile se ejecuta en las mismas arquitecturas que Go, lo que actualmente significa dispositivos y emuladores ARM, ARM64, 386 y amd64. En particular, Android en dispositivos MIPS aún no es compatible.

  • Ejecute el siguiente comando para generar el archivo aar que es adecuado para la importación en los proyectos de Android:

$ gomobile bind -o app/hello.aar -target=android golang.org/x/mobile/example/bind/hello
  • Lance Android Studio.
  • Archivo > Importar proyecto… para importar el proyecto de referencia de $GOPATH/src/golang.org/x/mobile/example/bind/android.

Android Studio

  • Construye y despliega la aplicación en el dispositivo.

El módulo app contiene la aplicación principal que invoca el hello.Greetings. Cuando se lanza la aplicación, la vista de texto se actualiza con el valor devuelto de la cadena.

Si no estás usando Android Studio, para poder trabajar con bindings para Android, necesitas tener instalado el SDK de Android y la variable de entorno ANDROID_HOME establecida en la ruta del SDK. También necesitas el NDK instalado; la forma más fácil es ejecutar el comando SDK sdkmanager ndk-bundle.

Alternativamente, si no estás familiarizado con el desarrollo de android, y no deseas configurar todo el entorno necesario (Android SDK, Gradle, etc), puedes utilizar este Dockerfile para construir la aplicación en docker en su lugar.

Además, si intentas añadir tumodule.aar en tu propio proyecto, después de copiar el archivo yourmodule.aar y el archivo yourmodule.jar a la carpeta «android\app», a continuación, la edición en el archivo «android\app\build.gradle» se debe hacer con el fin de hacer que su módulo importado correctamente.

+ repositories {+ flatDir {+ dirs '.'+ }+ }
dependencies {...+ implementation (name:'yourmodulename', ext:'aar')}

La construcción y el despliegue a iOS

Nota: target=ios requiere que la máquina host se ejecute macOS.

$ cd $GOPATH/src/golang.org/x/mobile/example/bind$ gomobile bind -target=ios golang.org/x/mobile/example/bind/hello

Gomobile bind generará un paquete de marco llamado Hello.framework. Abra el proyecto de muestra de Xcode ejecutando el siguiente comando.

$ open ios/bind.xcodeproj

Arrastre y suelte el paquete Hello.framework en el proyecto de Xcode. Marque «Copiar elementos si es necesario» si necesita una copia diferente del paquete del marco dentro de la Xcode de lo contrario. De lo contrario, modificar el código fuente del paquete Go y volver a ejecutar gomobile bind actualizará el hello.framework.

Arrastrar y soltar Hello.framework

Si decides mantener Hello.framework en el directorio principal tienes que añadir el directorio principal al Framework Search Paths en los objetivos Build Settings.

Ruta de búsqueda del framework en el proyecto de Xcode

El diseño de tu proyecto debe ser como el que se muestra a continuación.

Diseño del proyecto de Xcode con Hello.framework

Construye y ejecuta en el simulador o en un dispositivo real (Cmd+R). Cuando la aplicación se lance, la etiqueta de la vista principal se modificará con la cadena devuelta desde GoHelloGreetings que invoca la función hello.Greetings.

Nota que también puedes invocar GoHelloGreetings desde Swift importando Hello.

@import Hello// ...let msg = Hello.GoHelloGreetings("gopher")

Simulador de iOS

A partir de Go 1.5, sólo darwin/amd64 funciona en el simulador de iOS. Para utilizar el simulador, es necesario configurar Xcode para que sólo intente ejecutar binarios de 64 bits.

Xcode coincide con el ancho de bits de los binarios ARM cuando se ejecuta en el simulador X86. Es decir, si configuras Xcode para construir binarios ARM de 32 y 64 bits (el valor por defecto), intentará ejecutar binarios X86 de 32 bits en el simulador, lo que no funcionará con Go hoy en día. Modifique la configuración de construcción de Xcode para construir sólo binarios ARM de 64 bits, y el simulador ejecutará el binario amd64.

Leave a Reply