Android NDKの「bitmap-plasma」のソースコードを見る

plasma01.png
今回はAndroid NDKに含まれるサンプルプロジェクト「bitmap-plasma」を見てみる。このプロジェクトはネイティブコードからの画面描画を行うサンプルだ。

EclipseでAndroidプロジェクトを作成する。その際に、「Create project from existing source」をチェックして、Android NDKのサンプルフォルダにある「bitmap-plasma」を指定する。

plasma02.png
これでEclipseに「bitmap-plasma」プロジェクトが取り込まれた。

plasma03.png
ネイティブコードのビルドにわざわざCygwinを開くのは面倒なので、プロジェクトフォルダ内にEasyProjectGeneratorにあるビルド用のバッチファイルをコピーしておく。

plasma04.png
jniフォルダ内にApplication.mkというmakeファイルがある。これは不要っぽいので削除した。(本当は必要なのかもしれませんが、、、)

plasma05.png
そしてndk-buildによりネイティブコードをビルドする。

plasma06.png
最後にEclipseでプロジェクトを実行する。

plasma07.png
これでAndroidエミュレーターでサンプルプロジェクトが実行された。







plasma08.png
サンプルソースコードを少し見てみる。Plasma.javaのOnDraw()内でネイティブの描画処理が呼ばれている。また描画後すぐにinvalidate()が呼ばれるために描画領域が無効化されて再描画していた。

plasma09.png
次にネイティブコードのplasma.cを見てみる。メイン処理の中では、javaから渡された引数をAndroidBitmap_lockPixels()によりメモリとして取得、AndroidBitmap_unlockPixels()により開放、その間に描画がされていた。

plasma10.png
さらに見ると、AndroidBitmap_lockPixels()により取得したメモリには、x方向のピクセルデータ1列をfor()によりy軸方向に回していた。別に疑っていた訳ではないが、本当にベタなピクセルデータとしてネイティブ側からアクセスできるようだ。



カテゴリー「android」 のエントリー