golang / go

De Go mobiele subrepository voegt ondersteuning toe voor mobiele platforms (Android en iOS) en biedt tools om mobiele applicaties te bouwen.

Er zijn twee strategieën die u kunt volgen om Go in uw mobiele stack op te nemen:

  • Het schrijven van all-Go native mobiele applicaties.
  • Het schrijven van SDK-toepassingen door bindings te genereren vanuit een Go-pakket en deze aan te roepen vanuit Java (op Android) en Objective-C (op iOS).

Dit artikel bevat stap-voor-stap gidsen om uit te leggen hoe je deze strategieën te bereiken.

  • Tools
  • Native applications
    • Building and deploying to Android
    • Building and deploying to iOS
    • App icon
  • SDK toepassingen
    • Bouwen en uitrollen naar Android
    • Bouwen en uitrollen naar iOS
    • iOS Simulator

Hulpmiddelen

Note: U moet Go 1.5 of hoger hebben om mobiele hulpmiddelen te installeren. (Of tenminste Go 1.7.4 als u macOS Sierra gebruikt)

Go Mobile introduceert een nieuwe tool, gomobile, om u te helpen met het bouw- en bindingsproces.

gomobile ondersteunt nu Go Modules! $ gomobile bind -v -o android.aar -target=android ./package onder projectdirectory werkt nu.

Op macOS moet uXcode Command Line Tools geïnstalleerd hebben.

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

(De volgende secties helpen u hoe u de gomobile tool kunt gebruiken.)

Native applicaties

De native categorie omvat applicaties die volledig in Go zijn geschreven. Momenteel bevat de golang.org/x/mobile slechts een kleine set van pakketten die zich richten op:

  • App controle en configuratie
  • OpenGL ES 2 en ES 3 bindings
  • Asset management
  • Event management
  • Experimentele pakketten bevatten OpenAL bindings, audio, font, sprite en motion sensors

Er zijn verschillende voorbeeld native applicaties onder golang.org/x/mobile/example. We zullen het basisvoorbeeld bouwen en deployen naar zowel een Android als iOS apparaat.

Grab de applicatie.

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

Bouwen en deployen naar Android

Run gomobile build om een Android APK te bouwen.

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

Build commando zal een APK bouwen met de naam basic.apk.

Als een AndroidManifest.xml is gedefinieerd in de package directory, wordt deze toegevoegd aan de APK uitvoer. Anders wordt een standaard manifest gegenereerd.

Als u het adb commando op uw machine hebt geïnstalleerd, kunt u gomobile install gebruiken om de APK te bouwen en naar uw mobiele apparaat te pushen.

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

Bouwen en deployen naar iOS

Run gomobile build om het pakket als een iOS applicatie te bouwen.

Note: target=ios vereist dat de host machine macOS draait. U moet een ondertekeningsidentiteit verkrijgen en provisioneringsprofielen downloaden om verder te kunnen gaan.

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

Het build-commando bouwt een applicatiebundel, genaamd basic.app.

U kunt .app-bestanden implementeren door ze naar het apparaat te slepen.

  • In Xcode opent u Venster > Apparaten.
  • Selecteer het fysieke apparaat in het linkerdeelvenster.
  • Sleep het .app-bestand naar de sectie “Geïnstalleerde apps”.
  • Vink de optie “Items kopiëren indien nodig” aan

App-bundel uitrollen

U kunt ook applicatiebundels naar uw iOS-apparaat uitrollen met het hulpprogramma ios-deploy command line. Gebruik ios-deploy om de applicatie naar uw apparaat te pushen.

$ ios-deploy -b basic.app

App icoon

Het is mogelijk om een app icoon in te stellen door assets/icon.png.

SDK applicaties en het genereren van bindings

In deze categorie, laten we u zien hoe u een Go pakket kunt gebruiken in uw bestaande Android of iOS applicatie.

De voordelen van het volgen van deze strategie:

  • U kunt een Go-pakket van een mobiele app hergebruiken zonder significante wijzigingen in uw bestaande applicatie aan te brengen.
  • In gevallen waarin u een gemeenschappelijke codebasis wilt delen tussen uw Android- en iOS-applicatie, kunt u de gemeenschappelijke functionaliteit eenmaal in Go schrijven en deze aan de platform-specifieke code lijmen door het Go-pakket via bindings aan te roepen.

