はじめに
久々に[パッケージのサイト]
(https://github.com/golang/mobile)を見ると、Dockerfileが用意されたようですが...(^^;)
以下の記事を参考にして、自分でもGo 1.4にmobileパッケージを追加してmobileパッケージ内のAndroidサンプルアプリケーションを動作させてみました。
注意事項
mobileパッケージのサンプルアプリケーションはAndroid 4.4 (API 19)以上が対象のようです。
<property name="target" value="android-19" />
Nexus 5 + Android 5.0の環境で動作させてエラーになる場合は、以下の記事を参考にして「$GOROOT/src/runtime/malloc.c」ファイルを修正して下さい。
Go on Android Lollipop crashes with ENOMEM - Google グループ
環境情報
今回使用した私の環境情報は以下の通りです。
開発環境
- Mac OS X 10.8.5
- Go 1.4.1(公式サイトtar.gz版:go1.4.1.darwin-amd64-osx10.8.tar.gz)
- Android NDK r10d
Android Studio
- Android Studio 1.0.1
- Java SE Development Kit 7u71
エミュレーター
- android-sdk_r24.0.2
- Android 4.4 (API 19)
実機
- Nexus 7 (2013)
- Android 4.4.4
セットアップ
Android NDK
「Downloads」から該当するファイルを選択してダウンロードします。
今回は「android-ndk-r10d-darwin-x86_64.bin」です。
「Installing the SDK」を参考にしてダウンロードしたファイルを展開します。
$ cd $HOME/Downloads
$ chmod a+x android-ndk-r10d-darwin-x86_64.bin
$ ./android-ndk-r10d-darwin-x86_64.bin
展開された「android-ndk-r10d」ディレクトリーを任意の場所に移動します。
$ mv android-ndk-r10d/ $HOME/app/
移動先を環境変数「NDK_ROOT」として設定します。
$ export NDK_ROOT=$HOME/app/android-ndk-r10d
展開されたディレクトリー内の「make-standalone-toolchain.sh」を実行してツールチェーンを作成します。バージョンr10dから「--toolchain=arm-linux-androideabi-4.6」オプションの指定が必要になっているようです。
$ cd $NDK_ROOT/build/tools/
$ ./make-standalone-toolchain.sh --platform=android-9 --install-dir=$NDK_ROOT --toolchain=arm-linux-androideabi-4.6 --ndk-dir=$NDK_ROOT --system=darwin-x86_64
mobileパッケージ
go get
コマンドにてmobileパッケージをインストールします。
$ cd $GOPATH/src
$ go get -d golang.org/x/mobile/...
Goのリコンパイル
ARM版Androidに対応させるためにGoをリコンパイルします。
$ cd $GOROOT/src
$ CC_FOR_TARGET=$NDK_ROOT/bin/arm-linux-androideabi-gcc-4.6 GOOS=android GOARCH=arm GOARM=7 ./make.bash
Android端末の準備
実機で動作させる方法とエミュレーターで動作させる方法があります。
実機で動作させる場合
パソコンと実機をUSBケーブルで接続した後、実機にて「設定」-「開発者向けオプション」-「USBデバッグ」を有効にします。
エミュレーターで動作させる場合
SDK Toolsを使う方法とAndroid Studioを使う方法があります。
Stand-alone SDK Toolsの場合
インストール
「Other Download Options」-「SDK Tools Only」にて、SDK Toolsをダウンロードします。
今回は「android-sdk_r24.0.2-macosx.zip」です。
ダウンロードしたzipファイルを展開します。
$ cd $HOME/Downloads
$ unzip android-sdk_r24.0.2-macosx.zip
展開した「android-sdk-macosx」ディレクトリーを任意の場所に移動します。
$ mv android-sdk-macosx/ $HOME/app/
移動先を環境変数「ANDROID_HOME」として設定します。
$ export ANDROID_HOME=$HOME/app/android-sdk-macosx/
SDKパッケージの追加
「Adding SDK Packages」に従って、SDKパッケージを追加インストールします。
Android SDK Managerを起動します。
$ cd $ANDROID_HOME/tools
$ ./android sdk
一覧にて、以下の4項目のみを選択した状態(右下のボタン名が「Install 4 Packages…」になっている状態)にしてインストールします。
- Tools
- Android SDK Platform-tools
- Android SDK Build-tools (最新バージョン)
- Android 4.4.2 (API 19)
- SDK Platform
- ARM EABI v7a System Image
必要に応じて、以下の2項目をインストールします。
- Extras
- Android Support Repository
- Android Support Library
Android Studioの場合
インストール
「Other Download Options」-「All Android Studio Packages」にて、Android Studioをダウンロードします。
今回は「android-studio-ide-1641136.dmg」です。
ダウンロードしたdmgファイルをダブルクリックすると、デスクトップ上に「Android Studio 1.0.1」がマウントされて中身のディレクトリーが表示されます。
表示されたディレクトリー内にて、「Android Studio」アイコンを隣の「Applications」アイコンにドラッグ&ドロップしてインストールします。
環境変数「ANDROID_HOME」を設定します。
$ export ANDROID_HOME=$HOME/Library/Android/sdk
SDKパッケージの追加
「Adding SDK Packages」に従って、SDKパッケージを追加インストールします。
Android SDK Managerを起動します。
$ cd $ANDROID_HOME/tools
$ ./android sdk
一覧にて、以下の2項目のみを選択した状態(右下のボタン名が「Install 2 Packages…」になっている状態)にしてインストールします。
- Android 4.4.2 (API 19)
- SDK Platform
- ARM EABI v7a System Image
必要に応じて、以下の1項目をインストールします。
- Extras
- Android Support Library
Android AVD
Android Virtual Deviceを起動します。
$ cd $ANDROID_HOME/tools
$ ./android avd
「Create…」ボタンをクリックした後、仮想デバイスを作成します。
表は「Nexus 7」を想定した設定例です。「AVD Name」は各自で好きな名称を入力して下さい。
項目名 | 設定値 |
---|---|
AVD Name | Nexus_7 |
Device | Nexus 7 (7.02", 1200 x 1920: xhdpi) |
Target | Android 4.4.2 - API Level 19 |
CPU/ABI | ARM (armeabi-v7a) |
Keybord | ■ Hardware keyboard present |
Skin | No skin |
Front Camera | Emulated |
Back Camera | Emulated |
Memory Options | RAM: 2048 VM Heap: 64 |
Internal Storage | 200 MiB |
SD Card | ● Size: 200 MiB |
Emulation Options | □ Snapshot ■ Use Host GPU |
一覧から作成した仮想デバイスを選択した後、「Start…」ボタンをクリックして起動します。
サンプルアプリケーションの実行
adb
コマンドを使用するため、パスを設定します。
$ export PATH=$PATH:$ANDROID_HOME/platform-tools
example/libhelloアプリケーション
アプリケーションを実行します。
$ cd $GOPATH/src/golang.org/x/mobile/example/libhello
$ ./all.bash
example/basicアプリケーション
FreeTypeをGoで使うためのパッケージをインストールします。
$ cd $GOPATH/src
$ go get code.google.com/p/freetype-go/freetype
ndk-build
コマンドを使用するため、パスを設定します。
$ export PATH=$PATH:$NDK_ROOT
アプリケーションを実行します。
$ cd $GOPATH/src/golang.org/x/mobile/example/basic
$ ./all.bash
さいごに
Goの活躍場所に「モバイル」という新しいジャンルが加わったのは嬉しいですね!q@w@p
「私もGoでAndroidしよう!」という方は、一度、David Crawshawさんの資料に目を通しておくことをオススメします。
[2015.02.14]
- make-standalone-toolchain.shの引数を追加
- golang.org/x/mobile/の指定を修正