golang / go
Go モバイル サブリポジトリはモバイル プラットフォーム (Android と iOS) のサポートを追加し、モバイル アプリケーションを構築するためのツールを提供します。
- すべて Go のネイティブ モバイル アプリケーションを書く。
- Go パッケージからバインディングを生成し、Java (Android) および Objective-C (iOS) からそれらを呼び出すことによって、SDK アプリケーションを書く。
この記事では、これらの戦略を達成する方法を説明するステップバイステップのガイドを掲載します。
- ツール
- ネイティブ アプリケーション
- Android へのビルドとデプロイ
- iOS へのビルドとデプロイ
- App icon
- SDK アプリケーション
- Android へのビルドとデプロイ
- iOS へのビルドとデプロイ
- iOS Simulator
Tools
注意事項: Go 1.0が必要です。5以上である必要があります。 (または、macOS Sierra を使用している場合は、少なくとも Go 1.7.4)
Go Mobile では、ビルドおよびバインド プロセスを支援する新しいツール gomobile を導入しています。
macOS では、Xcode Command Line Tools をインストールする必要があります。
$ go get golang.org/x/mobile/cmd/gomobile(次のセクションでは、gomobile ツールの使用方法について説明します)
Native アプリケーション
ネイティブ カテゴリには完全に Go で書かれたアプリケーションがあります。 現在、golang.org/x/mobile には、以下の項目に焦点を当てたパッケージの小さなセットのみが含まれています。
- App control and configuration
- OpenGL ES 2 and ES 3 bindings
- Asset management
- Event management
- Experimental packages includes OpenAL bindings, audio, font, sprite and motion sensors
golang.org/mobile には様々なサンプルネイティブアプリケーションが入っていますが、ここではその一部をご紹介します。org/x/mobile/example にあります。
Grab the application.
$ go get -d golang.org/x/mobile/example/basicBuilding and deploying to Android
Run
gomobile buildto build an Android APK.Grab to iOS
Build the Basic example to the Android and iOS Devices.
Grab for Android APK.
gomobile buildfor Android APK.$ gomobile build -target=android golang.org/x/mobile/example/basicBuild コマンドは basic.apk.
パッケージ ディレクトリに AndroidManifest.xml が定義されている場合、APK 出力にそれが追加されます。
マシンに adb コマンドがインストールされている場合、
gomobile installを使用してビルドし、モバイル デバイスに APK をプッシュできます。$ gomobile install golang.org/x/mobile/example/basiciOS へのビルドとデプロイ
パッケージを iOS アプリケーションとして構築するには、
gomobile buildを実行します。$ gomobile build -target=ios golang.org/x/mobile/example/basicbuild コマンドは、
basic.appという名前のアプリケーション バンドルを構築します。.app ファイルをデバイスにドラッグ アンド ドロップすることにより、デプロイできます。
- 左ペインから物理デバイスを選択します。
- .app ファイルを「インストール済みアプリ」セクションにドラッグアンドドロップします。
- 「必要に応じてアイテムをコピー」オプションにチェックします。
あるいは、コマンドライン ユーティリティ ios-deploy ツールを使用してアプリケーション バンドルを iOS デバイスにデプロイすることが可能です。 ios-deploy を使用して、アプリケーションをデバイスにプッシュします。
$ ios-deploy -b basic.appApp icon
assets/icon.png.SDK アプリケーションと生成バインディング
このカテゴリでは、既存の Android または iOS アプリケーションで Go パッケージを使用する方法について説明します。
この戦略に従うメリット:
- 既存のアプリケーションに大きな変更を加えずに、モバイル アプリケーションから Go パッケージを再利用できる。
- Android と iOS アプリケーション間で共通のコードベースを共有したい場合、共通の機能を一度 Go で書き、結合を通じて Go パッケージを呼び出すことによりプラットフォーム固有のコードにそれらを接着することができる。
現在の制限事項を以下に示します。
- Go の型のサブセットのみが現在サポートされています。
- Language bindings にはパフォーマンスのオーバーヘッドがあります。
- ターゲット言語の制限により、エクスポートされる API がどう見えるかという制限があります。org/x/mobile/example/bind/hello でバインディングを生成し、Java および Objective-C から Greetings 関数を呼び出します。
$ go get -d golang.org/x/mobile/example/bind/...Android への構築とデプロイ
Note: Go Mobile は Go と同じアーキテクチャで動作します。
- Android プロジェクトにインポートするのに適した aar ファイルを生成するには、次のコマンドを実行します。 を実行して、参照プロジェクトを $GOPATH/src/golang.org/x/mobile/example/bind/android.
Android Studio
- Build and deploy the application to the device.
app module contains the main application that invoke
hello.Greetings.Bunding the application for the device.The application module is in the main application from the $Subject of the $Subject of the Android.Build the development of the device. アプリケーションが起動されると、テキスト ビューは返された文字列で更新されます。Android Studio を使用していない場合、Android 用のバインディングで作業するには、Android SDK をインストールし、ANDROID_HOME 環境変数を SDK パスに設定しておく必要があります。 また、NDKのインストールも必要です。最も簡単な方法は、SDKコマンド
sdkmanager ndk-bundleを実行することです。あるいは、アンドロイド開発に慣れておらず、必要な環境(Android SDK、Gradleなど)をすべて設定したくない場合は、代わりにこのDockerfileを使ってアプリケーションをdockerで構築することができます。
+ repositories {+ flatDir {+ dirs '.'+ }+ }dependencies {...+ implementation (name:'yourmodulename', ext:'aar')}Building and deploying to iOS
Note: target=ios requires the host machine to run macOS.
$ cd $GOPATH/src/golang.org/x/mobile/example/bind$ gomobile bind -target=ios golang.org/x/mobile/example/bind/helloGomobile bindは
Hello.frameworkというフレームワークバンドルを生成しています。$ open ios/bind.xcodeprojHello.frameworkバンドルをXcodeプロジェクトにドラッグアンドドロップします。 Xcode プロジェクト内でフレームワークバンドルの別のコピーが必要な場合は、「Copy items if needed」にチェックを入れます。 そうでない場合は、Go パッケージのソースコードを修正してgomobile bindを再実行すると hello.framework.Hello.frameworkをメインディレクトリに置く場合は、ターゲットの Build Settings でFramework Search Pathsにメインディレクトリを追加しなければなりません。プロジェクトのレイアウトは以下のようになります。
ビルドしてシミュレータまたは実機で実行 (Cmd+R) してみてください。 アプリケーションが起動すると、メインビューのラベルが、
hello.Greetings関数を呼び出すGoHelloGreetingsから返された文字列で変更されます。なお、Swift からも Hello.framework をインポートして
GoHelloGreetingsを呼び出せます。@import Hello// ...let msg = Hello.GoHelloGreetings("gopher")iOS Simulator
Go 1.5 では iOS SIM では darwin/amd64 のみ動作するようにしました。 シミュレーターを使用するには、64 ビット バイナリのみを実行するように Xcode を設定する必要があります。
Xcode は、X86 シミュレーターで実行する場合、ARM バイナリのビット幅に合わせます。 つまり、32 ビットと 64 ビットの ARM バイナリをビルドするように Xcode を構成した場合 (デフォルト)、シミュレータ上で 32 ビットの X86 バイナリを実行しようとしますが、これは今日の Go では動作しません。 Xcode のビルド設定を変更して、64-bit ARM バイナリのみをビルドするようにすれば、シミュレータで amd64 バイナリが実行されます。
Leave a Reply