- 2009年7月 5日 01:12
- Technical

本家フォーラムにちょっと興味深いネタが。
Registering a java method as a callback function - android-ndk | Google Groups
NativeからJavaのメソッドをコールバックで呼びたいんだけど...という質問。
そのレスの一つが
Use a native method to create the pipe and return the read end to the Java side, and that should be it.
JavaとNativeプロセスの間をパイプを使ってやったらどう?ってことらしい。
ああ、Javaってパイプ開けるのね...と思うと同時に、JNI使わなくてもNativeとやりとりしても(Android的に)いいんだろうか?という疑問が沸いた。
こないだリリースされたNDKでもJNI経由が前提っぽいし、今の時点ではオフィシャルにはNativeはJNI経由でということなんだと思う。
ただ、Androidのソースを見ているとJavaからsocketを使ってNativeとやり取りしている場所がある。
mydroid/frameworks/base/services/java/com/android/server/MountListener.java の中で、Nativeプロセスの"vold"に対してsocketを使っている。
おそらく、SDカードのマウント状態を監視している(と思われる)Nativeのvoldプロセスと、UI上やアプリへのintentでSDの抜き差しなどを通知しないといけないJava側のMountServiceとでいろいろやり取りしてるんだと思う。
...で、この方法、使って良いのかな?
もちろん、公式アナウンスが無いから表向きは「ダメ」なんだろうけど。今後SDKやNDKのバージョンアップとともに解禁になったりするのかな。対象デバイス固定の専用アプリなんかでは、どう実装しようが自由と言えば自由なんだろうけどね。
個人的にはframework部分も早くNDKで正式サポートして欲しい。気になる機能がたくさんあるし。
- Newer: Firefox3.5のCPU最適化バージョン
- Older: MTのMarkdownプラグインで「もっと読む」が勝手に入る件
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://www.swingingblue.net/mt/mt-tb.cgi/2134
- Listed below are links to weblogs that reference
- AndroidでJavaとNativeとのやり取り(JNIは絶対必要?Socketなどは...?) from きままな日記帳