メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

Go mobileでサンプルアプリを動かした

go1.4

Androidに対応したのが1.4からなので、そうでない場合は最新版にします。 homebrewで入れたので、以下のコマンドを入力します。

$ brew upgrade go
$ go version
go version go1.4 darwin/amd64

合わせてGOPATHも確認します。 GOPATHの説明はこの記事がわかりやすかったです。 参考にして僕も同様の設定にしました。

...
GOHOME={適当なディレクトリ}
export GOPATH=${GOHOME}/third_party:${GOHOME}/myproject
PATH=$PATH:$GOHOME/third_party/bin:$GOHOME/myproject
# GOROOTはhomebrewでインストールした人は設定されてる。
# /usr/local/Cellar/go/1.4/libexec
...

Go mobile

Buildするにはmobileのパッケージが必要なので、Go mobileを持ってきます。

$ go get golang.org/x/mobile
// GOPATHの先頭のPATHにクローンされる
// $GOHOME/third_party/src/golang.org/x/mobile

NDK

Android NDKが必要になるので、Downloadします。 DownloadしたNDKのbinを実行します。

$ chmod a+x android-ndk-r10d-darwin-x86_64.bin
$ ./android-ndk-r10d-darwin-x86_64.bin

展開され、android-ndk-r10d(バージョンによって異なる)フォルダが生成されるので、NDKのパスを通します。今回はandroid sdkと同じ階層にndkとして設置しました。

...
NDK_ROOT={適当なディレクトリ}/ndk
...
PATH=$PATH:${NDK_ROOT}

コンパイル用セッティング

GoでAndroid向けにコンパイルするための設定をします。

NDKを用いて、androidのarm用のtoolchainを作成します。 install-dirに設定してるディレクトリは無くても勝手に生成されます。

$ ${NDK_ROOT}/build/tools/make-standalone-toolchain.sh --platform=android-16 --install-dir=~/dev/ndk-toolchain --arch=arm

作成したtoolchainを用いて、$GOROOT/srcコンパイラを作成します。

$ cd /usr/local/Cellar/go/1.4/libexec/src
$ export NDK_CC=~/dev/ndk-toolchain/bin/arm-linux-androideabi-gcc
$ CC_FOR_TARGET=$NDK_CC GOOS=android GOARCH=arm GOARM=7 ./make.bash

エラーを吐くことなく終了すれば成功です。

サンプルアプリをビルド

mobileの中にあるサンプルをビルドします。 サンプルアプリのあるディレクトリに移動します。

$ cd ${GOHOME}/third_party/src/golang.org/x/mobile/example/libhello

二つスクリプトがあります。

apkを作ります。 中でしていることは、

go build で共有ライブラリを作った後に ndk-build コマンドで NDK をビルドしているだけです。

その後antでapkを作成しています。

make.bashをラップして、adbでapkをインストール、Activityの起動のintentを投げています。

端末をつないで、次のコマンドでサンプルアプリを立ち上げられます。 そのままではなぜかANDROID_HOMEが見つからないと言われるので、引数かmake.bashをいじるなりして指定します。

$ ANDROID_HOME=$ANDROID_HOME ./all.bash

アプリが立ち上がったと思います。

次のように変更した場合はスクリプトに引数は不要です。

...
ant debug -Dsdk.dir={SDKのディレクトリ}
...

以上です。次はサンプルを動かすだけでなく、少しGoを書いてみたいです。

参考

Go 1.4 Release Notes / The Go Programming Language

go.mobileを動かしてみた。 / Qiita

これからGoを始める人のためのTips集 / The Wacul Blog

Android NDK Donloads / Google Developers

How to build the go mobile example / Google Group

How To: Cross compile Golang for Android / package playne

go.mobile を使った Android 開発のまとめ / Qiita

mobile: golang.org/x/mobile / GoDoc