golang / go

Das Go-Subrepository für mobile Anwendungen fügt Unterstützung für mobile Plattformen (Android und iOS) hinzu und bietet Werkzeuge zum Erstellen mobiler Anwendungen.

Es gibt zwei Strategien, die Sie verfolgen können, um Go in Ihren mobilen Stack einzubinden:

  • Das Schreiben von vollständig nativen Go-Mobilanwendungen.
  • Das Schreiben von SDK-Anwendungen durch das Generieren von Bindungen aus einem Go-Paket und deren Aufruf aus Java (auf Android) und Objective-C (auf iOS).

Dieser Artikel enthält Schritt-für-Schritt-Anleitungen, um zu erklären, wie man diese Strategien erreicht.

  • Tools
  • Native Anwendungen
    • Erstellen und Bereitstellen für Android
    • Erstellen und Bereitstellen für iOS
    • App-Symbol
  • SDK-Anwendungen
    • Erstellen und Bereitstellen für Android
    • Erstellen und Bereitstellen für iOS
    • iOS Simulator

Tools

Hinweis: Sie benötigen Go 1.5 oder höher haben, um mobile Tools zu installieren. (Oder mindestens Go 1.7.4, wenn Sie macOS Sierra verwenden)

Go Mobile führt ein neues Tool, gomobile, ein, das Ihnen bei der Erstellung und dem Bindungsprozess hilft.

gomobile unterstützt jetzt Go Module! $ gomobile bind -v -o android.aar -target=android ./package unter dem Projektverzeichnis funktioniert jetzt.

Auf macOS müssen SieXcode Command Line Tools installiert haben.

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

(Die folgenden Abschnitte helfen Ihnen, das gomobile-Tool zu verwenden.)

Native Anwendungen

Die native Kategorie umfasst Anwendungen, die vollständig in Go geschrieben sind. Derzeit enthält die Seitegolang.org/x/mobilenur eine kleine Anzahl von Paketen, die sich auf:

  • Anwendungssteuerung und -konfiguration
  • OpenGL ES 2 und ES 3 Bindungen
  • Asset Management
  • Event Management
  • Experimentelle Pakete beinhalten OpenAL Bindungen, Audio, Font, Sprite und Bewegungssensoren

Es gibt verschiedene native Beispielanwendungen unter golang.org/x/mobile/example. Wir werden das grundlegende Beispiel sowohl für ein Android- als auch für ein iOS-Gerät erstellen und bereitstellen.

Grabben Sie die Anwendung.

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

Erstellen und Bereitstellen für Android

Starten Sie gomobile build, um eine Android APK zu erstellen.

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

Der Build-Befehl erstellt eine APK mit dem Namen basic.apk.

Wenn eine AndroidManifest.xml im Paketverzeichnis definiert ist, wird sie der APK-Ausgabe hinzugefügt. Andernfalls wird ein Standardmanifest generiert.

Wenn Sie den adb-Befehl auf Ihrem Rechner installiert haben, können Sie gomobile install verwenden, um die APK zu erstellen und auf Ihr mobiles Gerät zu übertragen.

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

Erstellen und Bereitstellen für iOS

Führen Sie gomobile build aus, um das Paket als iOS-Anwendung zu erstellen.

Hinweis: target=ios erfordert, dass auf dem Hostrechner macOS ausgeführt wird. Sie müssen eine Signieridentität erhalten und Bereitstellungsprofile herunterladen, um fortzufahren.

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

Der Build-Befehl erstellt ein Anwendungspaket mit dem Namen basic.app.

Sie können .app-Dateien durch Ziehen und Ablegen auf das Gerät bereitstellen.

  • Öffnen Sie in Xcode das Fenster >Geräte.
  • Wählen Sie das physische Gerät im linken Bereich aus.
  • Ziehen Sie die .app-Datei in den Abschnitt „Installierte Apps“.
  • Haken Sie die Option „Elemente bei Bedarf kopieren“ ab

Bereitstellen von App-Bündeln

Alternativ können Sie Anwendungsbündel auf Ihrem iOS-Gerät bereitstellen, indem Sie das Befehlszeilentool ios-deploy verwenden. Verwenden Sie ios-deploy, um die Anwendung auf Ihr Gerät zu pushen.

$ ios-deploy -b basic.app

App-Symbol

Es ist möglich, ein App-Symbol zu setzen, indem Sie assets/icon.png.

SDK-Anwendungen erstellen und Bindungen erzeugen

In dieser Kategorie zeigen wir Ihnen, wie Sie ein Go-Paket in Ihrer bestehenden Android- oder iOS-Anwendung verwenden können.

Die Vorteile dieser Strategie:

  • Sie können ein Go-Paket aus einer mobilen Anwendung wiederverwenden, ohne signifikante Änderungen an Ihrer bestehenden Anwendung vorzunehmen.
  • In Fällen, in denen Sie eine gemeinsame Codebasis für Ihre Android- und iOS-Anwendung nutzen möchten, können Sie die gemeinsame Funktionalität einmal in Go schreiben und sie mit dem plattformspezifischen Code verbinden, indem Sie das Go-Paket über Bindungen aufrufen.

