Upload
satoshi-noda
View
312
Download
0
Embed Size (px)
Citation preview
さっそく
作れるアプリは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 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の方じゃないと動かないよ!
じつは
gobindのReadmeを見てみると…
https://godoc.org/golang.org/x/mobile/cmd/gobind#hdr-Type_restrictions
えいごがんばってよんでみた
使える型
・intの符号あり整数と、floatはOK ・string、boolもOK
・上記の型なら、パラメータや戻り値に使える
・上記の型なら、戻り値は一つ、または組み込み型のerrorと合わせ
て2つ使える ※errorはJava側では例外扱いになる
・上記の型なら、インターフェースも使える
・上記の型なら、構造体も使える
あと
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