SlideShare a Scribd company logo
2015/2/21 GDG神戸 勉強会
Go on Android
ハンズオン&もくもく会
GDG神戸 野田 悟志
自己紹介
野田 悟志
AndroidとGoが好きなC#er
今年、GDG神戸のCo-Managerになりました
あと、最近噂のPolymerに興味はあるけど、全然調べてないの
で誰か知ってたら教えて!
ついに
Go1.4からNDKを使って、Androidアプリが作れるようになった
どっちも、ちょーかわいい!
そうそう
夢の共演やー!!
ちなみに、ぼく関西人じゃないです
さっそく
作れるアプリは2種類
1. UIも含め、完全にGoだけ(All Go)で作るNDK Apps
2. UIはJava(Android SDK)で、ロジックをGoで作るSDK Apps
NDK Appsはゲームアプリを想定し、UIはOpenGLで書く
SDK Appsは従来のJNIで作るのをGoで実装する
さっそく、といっても
NDK Appsは、UIをOpenGLで書かないといけないので、とてつ
もなくめんどk
普通のAndroidアプリを作るなら、SDK Appsの方が良さそう
今回はSDK Appsをつくる
使用した環境
Go環境
Ubuntu14.04 (VMware Player)
Android環境
Windows7
Android Studio 1.0.2
Go on Androidのビルド環境を作る
Go on Androidのビルド環境を作るには、NDKなどを用意する
必要があり、若干面倒
Dockerファイルが用意されているので、Dockerでビルド環境を
作る
Go on Androidのビルド環境を作る
Dockerをインストール
$ sudo apt-get update
$ sudo apt-get install docker.io
Dockerを有効にし、バージョンを確認
$ source /etc/bash_completion.d/docker.io
$ sudo docker --version
Go on Androidのビルド環境を作る
go.mobileが必要なので、go.mobileを取得
$ go get -d golang.org/x/mobile/...
Dockerファイルでビルド環境を作成
$ sudo docker build -t mobile 
$GOPATH/src/golang.org/x/mobile
Go on Androidのビルド環境を作る
出来たDockerイメージを確認
mobileが出来ていればOK
$ sudo docker images
こんな感じで出てくるはず
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mobile latest 5cfd030b6850 9 minutes ago 3.32 GB
サンプルをビルドしてみる
go.mobileのlibhelloというサンプルをビルドしてみる
$ sudo docker run --rm -v 
$GOPATH/src:/src mobile /bin/bash 
-c 'cd /src/golang.org/x/mobile/example/libhello 
&& ./make.bash'
サンプルをビルドしてみる
libhello/binディレクトリに移動すると、「Hello-debug.apk」というファ
イルがある
$ cd $GOPATH/src/golang.org/x/mobile/example/ 
libhello/bin
adb installで端末にインストールしてみる
$ adb install ./Hello-debug.apk
サンプルをビルドしてみる
「Hello」というアプリが入っているので、起動
上部に「Hello」と出る
libhelloディレクトリにあるmake.bashは、最後にAndroidアプリを作
るのにantでビルドしている
アプリはAndroidStudioでビルドするつもりなので、共有ライブラリ
が欲しい
共有ライブラリを作成する
Goのサンプルソースを用意したので、それを使って説明する
サンプルソースを取得
$ go get github.com/scarviz/gocalc
gobindをインストール
$ go install golang.org/x/mobile/cmd/gobind
共有ライブラリを作成する
サンプルソースのディレクトリに移動
$ cd $GOPATH/src/github.com/scarviz/gocalc
"go_" + パッケージ名となるディレクトリを作成
$ mkdir calc/go_calc
共有ライブラリを作成する
gobindを使って、必要になるファイルを自動生成する
$ gobind -lang=go github.com/scarviz/gocalc/calc > 
calc/go_calc/go_calc.go
$ gobind -lang=java github.com/scarviz/gocalc/calc > 
calc/Calc.java
go_calc.goは共有ライブラリの作成に必要なファイル
main.goにはgo_calcパッケージを含める必要がある
Calc.javaは後でAndroidのプロジェクトに含める
共有ライブラリを作成する
共有ライブラリを作成
$ sudo docker run --rm -v $GOPATH/src:/src 
mobile /bin/bash -c 'cd /src/github.com/scarviz/gocalc 
&& ./make.bash'
make.bashの中では、Go.javaとSeq.javaをコピーしているが、シ
ンボリックリンクの方が好ましいらしい
WindowsでAndroidアプリを作成するつもりなので、コピーにしてい
る
Androidアプリを作成する
作成手順
1. AndroidStudioを立ち上げ、適当なプロジェクトを作成
2. javaディレクトリ以下に、goディレクトリ以下を配置
3. go/calcディレクトリ以下にCalc.javaを配置
4. mainディレクトリ以下にjniLibsディレクトリを作成し、
  その下にarmeabi-v7aディレクトリ以下を配置
Androidアプリを作成する
以下のような配置になる
main
├─java
│ └─go
│ │ Go.java
│ │ Seq.java
│ │
│ └─calc
│ Calc.java
└─jniLibs
└─armeabi-v7a
libgojni.so
Androidアプリを作成する
ActivityクラスのonCreateメソッドなど、最初の処理でGo.initメソッ
ドを呼び出し、初期化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Go.init(getApplicationContext());
}
Androidアプリを作成する
後はgoの関数(Calc.javaのメソッド)を、Activityクラスなどから呼び
出すように実装
Runで端末(またはエミュレータ)にインストールし、実行する
当然だけど、エミュレーターならARMの方じゃないと動かないよ!
Androidアプリを作成する
Androidアプリを作成する
見てみろよ
それGoで動いてるんだぜ!
じつは
gobindのReadmeを見てみると…
https://godoc.org/golang.org/x/mobile/cmd/gobind#hdr-Type_restrictions
えいごがんばってよんでみた
使える型
 ・intの符号あり整数と、floatはOK
 ・string、boolもOK
・上記の型なら、パラメータや戻り値に使える
・上記の型なら、戻り値は一つ、または組み込み型のerrorと合わせ
て2つ使える ※errorはJava側では例外扱いになる
・上記の型なら、インターフェースも使える
・上記の型なら、構造体も使える
ちなみに
当たり前な感じもするけど、publicじゃなかったら、制約はなし
GoWebサーバも動いたよ!
ていうか、いざとなったらJSON使えばいいじゃん!くらいの気持ち
の持ちようで頑張る
あと
Go1.5(予定では2015/07)では
『iOS experimental support』
という話。
experimentalあたりはぐーぐる臭ただようわ
Go on Androidっていってるけど、Go on Mobileが正式名称っぽい
GothamGoの動画
http://vimeo.com/channels/852217/115307069
スライド
http://talks.golang.org/2014/gothamgo-android.slide#1
これからも期待したいですね!
ご清聴ありがとうございました!

More Related Content

2015/02/21 GDG神戸 Go on Android ハンズオン&もくもく会