Go mobileでサンプルアプリを動かした
go1.4
Androidに対応したのが1.4からなので、そうでない場合は最新版にします。 homebrewで入れたので、以下のコマンドを入力します。
$ brew upgrade go $ go version go version go1.4 darwin/amd64
合わせてGOPATH
も確認します。
GOPATH
の説明はこの記事がわかりやすかったです。
参考にして僕も同様の設定にしました。
- bash_profile
... 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
として設置しました。
- bash_profile
... 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
二つスクリプトがあります。
- make.bash
apkを作ります。 中でしていることは、
その後antでapkを作成しています。
- all.bash
make.bashをラップして、adbでapkをインストール、Activityの起動のintentを投げています。
端末をつないで、次のコマンドでサンプルアプリを立ち上げられます。
そのままではなぜかANDROID_HOME
が見つからないと言われるので、引数かmake.bash
をいじるなりして指定します。
$ ANDROID_HOME=$ANDROID_HOME ./all.bash
アプリが立ち上がったと思います。
次のように変更した場合はスクリプトに引数は不要です。
- make.bash
... ant debug -Dsdk.dir={SDKのディレクトリ} ...
以上です。次はサンプルを動かすだけでなく、少しGoを書いてみたいです。
参考
Go 1.4 Release Notes / The Go Programming Language
これから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