2014年1月4日土曜日

[Android] アナログ時計のアプリをC/C++で改良

Analog clock on OpenGL by Android-NDK
前回の アナログ時計アプリ のOpenGLの部分をC/C++言語で書けるだけ書いてみました。

C/C++を利用した場合、Javaだけで書いたアプリと比べると次のような特徴があります。
・マシン語で動作するコードの比率が増える
・C/C++出使用するオブジェクトはガーベジコレクター(GC)の対象にならない
このおかげでアプリの高速化やバッテリー消費を抑えるなどの効果が期待できます。

今回の開発環境は次の通りです。
・64bit版 Windows8
・32bit版 Eclipse3.7 (Windows XPモードで使用)
・Android-SDK r22.3
・Android-NDK r9

針の画像です。
左から秒針、分針、時針のつもりです。
針の画像それぞれのピクセル数は32×128です。一番右の黒い塗りつぶしの領域は使用しません。

Eclipseのパッケージ・エクスプローラーで、プロジェクトの res フォルダーの下に
drawable-nodpi
というフォルダーを作り針の画像を配置します。

以下ソースです。
※ Android.mk と jni.cpp と glu.h の3つのファイルはEclipseのプロジェクト・エクスプローラーでjniというフォルダーを作ってそこに保存します。

アクティビティ(MainActivity.java)

Android.mk

jni.cpp

glu.h (Android-NDKのsampleの com.example.SanAngeles から抜粋しました)
※特別な権限(Permission)は不要なのでマニフェストは省略します。
Target SDK Version が4以上の設定でビルドできます。
Android1.6以降で動作します。
Android-NDKのビルド方法は環境に強く依存するので省略させて頂きます。
SH-03C(実機)、Android-SDK付属のエミュレーター、Blue Stacksで動作することを確認していますが動作保証は出来ません。

エミュレーターのスクリーンショットです。
前回のJavaだけで書いたアプリと同じように動作するように作ったので見た目の変化はありません。
1秒に1回しか画面が変化しないので、ログまでチェックしないとGCが減ったかどうかは分かりにくいですね。

関連ブログ
[Android] アナログ時計のアプリを作ってみました
[Android] ストップウォッチアプリの表示をC言語でスムーズに改造する
[Android] ストップウォッチアプリを作ってみました
[Android] 方位センサーを使ってコンパスアプリを作る
[Android] OpenGLでプロ生ちゃんをアニメーションさせる
[Windows8][Android] Can't bind to local 8600 for debugger
[Android] 端末の傾きに立方体を連動させる
[Android] フリーサイズの画像をOpenGLのテクスチャに表示する
[Android] Android-NDKでテクスチャを表示するには
[Android] OpenGLで頂点の多いポリゴンを扱うには

以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