De huidige beperkingen zijn hieronder opgesomd.

  • Alleen een subset van Go-typen wordt momenteel ondersteund.
  • Taalbindingen hebben een prestatie-overhead.
  • Er zijn een paar beperkingen in hoe de geëxporteerde API’s eruit moeten zien als gevolg van de beperkingen van de doeltaal.

We zullen het voorbeeldpakket onder golang gebruiken.org/x/mobile/example/bind/hello om bindingen te genereren en Greetings-functie aan te roepen vanuit Java en Objective-C.

Grijp het voorbeeld door het onderstaande commando uit te voeren.

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

Bouwen en uitrollen naar Android

Note: Go Mobile draait op dezelfde architecturen als Go, wat momenteel ARM, ARM64, 386 en amd64-apparaten en emulators betekent. Met name Android op MIPS-apparaten wordt nog niet ondersteund.

  • Voer de volgende opdracht uit om het aar-bestand te genereren dat geschikt is om in Android-projecten te importeren:
$ gomobile bind -o app/hello.aar -target=android golang.org/x/mobile/example/bind/hello
  • Lanceer Android Studio.
  • File > Import Project… om het referentieproject te importeren van $GOPATH/src/golang.org/x/mobile/example/bind/android.

Android Studio

  • Bouw de toepassing en implementeer deze op het apparaat.

De app-module bevat de hoofdtoepassing die de hello.Greetings aanroept. Wanneer de toepassing wordt gestart, wordt de tekstweergave bijgewerkt met de geretourneerde tekenreeks.

Als u Android Studio niet gebruikt, moet u, om met bindingen voor Android te kunnen werken, Android SDK hebben geïnstalleerd en ANDROID_HOME omgevingsvariabele hebben ingesteld op het SDK-pad. U moet ook de NDK geïnstalleerd hebben; de gemakkelijkste manier is om het SDK commando sdkmanager ndk-bundle uit te voeren.

Aternatief, als u niet bekend bent met android ontwikkeling, en u wilt niet alle benodigde omgevingen instellen (Android SDK, Gradle, etc), dan kunt u dit Dockerfile gebruiken om de applicatie in plaats daarvan in docker te bouwen.

Buiten dat, als u probeert om yourmodule.aar in uw eigen project toe te voegen, na het kopiëren van het yourmodule.aar bestand en yourmodule.jar bestand naar de “androidapp” map gekopieerd te hebben, moet het volgende in het “androidappbuild.gradle” bestand bewerkt worden om de module correct te importeren.

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

Bouwen en uitrollen naar iOS

Note: target=ios vereist dat de host machine macOS draait.

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

Gomobile bind genereert een framework bundel genaamd Hello.framework. Open het voorbeeld Xcode project door het onderstaande commando uit te voeren.

$ open ios/bind.xcodeproj

Sleep de Hello.framework bundel naar het Xcode project. Vink “Copy items if needed” aan als u een andere kopie van de framework bundel nodig heeft binnen het Xcode anders. Anders zal het wijzigen van de broncode van het Go-pakket en het opnieuw uitvoeren van gomobile bind het hello.framework bijwerken.

Sleep Hello.framework

Als u besluit om Hello.framework in de hoofddirectory te houden, moet u de hoofddirectory toevoegen aan de Framework Search Paths in de doelinstellingen voor het bouwen.

Framework-zoekpad in Xcode-project

Uw projectlay-out moet eruitzien als hieronder.

Xcode-projectlay-out met Hello.framework

Bouw de applicatie en voer deze uit op de simulator of op een echt apparaat (Cmd+R). Wanneer de applicatie start, zal het label op de hoofdweergave worden aangepast met de string teruggegeven door GoHelloGreetings die de hello.Greetings functie aanroept.

Merk op dat u GoHelloGreetings ook vanuit Swift kunt aanroepen door Hello.te importeren

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

iOS Simulator

Met ingang van Go 1.5 werkt alleen darwin/amd64 op de iOS simulator. Om de simulator te gebruiken, moet u Xcode zo configureren dat deze alleen 64-bits binaire bestanden probeert uit te voeren.

Xcode komt overeen met de bitbreedte van de ARM-binaire bestanden wanneer deze op de X86-simulator worden uitgevoerd. Dat wil zeggen, als je Xcode instelt om zowel 32-bit als 64-bit ARM binaire bestanden te bouwen (de standaard), zal het proberen om 32-bit X86 binaire bestanden op de simulator te draaien, wat niet zal werken met Go vandaag. Wijzig de Xcode build instellingen om alleen 64-bit ARM binaries te bouwen, en de simulator zal de amd64 binary.

Leave a Reply