Android NDK, Revision 7の意訳です。完璧な自信はありませんので原文も一緒にご参照ください。
Android NDK, Revision 7 (2011年11月)リリース
Android Developer blogで報告があったようにたくさんの追加や改良がおこなわれたAndroid 4.0 プラットフォームでサポートされた新しい機能が含まれたNDK がリリースされました。
新機能
公式Android 4.0(API level 14)に追加された機能
- Khronos Group のOpenMAX AL™ 1.0.1 standard で規定されているネイティブマルチメディアAPIを追加
- 新しく追加された
<OMXAL/OpenMAXAL.h>
と<OMXAL/OpenMAXAL_Android.h>
ヘッダーは、Andriod特有のバッファキューインタフェースを利用して、ネイティブコードから直接マルチメディアアウトプットへの出力を API level 14 指定されているものに許可されます。 - Khronos Group OpenSL ES 1.0.1™ standard に規定されちえるネイティブオーディオAPIが更新
- API level 14上で、MP3, AAC, Vorbisなどの圧縮音源を PCM にデコード可能
- 詳細は、
docs/opensles/index.html
かhttp://www.khronos.org/opensles/を確認しましょう CCache
サポートを追加- リビルドの高速化を実現
NDK_CCACHE
という環境変数を定義し、ccache(ccache バイナリへのパス)を実行- 定義されていれば、NDK ビルドシステムはコンパイル時に自動的に CCache を利用します。
export NDK_CCACHE=ccache
注意: CCache はNDK には含まれていません。そのため、前もってインストールは準備しておく必要があります。
CCache
の詳細は、http://ccache.samba.orgをご覧ください - APP_ABI 設定のサポートを追加。以下の2行のうちどちらかのように Application.mk に記載することが今回のリリースから可能です。
APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
APP_ABI が定義されていれば、コマンドラインから
ndk-build
を実行したときいに機能します。あなたのプロジェクトが ABIs をサポートしているかどうかをApplication.mk
を変更することなしに、確認するために簡単な方法があります。
例えば以下のものです。ndk-build APP_ABI=all
Android.mk
にLOCAL_CPP_FEATURES
を追加。これは、C++機能(RTTI
や 例外(Exceptions
) )を利用している場合に宣言してください。これらの機能がプレビルドするモジュールに依存している場合は、最終的なリンク時に働きます。詳細は、docs/ANDROID-MK.html
やdocs/CPLUSPLUS-SUPPORT.html
をご覧ください。- ビルドコマンド利用時に短縮化されたソースファイルとオブジェクトへのパスが利用可能
- プロジェクトパスから
$NDK/ndk-build
を実行中にソース、オブジェクト、バイナリファイルへのパスは、ビルドコマンドに短縮パスを引き渡します。なぜなら、現在のディレクトリに関連さえるためです。これはたくさんのソースファイルがある場合のプロジェクトをビルドする場合に役立ちます。利用中のOSのコマンドラインの上限値をさけるために有効です。このふるまいは、プロジェクトのツリーからndk-build
を実行する場合に変更することができません。もしくは、環境変数NDK_PROJECT_PATH
を特定のディレクトリに変更してください。
実験的な機能(Experimental features)
Windows ユーザ向け:ndk-build.cmd
スクリプトを利用して、Cygwinなしで NDK ビルドが実現可能になります。このスクリプトは、オリジナルのndk-build スクリプトと同じ引数で利用可能できます。Windows NDK パッケージには、GNU Make や Awkやその他必要なツールが入っています。そのため、別途ビルドに必要なツールをインストールする必要はありません。
重要: ndk-gdb
は Windows では利用できません。それには、まだ Cygwin が必要です。
この機能はまだ実験中です。そのため、利用した感想や項目のレポートを公式バグデータベースや公式フォーラムに伝えてください。
重要なバグ修正
- もし
APP_MODULES
がApplication.mk
に未定義の場合は、インポートされた共有ライブラリは現在の標準では target installation location ((libs/<abi>
))にインストールされます。例えば、foo
というトップレベルモジュールがbar
モジュールにインポートされる場合、
libfoo.so
とlibbar.so
の両方ともインストール場所にコピーされます。以前は、libfoo.so
のみがコピーされ、
bar
をAPP_MODULES
にリスト追加しておかない限り、そのような動作でした。もし、既にAPP_MODULES
定義されている場合は、動作は変わりません。 ndk-gdb
は、MAIN intent filters のマルチカテゴリー指定で正しく動作しています。- スタティックライブラリのインポートは、正しく動作しています。例えば、トップレベルモジュールの
ndk-gdb
がスタティックライブラリzoo
をインポートしたスタティックライブラリbar
をインポートする場合、libfoo.so
にはlibbar.a
とlibzoo.a
がリンクされます。
その他の変更点
docs/NATIVE-ACTIVITY.HTML
: typo を修正。API levelの下限は 9 です。 8では native activities が動作しません。docs/STABLE-APIS.html
:EGL でサポートされているAPIの記載の誤りを修正。download-toolchain-sources.sh
: android.googlesource.comからのダウンロードツールチェインを更新。AOSPサーバの新しいURLを追加。gabi++
というC++サポートランタイムを新規追加。詳細は、docs/CPLUSPLUS-SUPPORT.html
をご覧ください。gnustl_shared
というC++サポートランタイムを新規追加。GNU libstdc++ v3 (GPLv3 license)の共有ライブラリバージョンと同等。詳細は、docs/CPLUSPLUS-SUPPORT.html
をご覧ください。- STLport C++ runtimes の RTTIを追加サポート。但し、例外(exceptions)は未サポート。
LOCAL_CPP_EXTENSION
のマルチ拡張子を追加サポート。例えば、foo.cpp
andbar.cxx
の両方ともC+++ソースとしてコンパイルしてくれます。以下のような宣言になります。LOCAL_CPP_EXTENSION := .cpp .cxx
- NDKで提供されている共有システムライブラリで要求されていないたくさんのシンボルを削除。これによって、non-stable ABIシンボル(例えば、いくつかのlibgcc.a でプラットフォーム毎に異なるもの)に依存したコードが偶発的に生成されることを防ぎます。
- EGLとOpenGLEL ヘッダーの拡張をサポート。注意:NDK ABIs は同等のライブラリで変更がないため、クライアントアプリ側でそれぞれの拡張に対して実行時にケアする必要があります。
拡張は、デバイスやGPUドライバに依存するため、プラットフォームが未対応の場合は動作しません。ヘッダーの定数やタイプの新しい追加を利用する場合は、
eglGetProcAddress()
orglGetProcAddress()
で確認する必要があります。新しくサポートされた拡張は以下です。- GLES 1.x
-
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_APPLE_texture_2D_limited_npot
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_filter_anisotropic
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_lod_bias
GL_IMG_read_format
GL_IMG_texture_compression_pvrtc
GL_IMG_texture_env_enhanced_fixed_function
GL_IMG_user_clip_plane
GL_IMG_multisampled_render_to_texture
GL_NV_fence
GL_QCOM_driver_control
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_perfmon_global_mode
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- GLES 2.0
-
GL_OES_element_index_uint
GL_OES_get_program_binary
GL_OES_mapbuffer
GL_OES_packed_depth_stencil
GL_OES_texture_3D
GL_OES_texture_float
GL_OES_texture_float_linear
GL_OES_texture_half_float_linear
GL_OES_texture_npot
GL_OES_vertex_array_object
GL_OES_EGL_image_external
GL_AMD_program_binary_Z400
GL_EXT_blend_minmax
GL_EXT_discard_framebuffer
GL_EXT_multi_draw_arrays
GL_EXT_read_format_bgra
GL_EXT_texture_format_BGRA8888
GL_EXT_texture_compression_dxt1
GL_IMG_program_binary
GL_IMG_read_format
GL_IMG_shader_binary
GL_IMG_texture_compression_pvrtc
GL_IMG_multisampled_render_to_texture
GL_NV_coverage_sample
GL_NV_depth_nonlinear
GL_QCOM_extended_get
GL_QCOM_extended_get2
GL_QCOM_writeonly_rendering
GL_QCOM_tiled_rendering
- EGL
-
EGL_ANDROID_recordable
EGL_NV_system_time
Android NDK r7 の更新情報 – http://andbrowser.com/develop...
“Android NDK r7 が2011年11月にリリースれました。その更新情報を記載しています。 | Bescottee” http://t.co/AE9r0STh
Android NDKr7 更新情報 thanks to http://t.co/wvWGqI3i
Android NDKの新機能。APP_ABIの解説。
“Android NDK r7 が2011年11月にリリースれました。その更新情報を記載しています。 | Bescottee” http://t.co/sx1GdVQY
“API level 14 ”