AndroidのC/C++ネイティブアプリケーション開発を支援するGoogleの新ツール
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をリソース化している。
特集コンテンツ一覧
実例で学ぶGS Collections – Part 2
Donald Raab 2014年11月20日 午後8時3分
実例で学ぶGS Collections – Part 1
Donald Raab 2014年10月23日 午前2時24分
プロジェクトインセプション - 協力体制を作るミーティングの方法
James Bayer 2014年10月14日 午後7時57分
カンバンはどのように動作するか
Amr Noaman Abdel-Hamid 2014年9月7日 午後7時43分
自己組織化チームはなぜ必要か?
Sigi Kaltenecker and Peter Hundermark 2014年8月31日 午前2時2分
効果的なテストの文化を創る
Wes McClure 2014年8月31日 午前1時54分
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。