androidでJNIを使うケースを調べてみた

プライベート方面と、仕事方面でもandroidに絡むかもしれないことになったので、軽く調査。

androidはSDKのエミュレータを動かしたことしかないので、レイヤ構成とか開発のやり方とかを調査中。

大まかな感じをつかむには以下の記事あたりが良いかも。

[Think IT] 第1回:Androidと組み込み開発 (1/3)

DalvikVM上でのJavaによるアプリの作り方はあちこちに書かれているので良いとしても、今回一番知りたいのは、

  • いろんなハードへの移植(ARMベース)
    • 基本的にはハードに乗っているチップに対応したドライバを探すか書けば良いはず。
  • androidが標準でサポートしていないデバイスのサポート方法
    • ドライバはもちろん、ミドル層、そしてVM上のアプリからどうやって制御するのか?

ざっと調べた感じだと、新規のデバイスはアプリからはJNI経由でnativeで作ったライブラリを呼び出し、ライブラリからLinuxのデバイスファイルを叩く(ドライバは別途)という感じでいいんだろうか。

ただどこかで読んだけどアプリからのJNI経由での制御は、まだ非公式の制御ルートという噂も。

しかも、Androidアプリで高速描画チューニングをするコツ(1/3)-@ITを読むと、JNI経由だとnativeを呼び出す際のオーバーヘッドが馬鹿にならないとも。大量のデータ転送系のデバイスとか大丈夫なんだろうか...?

Android JNI

AndroidでJNIを使う方法 - Android情報-ブリリアントサービス

Androidの実機への移植の実際 Androidの実機への移植の実際

手を付け始めたばかりなので、まだまだ調べることがたくさん。

Linuxでのモジュール・ドライバの開発経験が無いのでその辺も知っておかないといけなさそうな気もするな...。

コメント

  1. androidzaurus より:

    JNIは「使えるけど、実機G1とかHT-03Aにはインストールする手段がない」というのが現状です。
    Androidを自力でポーティングして、システムを自由に変更できるならなんとかなります。

    次期SDKではNative Development Kitという形でJNIをサポートするのでは、というもっぱらの噂。
    http://groups.google.com/group/android-ndk

    ではでは。

  2. findup より:

    ありがとうございます。
    現状のデバイスではJNI使うような仕組みはあとからインストールはできないようですね。
    今回はデバイスへのAndroidの移植も含むので、このあたりはJNIなども含めてほぼ自由にできるかなと思っています。
    ただAndroidシステムとしてのお作法ととかその辺が今ひとつ分かりにくいというか情報がなかなか無いので…。
    Linux部分に独自のプロセスを常駐させて複数あるハードウェアの調停をさせることはできるんだろうかとか
    「やろうと思えばできる」けれど「その方法はAndroid的に許されるのか」というところです。

    2.0ではアプリもNativeでという話しもありますし、NDKがサポートになるともっとできる幅が広がりますね。

タイトルとURLをコピーしました