前回に引き続きバッファロー社のパソコン用学習リモコン「PC-OP-RS1」をAndroidから制御するプログラムを作成します。今回と次回では、Androidフレームワークの作成、独自SDK、Androidアプリケーションまでを解説します。

日本Androidの会 金沢支部 出村成和

 前回は、Linuxカーネルへのデバイスドライバの組み込みから始め、「HAL」(Hardware Abstraction Layer)レベルのドライバや、リモコンの信号を送受信するテストアプリケーションを作成しました。

 今回はその続きとして、前回C/C++言語で作成した「libpcremocon.so」ライブラリを、Javaで作成するAndroidアプリケーションから呼び出せるようにします(図1)。

図1●Javaアプリケーションから家電を操作できるようにする
図1●Javaアプリケーションから家電を操作できるようにする
[画像のクリックで拡大表示]

 さらに、既存のAndroidフレームワークに追加してJavaのクラスライブラリを作り、それを独自SDKとして1つにまとめます。この独自SDKを利用すれば、家電をリモコン操作できるAndroidアプリケーションを作成できるようになります。

C/C++とJavaをつなぐJNI

 今回は、前回作成したPC-OP-RS1を制御する「libpcremocon.so」ライブラリを、Javaクラスライブラリとしても呼び出せるようにします。そのために、既存のAndroidフレームワークの「android.hardware」パッケージに「Pcremocon」クラスを追加します。

 このPcremoconクラスを利用して、前回のようにC/C++言語で作成したアプリケーションからだけでなく、Javaで作成したAndroidアプリケーションからでもPC-OP-RS1が制御できるようにします。

 ただ、libpcremocon.soライブラリは、C/C++言語で作成されているためCPUに依存しています。Javaコードからは直接呼び出せません。これは、Javaが元々CPUに依存しない仮想マシン上で動くように設計されているためです。

 しかし、Javaには、C/C++のようなネイティブの言語をJavaコードから呼び出す「JNI」(Java Native Interface)という機構があります。今回はJNIを使ってlibpcremocon.soライブラリの関数をJavaからでも呼び出せるようにします。