Die aktuellen Einschränkungen sind unten aufgelistet.

  • Nur eine Teilmenge der Go-Typen wird derzeit unterstützt.
  • Sprachbindungen haben einen Performance-Overhead.
  • Es gibt ein paar Einschränkungen, wie die exportierten APIs aufgrund der Einschränkungen der Zielsprache aussehen sollten.

Wir werden das Beispielpaket unter golang.org/x/mobile/example/bind/hello verwenden, um Bindings zu generieren und die Funktion Greetings von Java und Objective-C aus aufzurufen.

Das Beispiel kann mit dem folgenden Befehl aufgerufen werden.

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

Erstellen und Bereitstellen für Android

Hinweis: Go Mobile läuft auf den gleichen Architekturen wie Go, was derzeit ARM-, ARM64-, 386- und amd64-Geräte und Emulatoren bedeutet. Insbesondere wird Android auf MIPS-Geräten noch nicht unterstützt.

  • Führen Sie den folgenden Befehl aus, um die aar-Datei zu erzeugen, die für den Import in Android-Projekte geeignet ist:
$ gomobile bind -o app/hello.aar -target=android golang.org/x/mobile/example/bind/hello
  • Starten Sie Android Studio.
  • Datei > Projekt importieren… um das Referenzprojekt aus $GOPATH/src/golang.org/x/mobile/example/bind/android zu importieren.

Android Studio

  • Erstellen und Bereitstellen der Anwendung auf dem Gerät.

Das App-Modul enthält die Hauptanwendung, die die hello.Greetings aufruft. Wenn die Anwendung gestartet wird, wird die Textansicht mit dem zurückgegebenen String-Wert aktualisiert.

Wenn Sie nicht Android Studio verwenden, müssen Sie, um mit Bindungen für Android zu arbeiten, Android SDK installiert haben und die Umgebungsvariable ANDROID_HOME auf den SDK-Pfad setzen. Außerdem muss das NDK installiert sein; am einfachsten ist es, den SDK-Befehl sdkmanager ndk-bundle auszuführen.

Alternativ können Sie, wenn Sie mit der Android-Entwicklung nicht vertraut sind und nicht alle erforderlichen Umgebungen (Android SDK, Gradle usw.) einrichten möchten, stattdessen diese Dockerdatei verwenden, um die Anwendung in Docker zu erstellen.

Außerdem, wenn Sie versuchen, yourmodule.aar in Ihr eigenes Projekt einzufügen, müssen Sie die yourmodule.aar-Datei und yourmodule.jar-Datei in den Ordner „android\app“ kopiert haben, sollten Sie die Datei „android\app\build.gradle“ bearbeiten, damit Ihr Modul korrekt importiert wird.

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

Erstellen und Bereitstellen für iOS

Hinweis: target=ios erfordert, dass auf dem Host-Rechner macOS ausgeführt wird.

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

Gomobile bind erzeugt ein Framework-Bundle namens Hello.framework. Öffnen Sie das Xcode-Beispielprojekt, indem Sie den folgenden Befehl ausführen.

$ open ios/bind.xcodeproj

Ziehen Sie das Hello.framework-Bundle in das Xcode-Projekt und legen Sie es dort ab. Aktivieren Sie „Copy items if needed“, wenn Sie eine andere Kopie des Framework-Bundles im Xcode-Projekt benötigen. Andernfalls wird durch Ändern des Go-Paket-Quellcodes und erneutes Ausführen von gomobile bind das hello.framework aktualisiert.

Drag and drop Hello.framework

Wenn Sie sich dafür entscheiden, Hello.framework im Hauptverzeichnis zu belassen, müssen Sie das Hauptverzeichnis in den Zieleinstellungen für die Erstellung zu Framework Search Paths hinzufügen.

Framework-Suchpfad im Xcode-Projekt

Ihr Projektlayout sollte wie unten dargestellt aussehen.

Xcode-Projektlayout mit Hello.framework

Erstellen Sie die Anwendung und führen Sie sie auf dem Simulator oder einem tatsächlichen Gerät aus (Cmd+R). Wenn die Anwendung startet, wird die Beschriftung in der Hauptansicht mit der von GoHelloGreetings zurückgegebenen Zeichenkette geändert, die die Funktion hello.Greetings aufruft.

Beachten Sie, dass Sie GoHelloGreetings auch von Swift aus aufrufen können, indem Sie Hello importieren.

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

iOS Simulator

Ab Go 1.5 funktioniert nur darwin/amd64 auf dem iOS-Simulator. Um den Simulator zu verwenden, müssen Sie Xcode so konfigurieren, dass nur 64-Bit-Binärdateien ausgeführt werden.

Xcode passt die Bitbreite der ARM-Binärdateien an, wenn sie auf dem X86-Simulator laufen. Das heißt, wenn Sie Xcode so konfigurieren, dass es sowohl 32-Bit- als auch 64-Bit-ARM-Binärdateien erstellt (die Standardeinstellung), wird es versuchen, 32-Bit-X86-Binärdateien auf dem Simulator auszuführen, was mit Go heute nicht funktioniert. Ändern Sie die Xcode-Build-Einstellungen, um nur 64-Bit-ARM-Binärdateien zu erstellen, und der Simulator führt die amd64-Binärdatei aus.

Leave a Reply