29
2015/2/21 GDG神戸 勉強会 Go on Android ハンズオン&もくもく会 GDG神戸 野田 悟志

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

Embed Size (px)

Citation preview

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 Apps2. 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環境

Windows7Android 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 SIZEmobile 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メソッ

ドを呼び出し、初期化

@Overrideprotected 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

これからも期待したいですね!

ご清聴ありがとうございました!