連載
» 2009年08月31日 00時00分 公開

Androidがもたらす組み込み開発の新たな可能性(2):ネイティブコードとの連携によるAndroidの機能拡張 (3/3)

[藤田 幸治 株式会社富士通ソフトウェアテクノロジーズ,@IT MONOist]
前のページへ 1|2|3       

構築からサンプルアプリケーションの実行まで(続き)

5.Android NDKサンプルアプリケーションのプロジェクトを生成

 ここまでの準備ができたら「hello-jni」プロジェクトを取り込む。手順は以下のとおりだ。

 Eclipseのメニューから[File]−[New]−[Android Project]をクリックして、「New Android Project」ダイアログを表示する。

 「Contents」の「Create project from existing source」を選択し、「Location:」にAndroid NDKで提供されているサンプルアプリケーション「hello-jni」のプロジェクトフォルダ「D:\android-ndk-1.5_r1\apps\hello-jni\project」を指定する(画像7)。また、「Build Target」に「Android 1.5」を指定する(画像8)。


Eclipseの「New Android Project」ダイアログ(その1) 画像7 Eclipseの「New Android Project」ダイアログ(その1)

Eclipseの「New Android Project」ダイアログ(その2) 画像8 Eclipseの「New Android Project」ダイアログ(その2)

6.Android NDKサンプルアプリケーションの実行

 画面左側のPackage Explorerに表示されているサンプルアプリケーションのプロジェクト「HelloJni」を選択し、[Run]ボタンをクリックする。すると「Run As」ダイアログが表示されるので、ここで「Android Application」を選択し、[OK]ボタンをクリックする(画像9)。

サンプルアプリケーションの実行 画像9 サンプルアプリケーションの実行

 しばらくすると、Androidエミュレータが起動し、Android NDKサンプルアプリケーション「HelloJni」が起動する(画像10)(注7)。

Androidエミュレータでの実行結果 画像10 Androidエミュレータでの実行結果
※注7:
環境によっては「HelloJni」が起動するまでに数分程度、待たされる場合がある。


※参考:
アプリケーションモジュール
コンパイルされたJavaアプリケーションは、apkファイル「HelloJni.apk」として、以下に格納される。
D:\android-ndk-1.5_r1\app\hello-jni\project\bin\HelloJni.apk

アプリケーションのインストール
エミュレータ上で実行すると、仮想デバイス上でapkファイルがインストールされ、仮想デバイスのファイルシステム内の以下に格納される。

→Javaアプリケーション
/data/dalvik-cache/data@com.example.hellojni.apk@classes.dex

→C-Nativeライブラリ
/data/data/com.example.hellojni/lib/libhello-jni.so



7.C-Nativeライブラリの読み込みの確認

 最後に参考として、C-Nativeライブラリが正しく読み込めているかどうかを確認する方法を紹介する。

 エミュレータが起動している状態で、メニューから[Window]−[Open Perspective]−[DDMS]をクリックすると、Androidのデバッギングツール「DDMS(Dalvik Debug Monitor Service)」が表示される。

 DDMSの画面最下部にある「LogCat」ビューで以下のメッセージが表示されていれば、正しく読み込まれていることになる(画像11)。

dalvikvm: Trying to load lib /data/data/com.example.hellojni/lib/libhello-jni.so
dalvikvm: Added shared lib /data/data/com.example.hellojni/lib/libhello-jni.so 

「DDMS」画面 画像11 「DDMS」画面


 今回は、Android NDKとJNIによるAndroidの拡張方法について解説した。この仕組みを利用することで、ネイティブコードとの連携が可能となり、標準では不足しているAndroidの機能を拡張(組み込みデバイス固有の機能を追加)したり、既存資産を有効活用したりできる。

 ただし、拡張したインターフェイスに依存したアプリケーションを個々に開発すると、資産のポータビリティは減少してしまうので、例えば、バーコードリーダ・デバイスをAndroidに機能拡張する場合、バーコード用のデバイスドライバは、Androidで定義するインターフェイスに合わせ込むようにする。そして、合わせ込んだインターフェイスを利用するAndroidアプリケーション用ライブラリを定義して利用するなどの対応が必要となる。

 このような拡張インターフェイスを各メーカーが標準化していくことで、今後さまざまな組み込みデバイスで“専用のAndroid”が生まれてくることも十分に考えられる。Androidが組み込み分野にもたらす新たな可能性に大いに期待したい。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.