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.

      Drag and drop Hello.framework

      Hello.framework をメインディレクトリに置く場合は、ターゲットの Build Settings で Framework Search Paths にメインディレクトリを追加しなければなりません。

      Framework Search Path in Xcode Project

      プロジェクトのレイアウトは以下のようになります。

      Xcode project layout with Hello.framework

      ビルドしてシミュレータまたは実機で実行 (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