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/basic
Building and deploying to Android
Run
gomobile build
to build an Android APK.Grab to iOS
Build the Basic example to the Android and iOS Devices.
Grab for Android APK.
gomobile build
for Android APK.$ gomobile build -target=android golang.org/x/mobile/example/basic
Build コマンドは basic.apk.
パッケージ ディレクトリに AndroidManifest.xml が定義されている場合、APK 出力にそれが追加されます。
マシンに adb コマンドがインストールされている場合、
gomobile install
を使用してビルドし、モバイル デバイスに APK をプッシュできます。$ gomobile install golang.org/x/mobile/example/basic
iOS へのビルドとデプロイ
パッケージを iOS アプリケーションとして構築するには、
gomobile build
を実行します。$ gomobile build -target=ios golang.org/x/mobile/example/basic
build コマンドは、
basic.app
という名前のアプリケーション バンドルを構築します。.app ファイルをデバイスにドラッグ アンド ドロップすることにより、デプロイできます。
- 左ペインから物理デバイスを選択します。
- .app ファイルを「インストール済みアプリ」セクションにドラッグアンドドロップします。
- 「必要に応じてアイテムをコピー」オプションにチェックします。
あるいは、コマンドライン ユーティリティ ios-deploy ツールを使用してアプリケーション バンドルを iOS デバイスにデプロイすることが可能です。 ios-deploy を使用して、アプリケーションをデバイスにプッシュします。
$ ios-deploy -b basic.app
App 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/hello
Gomobile bindは
Hello.framework
というフレームワークバンドルを生成しています。$ open ios/bind.xcodeproj
Hello.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