ってことで、AndroidNDKr7がリリースされたので、さっそく中身をチェックしてみた。リリースノートをまるごと翻訳するのは他サイトに任せて、ここでは概要だけを。
Linux版Android NDKr7の不具合(?)
NDKr7を利用する前にひとつ注意することが。
Linux版Android NDKr7に含まれているawkのバージョンが古いものらしく、ndk-buildコマンドを実行するとエラーが表示される(MacOSX版では出てこないのだが)
この対策としては、NDKにあるawkをrenameして、プリインストールされているawkを利用するように変更する。これは早急にNDKr7bがリリースされて修正されるのでは、と。
% cd android-ndk-r7/prebuilt/linux-x86/bin
% mv awk awk-old
変更点の概要
AndroidNDKr7は、大きな変更として以下の点が挙げられる。
- ICS(IceCream Sandwich, Android4.0)対応
- CCache対応
指定できるオプションの追加等の小さな変更点についても、AndroidNDKr7のリリースノートに記載されている。
ICS対応
ICS(IceCream Sandwich, Android4.0)に対応した。これは、ICS対応のAndroidSDKがリリースされた時点で公言されていたこと。
Android2.3からNativeActivityに対応したように、NDKr7ではICSからOpenMAX AL 1.0.1が利用できるようになった。このサンプルコードも存在しているのだが(android-ndk-r7/samples/native-media)、ICSエミュレータがOpenGL|ES2.0に対応してないためにエミュレータで動作させることができず、ICSを搭載した実機が無いことには動作させることができない。
このOpenMAX ALを利用することで、C,C++のコードから直接マルチメディア系データを出力できるようになった。これまでもOpenSL|ESを利用してmp3などの音声のストリーミングデータは扱えていたが、これに加えて動画も同時に扱えるよう正式にサポートされたということ。ただし、動画はH.264、音声はAACという制約がある。これは現時点の段階なので、今後バージョンアップするにつれて、より多くのフォーマットが使えるようになるはず。
この詳細については、android-ndk-r7のなかのdocs/openmaxalディレクトリにドキュメントがあるので、そちらを見てもらった方がよいかと。
CCache対応
NDKr7からCCacheに対応となった。このCCacheというのは、コンパイラキャッシュのことで、大規模プロジェクトをリビルドする際には、非常に有効となる。OpenCVのような比較的規模の大きいライブラリなどのプロジェクトで利用している際には、非常に有効かと。
このCCacheはAOSP(Android OpenSource Project)ではすでに対応となっているのだが、それがNDKでも利用できるようになった。
使い方
ccacheをインストールし、環境変数NDK_CCACHEの設定を有効にする必要がある。
ccacheそのものは別途インストールする必要があるので、ここではubuntuのパッケージでインストール。
% sudo apt-get install ccache
あとは、環境変数NDK_CCACHEに対して
% export NDK_CCACHE=ccache
と設定するか、CCacheがインストールされているパスを直接指定すると、CCacheが有効となる。
どれだけ早くなるかはよく知らないので、後日検証してみたい。