前回に引き続きバッファロー社のパソコン用学習リモコン「PC-OP-RS1」をAndroidから制御するプログラムを作成します。今回と次回では、Androidフレームワークの作成、独自SDK、Androidアプリケーションまでを解説します。
日本Androidの会 金沢支部 出村成和
前回は、Linuxカーネルへのデバイスドライバの組み込みから始め、「HAL」(Hardware Abstraction Layer)レベルのドライバや、リモコンの信号を送受信するテストアプリケーションを作成しました。
今回はその続きとして、前回C/C++言語で作成した「libpcremocon.so」ライブラリを、Javaで作成するAndroidアプリケーションから呼び出せるようにします(図1)。
さらに、既存の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からでも呼び出せるようにします。