Android NDKでHelloWorldしてみる (without Eclipse)
タイトルどおりAndroid NDKを使ってhello worldしてみる(Eclipseは使わない)
と言っても、ほとんどNDKに入ってたhello-jniを1から作るだけだけど。
SDKとかNDKは準備してありPATHも通してあるものとする。
Projectを作る
まずProjectを作る
$ android create project -t android-15 -p `pwd` -k "opamp.experimental" -a HelloWorld
値は適当に調整して。"-t android-15"にするとandroid 4.0以降のみの対応になるので2.xとかならandroid-10くらいにするといい。-pはprojectを作るディレクトリを指定する。`pwd`だとカレントディレクトリになる。
Javaコードを記述する
まず、javaの方から記述してみる。例えば次のような感じ。
package opamp.experimental; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class HelloWorld extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /*helloメソッドからの戻り値を表示するプログラム*/ TextView t = new TextView(this); t.setText(hello()); setContentView(t); } public native String hello(); // これがhelloメソッド(あとでC言語で実装する)。nativeをつける static { System.loadLibrary("hello");//helloをロードするみたいな。 } }
とりあえずこれでおk。
jniディレクトリを作る
これ以降
$ cd <project>
まずprojectに移動してjniディレクトリを作る
$ mkdir jni
Cを書いてみる。
さっき作ったjniの中にhello.cを作る
$ touch hello.c
そしてこれに以下のように記述する
#include<string.h> #include<jni.h> /* jstringとかその辺はおそらくjniのものなのでjniで調べれば詳しくわかる(と思う)。 メソッド名はJava_から初めて"_"で区切ってパッケージ名、そのメソッドのある(javaの)ソース そして最後にメソッド名(ここではhello)というふうに命名する。 */ jstring Java_opamp_experimental_HelloWorld_hello(JNIEnv* env, jobject thiz){ return (*env)->NewStringUTF(env, "Hello World!!"); }
こっちはほんとsampleのコピーだけど...
Android.mkを作る
同じくjniのディレクトリにAndroid.mkを作り以下のように書き込む
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SRC_FILES := hello.c #include $(BUILD_EXECUTABLE) #このように書くと実行可能ファイルがビルドされる (main関数が必要) include ${BUILD_SHARED_LIBRARY} #このように書けば今回利用できる共有libraryが生成される。
最後のincludeはコメントにも書いたがBUILD_SHARED_LIBRARYとする。ちなみに実行可能ファイルを作ってみてandroid端末に持って行ってターミナルから実行しようとしたが権限が無くて結局できなかったし、chmodもunable to chmodと言われて結局権限付与もできなかった。(多分出来る端末もある)
ビルドのためのスクリプトを書く
シェルスクリプトなどでビルド用のスクリプトを書く。ぶっちゃけいるんだろうか?(規模が大きく複雑化したらあったほうが便利なのかな)
名前はなんでもいい。(今回はbuild_native.sh)とした。
#!/bin/sh ndk-build #Android-NDKのrootにPATHを通す必要があるよ。
とそんな感じで書けばおk。
アプリケーションをビルドしてapkを生成する。
実際にビルドしてみる。
$ cd <project> $ ./build_native.sh &&ant debug
でビルド。うまく行けば共有ライブラリが生成され続いてapkがビルドされ
適当に端末に送って実行
Dropboxなりなんなりで端末にapkを送ってインストールして実行してみる。
うまく行けばHelloWorldできてるはず。
面倒だったので画像はない...orz
終わりに
とりあえずhello worldならこんな感じかな。とりあえず今後もうちょっと勉強して色々できるようになりたい。
何かあったらその都度またここにメモしていくことにするよ。