Bescottee苦しいときは伸びてるとき、楽なときは伸びていないとき

6 Android NDK r7 の更新情報

admin to KnowHow, development — Tags: , ,  

Android NDK r7 Release

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.htmlhttp://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.mkLOCAL_CPP_FEATURES を追加。これは、C++機能(RTTI や 例外(Exceptions) )を利用している場合に宣言してください。これらの機能がプレビルドするモジュールに依存している場合は、最終的なリンク時に働きます。詳細は、 docs/ANDROID-MK.htmldocs/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_MODULESApplication.mkに未定義の場合は、インポートされた共有ライブラリは現在の標準では target installation location ((libs/<abi>))にインストールされます。例えば、fooというトップレベルモジュールがbarモジュールにインポートされる場合、
    libfoo.solibbar.so の両方ともインストール場所にコピーされます。以前は、 libfoo.soのみがコピーされ、
    barAPP_MODULESにリスト追加しておかない限り、そのような動作でした。もし、既に APP_MODULES 定義されている場合は、動作は変わりません。

  • ndk-gdb は、MAIN intent filters のマルチカテゴリー指定で正しく動作しています。
  • スタティックライブラリのインポートは、正しく動作しています。例えば、トップレベルモジュールのndk-gdb がスタティックライブラリzooをインポートしたスタティックライブラリbarをインポートする場合、 libfoo.soにはlibbar.alibzoo.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 and bar.cxx の両方ともC+++ソースとしてコンパイルしてくれます。以下のような宣言になります。
    LOCAL_CPP_EXTENSION := .cpp .cxx
    
  • NDKで提供されている共有システムライブラリで要求されていないたくさんのシンボルを削除。これによって、non-stable ABIシンボル(例えば、いくつかのlibgcc.a でプラットフォーム毎に異なるもの)に依存したコードが偶発的に生成されることを防ぎます。
  • EGLとOpenGLEL ヘッダーの拡張をサポート。注意:NDK ABIs は同等のライブラリで変更がないため、クライアントアプリ側でそれぞれの拡張に対して実行時にケアする必要があります。

    拡張は、デバイスやGPUドライバに依存するため、プラットフォームが未対応の場合は動作しません。ヘッダーの定数やタイプの新しい追加を利用する場合は、eglGetProcAddress() or glGetProcAddress() で確認する必要があります。新しくサポートされた拡張は以下です。

    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

6件のコメント »

  1. わかめ より:

    Android NDK r7 の更新情報 – http://andbrowser.com/develop...

  2. myb1126 より:

    “Android NDK r7 が2011年11月にリリースれました。その更新情報を記載しています。 | Bescottee” http://t.co/AE9r0STh

  3. taitakkyuu より:

    Android NDKr7 更新情報 thanks to  http://t.co/wvWGqI3i

  4. cuttysark256 より:

    Android NDKの新機能。APP_ABIの解説。

  5. none53 より:

    “Android NDK r7 が2011年11月にリリースれました。その更新情報を記載しています。 | Bescottee” http://t.co/sx1GdVQY

  6. s5r より:

    “API level 14 ”

このコメント欄の RSS フィード トラックバック URL

コメントをどうぞ