fc2ブログ
Entry Navigation

Android NDK実際に作ってみます??

どうも、K3です。

年度末特有の忙しさを理由に、あやうくブログ更新をサボってしまうところでした。

第2回ということで、今回もNDKネタで行きたいと思います。

前回、ざっくりとですがAndroid NDK環境の導入をする話をしてますが、
おさらい的な話も含め、改めてNDKの概要についてお話します。

NDKとはnative development kitの略でAndroidのnative環境、すなわちLinux-OS環境で
ソフトウェアを作成するためのものです。
現在NDKはVersion5まで進化しており、Activityや画面制御・サウンド等、これまでJava側でしか
作成できなかった領域までも作成できるまでになってきています。

とはいえ、(個人的な見解では)NDKの主な使い方(使い道)は、
・Javaでは速度的に不利な部分
・既にC/C++言語ベースで流通している各種ライブラリの利用
・iPhoneと共通化(iPhoneでもC/C++ソースコードが普通にビルド出来ます)
が主な目的と思います。

また、Nativeライブラリを使うデメリットとして
・アプリサイズが肥大化する
・eclipseとcygwinの開発環境の2重化(面倒)
等があります。

ということで、小規模な機能をNDKでやろうとしてもデメリットが相対的に大きい状態であればあまりやる意味ありません。

さて、小話はこれくらいにしておいてNDKでのプログラミング練習と行きましょう。

1.NDKを利用するプロジェクトの作成
通常のAndroidプロジェクトを作成します。
ちなみにNDKでビルドするとき、Androidプロジェクト生成時に作られる"default.properties"内の
の"Project target"が参照されます。

OpenGL等のバージョン依存があるライブラリ使用時は注意が必要です。
→ターゲットのバージョン番号が合わないとビルド出来ません

また、今回はNDK5環境化でのビルドを行うため、NDK5/samples/ 配下に作成して下さい。
NDK5ディレクトリはNDK version5環境のトップディレクトリとなります。

2. 1.で作成したプロジェクトTOPで、ディレクトリに"jni"ディレクトリを作成

さらに以下のソースを jni/ 配下に作成して下さい!
Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := filetest
LOCAL_SRC_FILES := filetest.cpp

include $(BUILD_SHARED_LIBRARY)


filetest.cpp

#include
#include

#ifdef __cplusplus
extern "C" {
#endif

jstring
Java_com_nextsystem_android_filetest_loadfile( JNIEnv* env,
jobject caller, jstring jFileName )
{
const char *FileName = env->GetStringUTFChars(jFileName, NULL);
jstring retstr;

retstr = env->NewStringUTF(FileName);

// ファイル読込み処理
// ・・・

// native文字列開放をVMに通知
env->ReleaseStringUTFChars(jFileName, FileName);

return retstr;
}

#ifdef __cplusplus
}
#endif


全てのファイルを作成後、プロジェクトディレクトリ内で ndk-build シェルコマンドを実行することで、ライブラリファイル(*.so、shared object形式)が作成されます。


$ ndk-build
Gdbserver : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup : libs/armeabi/gdb.setup
Compile++ thumb : filetest <= filetest.cpp
StaticLibrary : libstdc++.a
SharedLibrary : libfiletest.so
Install : libfiletest.so => libs/armeabi/libfiletest.so


どうでしょう?出来ましたか?
次回はファイルの読込みとかやって行く予定です。
NDKv5では、STL(Standard Template Library)が使用できますので、コレも使ってみたいと思います。


スポンサーサイト



04
2011
comment
0