NDKのソースをndk-buildコマンドでビルドをするとき、Android.mkに書いた内容が間違っていてビルドが上手くいかないことがある。
こうしたときはエラーメッセージを調べつつ原因を探していくことになるのだが、ビルドがどこまで進んだか、とかビルド中に使われた変数の値がどうなっているか、などが分かれば間違った原因を探るための手掛かりになる。
そうした用途に便利なのが$(error), $(warning), $(info)である。これらは元々Makefileの関数だが、Android.mkでもそのまま使える。実際には以下のようにして使う。
$(error エラー時のメッセージ) $(warning ワーニング時のメッセージ) $(info メッセージ)
早速試してみよう。
まずは適当なフォルダを作り、以下のような構成にする。
{project_folder} └── jni └── Android.mk
jniフォルダはNDKのデフォルトのソースフォルダで、本来はこの下にc/c++で書いたソースコードを置いていく。
このフォルダが無いと、ndk-buildを実行したときに「 Could not find application project directory !」というエラーとなってしまうので、とりあえず今は空のフォルダを作っておく。
Android.mkには以下の内容を記述する。
HOGE := this is hoge! $(info This is info mesage! HOGE:$(HOGE)) $(warning This is warning mesage!) $(error This is error mesage!)
上記では$(info)の例として、変数HOGEにセットされた値を表示している。
ファイルを保存したら、プロジェクトのルートフォルダでndk-buildコマンドを実行する。
結果は以下のようになる。
$ pwd {project_folder} $ ndk-build This is info mesage! HOGE:this is hoge! jni/Android.mk:4: This is warning mesage! jni/Android.mk:5: *** This is error mesage!. 中止.
この実行結果から以下のことが分かる。
・infoは単にメッセージを出力する。
・warningはメッセージに加え、ファイル名と行数を表示する。
・errorはメッセージに加え、ファイル名と行数を表示するとともに、その個所で停止する。
これらの関数を効果的に使うことで、不具合が起きている個所を特定するのが容易になるだろう。