@@ -20,7 +20,7 @@ Goチームの人と連携し、大きめのissueに取り組んでいます。
20
20
21
21
本稿は@<tt>{gomobile}についてのまとめです。
22
22
とりわけ@<tt>{gomobile bind}のAndroid版について、内部で何を行っているのかについて説明します。
23
- Objective-C版も流れはだいたい同じはずですので 、本稿では割愛します。
23
+ iOS版も流れはだいたい同じはずですので 、本稿では割愛します。
24
24
25
25
本稿で使用する@<tt>{gomobile}のバージョンは次のものです。
26
26
@@ -85,7 +85,7 @@ Goで定義したinterfaceをJava側で実装してGoの関数に渡す、とい
85
85
86
86
== @<tt>{gomobile bind}の使用例
87
87
88
- たとえば次のようなGoパッケージがあるとします 。
88
+ たとえば@<list>{gomobile-go}のようなGoパッケージがあるとします 。
89
89
90
90
// listnum[gomobile-go][@<tt>{mypkg}パッケージ][go]{
91
91
package mypkg
@@ -100,7 +100,7 @@ func NewCounter() *Counter { return &Counter{ 5 } }
100
100
// }
101
101
102
102
これを@<tt>{gomobile bind}でビルドすると、@<tt>{Mypkg.aar }ファイルが生成されます。
103
- その@<tt>{Mypkg.aar }ファイルには次のようなJavaのクラスなどが定義されています 。
103
+ その@<tt>{Mypkg.aar }ファイルには@<list>{gomobile-java}のようなJavaのクラスなどが定義されています 。
104
104
105
105
// listnum[gomobile-java][@<tt>{Mypkg.aar}ファイルがもつ定義][java]{
106
106
public final class Counter {
@@ -175,7 +175,6 @@ GioはAndroidやiOS向けアプリケーションを生成できます。
175
175
@<tt>{gobind}はバインディングに必要なソースコードを生成します。
176
176
ソースコードを生成するだけでコンパイルは行いません。
177
177
178
- @<tt>{gomobile}が内部で@<tt>{gobind}を
179
178
Androidの場合、次のことを行います。
180
179
181
180
1 . @<tt>{$WORK/src/gobind}配下に@<tt>{*.go }ファイル、@<tt>{*.c }ファイル、@<tt>{*.h }ファイルを生成する
@@ -195,7 +194,7 @@ Androidの場合、次のことを行います。
195
194
Androidの場合は次のとおりです。
196
195
197
196
1 . @<tt>{$GOPATH}に@<tt>{$WORK}を追加し、@<tt>{gobind}という名前のパッケージをGoでビルドする。@<tt>{$WORK/android/src/main/jniLibs/[ARCH]}に@<tt>{libgojni.so }ファイルを出力する。
198
- 2 . @<tt>{$WORK/java}次のJavaファイルを$ {javac}でコンパイルする。@<tt>{$WORK/java-output}配下に@<tt>{*.class }ファイルを出力する。
197
+ 2 . @<tt>{$WORK/java}内のJavaファイルを@<tt> {javac}でコンパイルする。@<tt>{$WORK/java-output}配下に@<tt>{*.class }ファイルを出力する。
199
198
3 . @<tt>{$WORK/java-output}に対し、@<tt>{jar c -C}コマンドで@<tt>{classes.jar }ファイルを出力する。
200
199
4 . @<tt>{AndroidManifest.xml }、@<tt>{proguard.txt }、@<tt>{R.txt }ファイルなどを生成する。
201
200
5 . 今まで生成した@<tt>{libgojni.so }、@<tt>{classes.jar }などのファイルをすべてzipで固めて、@<tt>{*.aar }ファイルを出力する。
@@ -246,3 +245,13 @@ Goの仕様に手を入れなければならない可能性があります。
246
245
@<tt>{gobind}は@<tt>{main}パッケージを自動生成しますが、
247
246
「開発者は@<tt>{main}パッケージが依存するライブラリを指定できる」というmodule の仮定と合わないからです。
248
247
これについては@<tt>{gomobile}の仕様の大幅な見直しが必要な可能性があります。
248
+
249
+ == 終わりに
250
+
251
+ 本稿では@<tt>{gomobile}の様々なトピックについてざっくりと解説しました。
252
+ 特に@<tt>{gomobile}が内部で何をやっているかは、ほかに類を見ない解説だと自負しています。
253
+ @<tt>{gomobile}へのコントリビュートに必要な取っ掛かりとなる部分を説明したつもりです。
254
+
255
+ @<tt>{gomobile}はGoツールチェインの中ではマイナーな部類です。
256
+ そのためなのか、残念ながらあまり活発にメンテナンスされていません。
257
+ 本稿が@<tt>{gomobile}を使ってみよう、またはコントリビュートしてみよう、と思っていただけるきっかけになれば幸いです。
0 commit comments