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
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.
- 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.
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.
Uw projectlay-out moet eruitzien als hieronder.
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