2014年12月11日木曜日

androidのbinderをWindows、Linux、MacOSXで実装する

毎回マニアックなプログラムのネタを書いていて、こんな日記を参考にする人がいるのかなぁと思っていたのですが、結構いるんですね。
さて、今日はプロセス間通信の移植の話。

androidのIPC(プロセス間通信)は/dev/bindrというバインダーデバイスを介して行われます。
androidではC/C++で実装されているネイティブサービスがこのバインダーを通してJavaレイヤと通信を行うのですが、このドライバー部分がネックとなりネイティブサービスをPC-Linux、WindowsやMacOSXで動かすことができません。
実機でしかネイティブサービスを開発できないのは大変不便なので、このbinderデバイス部分とC++の関連クラス一式をWindowsでエミュレーションして動くようにしてみました。
たぶんLinuxやMacOSXでも動きます。
dev/ashmemや複数のサービスを登録するなどはまだまだエミュレーションできませんが、数値や文字列だけを扱う関数ならば完全にエミュレーションで動かすことができます。
また、単独プロセスでサービスとクライアントを開発できるので、XcodeやVisualStudioなどの高度なIDEで開発を行うことができてとっても便利。

移植していて気付いたのですが、androidオリジナルのバインダーライブラリの設計の完成度の高さに感動します。
完全ロックフリーでマルチコアで高速動作するようになっているんですね。
どのような戦略で不完全なソースを高速化すれば良いのかとても勉強させられるコードです。

ソースはこちら
https://drive.google.com/file/d/0B5M9qMMg3tfQREJZekY0NDNNb00/view?usp=sharing

0 件のコメント:

コメントを投稿