GoogleのFun Propulsion Labsが新たに提供するfplutilは,Android用のC/C++アプリケーション開発を容易にしてくれる,ツールとライブラリのセットだ。
fplutilを作り上げている主要な部分は,build_all_android.py, buildutil, libfplutil, android_ndk_perf.py の4つである。
build_all_android.py
このビルドスクリプトは,コマンドラインからネイティブアプリをビルド,インストール,実行する機能を持つ。Android NDK上でC/C++アプリをビルドするこのスクリプトは,ビルドの自動化と開発者のコンパイル/実行ループの合理化,いずれに対しても有効だ。
デバッグモードや最適化レベルなど,ビルド設定をコマンドラインから指定できる。同時に複数のデバイスを使用することも可能だ。
buildutil
Buildutilは,CMakeで使用する連続自動化スクリプトの記述プロセスを簡単にするための,Pythonモジュールのセットだ。buildutilを使ったAndroidアプリのビルド/アーカイブの例は,次のようなものになる。
-
最初のステップで,以後のオペレーションを実行する
android.BuildEnvironment
インスタンスを生成する。parser = argparse.ArgumentParser() buildutil.android.BuildEnvironment.add_arguments(parser) args = parser.parse_args() env = buildutil.android.BuildEnvironment(args)
-
このステップが完了すれば,ネイティブ(C/C++)コンポーネントにはndk-build,JavaコンポーネントとAPKにはantを使って,アプリをビルドする。
(rc, errmsg) = env.build\_all()
-
最後に,APKをzipファイルにアーカイブする。
env.make\_archive(['apks'], 'output.zip', exclude=['objs', 'objs-debug'])
Anrdoid用のNDKビルド以外にも,LiinuxやOSX, Windowsのビルドもサポートしている。
libfplutil
libfplutilはlibfplutil_main
とlibfplutil_print
という,C/C++アプリケーションの記述を容易にするための2つの静的ライブラリをビルドする,ネイティブなAndroid NDKモジュールで構成されている。
-
libfplutil_mainは,Android NativeActivityのエントリポイントであるandroid_main()を実装している。従来のC/C++エントリポイントであるint main()を,この関数がコールする。これにより,int main()というエントリポイントを持つ(標準的なCアプリケーションと同じように)アプリケーションを記述しても,このライブラリとリンクすることで(リンクの項参照),Android上で動作するようになる。
-
libfplutil_printは,標準出力ストリームに書き込みを行う関数に対する,一連のラッパ関数を実装している。これにより,printfを使用してターミナルへの書き込みを行うアプリケーションの出力を,Androidのログにリダイレクトすることが可能になる。
libfplutilをリンクすることで,標準的なHello,Wroldプログラムを,何も変更することなくコンパイルして,Android上で動作させることが可能になる。
android_ndk_perf.py
ネイティブ(C/C++)開発者に対して,アプリケーションのCPU使用率などの計測値を取得することによって,最適化作業をガイドするディスクトップツールである。Android_ndk_perfは開発者のワークステーション上で動作する。これにより,Androidデバイス上で動作するアプリケーションのトレースログが取得できる。アプリケーションのトレース情報が取得できれば,LinuxのPerfコマンドなどを使用してデータを検査するか,Webブラウザで検査するために,HTMLで視覚化することができる。
libfplutilは,githubからダウンロード可能だ。ドキュメントも合わせて用意されている。
Fun Propulsion Labsは,Androidなどの先進プラットフォーム用のゲームを専門とする,Google内のチームである。今年初めには,fluidのシミュレーションを含む2D物理エンジンであるLiquidFun 1.1をリソース化している。