私もGo 1.4でAndroidアプリを動かしてみた!(自分用メモ)

  • 37
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

久々にパッケージのサイトを見ると、Dockerfileが用意されたようですが...(^^;)

以下の記事を参考にして、自分でもGo 1.4にmobileパッケージを追加してmobileパッケージ内のAndroidサンプルアプリケーションを動作させてみました。

注意事項

mobileパッケージのサンプルアプリケーションはAndroid 4.4 (API 19)以上が対象のようです。

抜粋:$GOPATH/src/golang.org/x/mobile/example/*/build.xml
<property name="target" value="android-19" />

Nexus 5 + Android 5.0の環境で動作させてエラーになる場合は、以下の記事を参考にして「$GOROOT/src/runtime/malloc.c」ファイルを修正して下さい。

Go on Android Lollipop crashes with ENOMEM - Google グループ

環境情報

今回使用した私の環境情報は以下の通りです。

開発環境

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/の指定を修正