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

Android開発ブログ、はじめました!

皆さん、初めまして。

私はネクストシステムMobile.Lab Android開発チームのK3です。
※短縮省略形?の"K3"で呼ばれてますので、ここではそのまま使おうと思います

この度ネクストシステムで、Androidのシステム開発に携わるメンバーでの開発ブログを始めることにしました。
既にiPhoneの開発ブログは約1年前にスタートしましたが、Androidチームでは特にやってませんでした。
が、「やっぱり何か書こうよっ」という機運も高まってきたように感じましたので、始めることにしました。

本ブログは数名のメンバーが持ち回りで担当し、週1ペース程度で更新を続ける予定です。
Androidに纏わるお話が中心ですが、広く話題を扱って行きます。
そういうわけで、本ブログも「Android Lab.」として各メンバーそれぞれの個性で、様々な話題が出てくると思います。どうぞお楽しみに。

[簡単な自己紹介]
中学生の頃SHARPのX1 turboでBASICとアセンブラ、その後X68000でC言語を覚え、お仕事では組込み制御システムの開発を長年やっていました。
で、Android端末のデバイスドライバ開発をやってた際にAndroid-NDKに触れ、それからAndroidの味を締めて深みにハマってしまい、今に至ります。
SDKを自由に使えるようになってきたのは割と最近の話だったりします。

そんな訳ですので、私の方では主にAndroid-NDKに関する話題をネタにしていこうと思っています。

・・・と書いてるともう長くなってきましたね。。。
ということで、次回からしっかり書き綴っていこうと思います。
Android-NDKに興味が有る方は、今のうちに cygwin と NDKをインストしておきましょう!

●簡単なインストール方法説明

1.Cygwin:http://cygwin.com/setup.exe
Cygwinは"Devel"(開発用コンパイラ一式)をInstallして下さい。

2.AndroiNDK:http://dl.google.com/android/ndk/android-ndk-r5b-windows.zip
Cygwinのhome/<ユーザ名>/ディレクトリに↑のzipファイルをドッカリ展開したら準備完了です。
展開したandroid-ndk-r5ディレクトリにPATHも通しておくと吉です。

3.sampleのコンパイル
cygwin上で
>cd /home/<ユーザ名>/android-ndk-r5/samples/hello-jni

としてhello-jniプロジェクトディレクトリに移動して、おもむろに
>ndk-build

で、コンパイル完了です。

あとは、eclipseでプロジェクトをImportしたら、フツーに動かしてあそびます。
こんな感じでチョー簡単にコンパイル出来ちゃいます。

それでは、これからどうぞよろしくお願いします。
08
2011
comment
0