このページでは、リリースされたすべての安定版 NDK の変更点に関する情報を提供しています。最新の安定版 NDK または入手可能なベータ版をダウンロードするには、NDK のダウンロードのページをご覧ください。
詳しくは、android-ndk-announce Google グループをご覧ください。また、配信登録すると、リリースのお知らせを受け取ることもできます。
Android NDK r27 LTS(2024 年 7 月)
変更履歴- ダウンロード
-
- このリリースはこちらからダウンロードできます。
Android NDK r26 LTS(2023 年 9 月)
変更履歴- ダウンロード
-
- このリリースはこちらからダウンロードできます。
- お知らせ
-
- KitKat(API 19、20)のサポートは終了しました。
Android NDK r25 LTS(2022 年 7 月)
変更履歴- ダウンロード
-
- このリリースはこちらからダウンロードできます。
- お知らせ
-
- Android 13 API が含まれています。
- LLVM 14 の開発に基づき、LLVM を clang-r450784d に更新しました。
Android NDK r24(2022 年 3 月)
変更履歴- ダウンロード
-
- このリリースはこちらからダウンロードできます。
- お知らせ
-
-
GNU アセンブラ(GAS)が削除されました。
-fno-integrated-as
を使用してビルドした場合は、そのフラグを削除する必要があります。アセンブリを LLVM 対応にするおすすめの方法については、Clang の移行に関する注意事項についての説明 をご覧ください。 - GDB が削除されました。代わりに LLDB を使用してください。ndk-gdb はデフォルトで LLDB を使用し、Android Studio でこれまでサポートされているのは LLDB のみです。
- Jelly Bean(API 16、17、18)のサポートは終了しました。NDK でサポートされる最小 OS は KitKat(API レベル 19)です。
- Neon 以外のデバイスのサポートは終了しました。Neon をサポートしていないのはごく少数の非常に古いデバイスであるため、ほとんどのアプリではパフォーマンスの向上以外の変化は見られません。
- RenderScript ビルドのサポートが削除されました。Android 12 では RenderScript のサポートが終了しました。RenderScript からのアプリの移行を完了していない場合は、NDK r23 LTS を使用できます。
-
GNU アセンブラ(GAS)が削除されました。
Android NDK r23 LTS(2021 年 8 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
-
GNU アセンブラ(GAS)を除く GNU binutils が削除されました。GAS は次回のリリースで削除される予定です。
-fno-integrated-as
を使用してビルドしている場合に、このフラグの削除を妨げているものがあれば、バグを報告してください。 -
GDB のサポートは終了しました。GDB は次回のリリースで削除される予定です。代わりに LLDB を使用してください。なお、
ndk-gdb
はデフォルトで LLDB を使用します。 - NDK r23 は、Neon 以外をサポートする最後のリリースです。NDK r24 以降、sysroot の armeabi-v7a ライブラリは、Neon を使用してビルドされます。Neon をサポートしていないのはごく少数の非常に古いデバイスであるため、ほとんどのアプリではパフォーマンスの向上以外の変化は見られません。
- Jelly Bean(API 16、17、18)は、次回の NDK リリースではサポートされません。NDK r24 でサポートされる最小 OS は KitKat(API レベル 19)になります。
-
GNU アセンブラ(GAS)を除く GNU binutils が削除されました。GAS は次回のリリースで削除される予定です。
Android NDK r22b(2021 年 3 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
-
GNU binutils はサポートが終了し、今後の NDK リリースで削除される予定です。GNU アセンブラ(
as
)も削除されます。-fno-integrated-as
を使用してビルドしている場合に、このフラグの削除を妨げているものがあれば、バグを報告してください。as
を直接使用している場合は、代わりにclang
を使用してください。 - LLD がデフォルトのリンカーになりました。 ndk-build と CMake ツールチェーン ファイルも llvm-ar と llvm-strip を使用するように変更されました。
- ndk-gdb はデバッガとして lldb を使用するようになりました。gdb はサポートが終了し、今後のリリースで削除される予定です。gdb にフォールバックするには、--no-lldb オプションを使用します。その場合は、ぜひバグを報告して、lldb を使用できない理由をお知らせください。
-
std::filesystem
のサポートが追加されました。既知の問題は次の 2 つです。
-
GNU binutils はサポートが終了し、今後の NDK リリースで削除される予定です。GNU アセンブラ(
Android NDK r21e LTS(2021 年 1 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
-
32 ビット Windows のサポートは終了しました。これは、ほとんどのユーザーには影響しません。32 ビット Windows から NDK アプリをビルドする必要がある場合は、引き続き NDK r20 を使用してください。
Android デベロッパー ツールでのこの変更の詳細については、こちらのブログ投稿をご覧ください。
-
LLD がテストで使用できるようになりました。AOSP はデフォルトで LLD を使用するように切り替わりました。NDK も同様に更新されます(時期は未定)。リンク時に
-fuse-ld=lld
を渡して、アプリで LLD をテストしてください。なお、不具合 843 は、LLD を binutils の strip および objcopy と併用するビルドに影響しますが、llvm-strip および llvm-objcopy と併用する場合には影響しません。 -
以前のツールチェーンのインストールパスは、今後のリリースで削除される予定です。これらのパスは、NDK r19 でサポートが終了しており、NDK のかなりの領域を占有しています。削除されるパスは次のとおりです。
- platforms
- sources/cxx-stl
- sysroot
- toolchains(toolchains/llvm を除く)
make_standalone_toolchain.py
のユーザーも影響を受けません(ただし、このスクリプトは r19 以降では不要)。以前のツールチェーン レイアウトからの移行については、お使いの NDK バージョンの ビルドシステム管理者ガイド をご覧ください。 - 2019 年 8 月以降に、Play ストアで APK をアップロードする際には、64 ビット対応が必須になります。そのときになって慌てないように今のうちから移植の準備を始めてください。詳細については、こちらのブログ投稿をご覧ください。
- ノータリゼーションを受けた署名済みの macOS App Bundle は、Wiki と Google のウェブサイトからダウンロードできます。バンドルのみが RPATH を使用してノータリゼーションを受けることができるため、macOS 用の従来の NDK パッケージがノータリゼーションを受けることはできません。App Bundle には Android Studio との互換性がなくなるようなレイアウト変更が必要なため、SDK では引き続き従来のパッケージを使用します。SDK Manager を介してダウンロードした場合、NDK は隔離されず、現在 Gatekeeper によって許可されています。現在 macOS の NDK を入手するには、SDK Manager を使用するのが最も信頼できる方法です。
-
Android NDK r20b(2019 年 6 月)
変更履歴Android NDK r19c(2019 年 1 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
-
デベロッパーは LLD でアプリのテストを開始してください。AOSP はデフォルトで LLD を使用するように切り替わりました。NDK は次期リリースからデフォルトで LLD を使用します。リリース サイクルを通して LLD に大きな問題がなければ、BFD と Gold は削除されます(r21 を予定)。リンク時に
-fuse-ld=lld
を渡して、アプリで LLD をテストしてください。注: LLD は現在、Windows の圧縮シンボルをサポートしていません。詳しくは、不具合 888 をご覧ください。Clang も Windows で圧縮シンボルを生成できませんが、これは Darwin や Linux から生成したアーティファクトを使用する際に問題になる場合があります。 - 2019 年 8 月以降に、Play ストアで APK をアップロードする際には、64 ビット対応が必須になります。そのときになって慌てないように今のうちから移植の準備を始めてください。詳細については、こちらのブログ投稿をご覧ください。
-
不具合 780: スタンドアロン ツールチェーンが不要になりました。Clang、Binutils、sysroot などといったツールチェーンはすべて
$NDK/toolchains/llvm/prebuilt/<host-tag>
にインストールされ、Clang が自動的にそれらを見つけます。スタンドアロンの API 26 ARM 用のツールチェーンではなく、直接コンパイラを NDK:$ $NDK/toolchains/llvm/prebuilt/
r19 では、ツールチェーンも以前のパスにインストールされ、ビルド システムが新しいレイアウトに適応できる可能性があります。r20 では従来のパスは削除されます。/bin/armv7a-linux-androideabi26-clang++ src.cpp make_standalone_toolchain.py
スクリプトは 削除されます。今では不要となったこのスクリプトは、上記の情報を含む警告を発しますが、既存のワークフローを維持するため残されています。 ndk-build、CMake、またはスタンドアロン ツールチェーンを使用している場合、ワークフローに変更はありません。この変更点は、サードパーティのビルドシステムの管理に関係するものであり、その場合は Android 固有のコードを一部削除できるようになります。詳しくは、 構築 システム メンテナンス ガイドをご覧ください。 - ndk-depends は削除されました。Google は、古い Android バージョンにおけるネイティブ ライブラリのロードの問題に対するソリューションとして ReLinker の方が優れていると考えています。
- 不具合 862: Clang にリダイレクトした GCC ラッパー スクリプトが削除されました。これらのスクリプトの機能は不要と判断されました。
-
デベロッパーは LLD でアプリのテストを開始してください。AOSP はデフォルトで LLD を使用するように切り替わりました。NDK は次期リリースからデフォルトで LLD を使用します。リリース サイクルを通して LLD に大きな問題がなければ、BFD と Gold は削除されます(r21 を予定)。リンク時に
Android NDK r18b(2018 年 9 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
- GCC は削除されました。
-
LLD がテストで使用できるようになりました。AOSP はデフォルトで LLD を使用するように切り替え中であり、NDK も同様に更新されます(時期は未定)。リンク時に
-fuse-ld=lld
を渡して、アプリで LLD をテストしてください。 - gnustl、gabi++、stlport は削除されました。
- ICS(android-14 と android-15)に対するサポートは終了しました。実行可能ファイルを使用するアプリは、PIE 実行可能ファイルと非 PIE 実行可能ファイルの両方を提供する必要がなくなりました。
- 2019 年 8 月以降に、Play ストアで APK をアップロードする際には、64 ビット対応が必須になります。そのときになって慌てないように今のうちから移植の準備を始めてください。詳細については、こちらのブログ投稿をご覧ください。
Android NDK r17c(2018 年 6 月)
変更履歴- ダウンロード
-
- このリリースのダウンロードはこちらで入手できます。
- お知らせ
-
- GCC はサポートされなくなりました。NDK r18 で削除される予定です。
-
libc++ が CMake とスタンドアロン ツールチェーンのデフォルト STL になりました。別の STL を手動で選択している場合は、
libc++
に移行することを強くおすすめします。ndk-build は依然としてデフォルトで STL なしに設定されることに注意してください。詳しくは、こちらのブログ投稿をご覧ください。 - gnustl と stlport は非推奨になっており、NDK r18 で削除される予定です。
- ARMv5(armeabi)、MIPS、MIPS64 に対するサポートは終了しました。 これらの ABI をビルドしようとすると、エラーになります。
- ICS(android-14 と android-15)に対するサポートは r18 から削除されます。
- 2019 年 8 月以降に、Play ストアで APK をアップロードする際には、64 ビット対応が必須になります。そのときになって慌てないように今のうちから移植の準備を始めてください。詳細については、こちらのブログ投稿をご覧ください。
Android NDK r16b(2017 年 12 月)
変更履歴- ダウンロード
- このリリースはこちらからダウンロードできます。
- お知らせ
-
- 非推奨のヘッダーが削除されました。 統合ヘッダーは、単に「ヘッダー」となりました。移行に関するヒントについては、統合ヘッダー移行メモをご覧ください。
- GCC はサポートされなくなりました。今すぐ NDK から削除されるわけではありませんが、バックポートを受け取らなくなります。gnustl の一部がまだ Clang と互換性がないため、libc++ がデフォルトとして十分安定するまでは GCC を削除することができません。r18 で他の STL が削除されるのに合わせて削除されます。
libc++
はベータ版を卒業し、NDK の推奨 STL になりました。r17 以降では、libc++
が CMake とスタンドアロン ツールチェーンのデフォルト STL になります。別の STL を手動で選択している場合は、libc++
に移行することを強くおすすめします。詳しくは、こちらのブログ投稿をご覧ください。- ARM5(armeabi)、MIPS、MIPS64 に対するサポートは非推奨になりました。これらは、ndk-build においてデフォルトではビルドされなくなりますが、明示的に指定すればビルドできます。「all」、「all32」、「all64」に包含される予定です。それぞれに対するサポートは r17 では終了します。これらの ABI を対象にしている場合は、CMake と ndk-build の両方で警告が発行されます。
- API
-
Android 8.1 用のネイティブ API を追加しました。API について詳しくは、ネイティブ API の概要をご覧ください。
このリリースの新機能と変更点について詳しくは、こちらの変更履歴をご覧ください。
Android NDK r15c(2017 年 7 月)
変更履歴- ダウンロード
- このリリースはこちらからダウンロードできます。
- お知らせ
-
- 統合ヘッダーがデフォルトで有効になります。これらのヘッダーの使用方法については、統一ヘッダーをご覧ください。
- GCC はサポートされなくなりました。まだ NDK から削除されていませんが、バックポートを受け取らなくなっています。 gnustl の一部がまだ Clang と互換性がないため、libc++ がデフォルトとして十分安定するまでは GCC を削除することができません。
- Android 2.3(
android-9
)はサポートされなくなりました。現在、NDK の最小 API レベル ターゲットは Android 4.0(android-14
)です。APP_PLATFORM
がandroid-14
より低く設定されている場合は、代わりにandroid-14
が使用されます。 - NDK の CMake が、YASM で作成されたアセンブリ コードのビルドをサポートするようになり、x86 および x86-64 のアーキテクチャ上で実行できるようになりました。詳しくは、アセンブリ コードのビルドをご覧ください。
注: 非推奨ヘッダーは次回のリリースで削除される予定です。これらのヘッダーで問題が発生した場合は、バグとして報告してください。
移行に関するヒントについては、統合ヘッダー移行メモをご覧ください。
- API
-
Android 8.0 用のネイティブ API を追加しました。API について詳しくは、ネイティブ API の概要をご覧ください。
このリリースの新機能と変更点について詳しくは、こちらの変更履歴をご覧ください。
Android NDK r14b(2017 年 3 月)
変更履歴- ダウンロード
- このリリースはこちらからダウンロードできます。
- お知らせ
-
- 統合ヘッダー: このリリースでは、Android プラットフォームと同期し、常に最新の正確な状態を保つプラットフォーム ヘッダーが導入されています。ヘッダーのみのバグ修正がすべての API レベルに反映されるようになりました。統合ヘッダーの導入によって、次のように、以前の NDK リリースの矛盾が修正されます。
- M と N 内のヘッダーが実際には L 用のヘッダーでした。
- ヘッダー内の関数宣言がプラットフォーム レベルと正確に一致していませんでした。ヘッダーで存在しない関数が宣言されていたり、使用可能な関数の宣言に失敗したりしていました。
- 古い API レベルの一部に新しい API レベルの不明な定数または不正確な定数が含まれていました。
これらの新しい統合ヘッダーはデフォルトで有効になりません。これらのヘッダーを有効にして使用する方法については、統合ヘッダーをご覧ください。
- GCC のサポート終了: このリリースで、GCC に対する積極的なサポートが終了します。GCC は今すぐ NDK から削除されるわけではありませんが、バックポートを受け取らなくなります。gnustl の一部がまだ Clang と互換性がないため、libc++ がデフォルトとして十分安定するまで GCC は完全に削除されません。
- 統合ヘッダー: このリリースでは、Android プラットフォームと同期し、常に最新の正確な状態を保つプラットフォーム ヘッダーが導入されています。ヘッダーのみのバグ修正がすべての API レベルに反映されるようになりました。統合ヘッダーの導入によって、次のように、以前の NDK リリースの矛盾が修正されます。
このリリースの新機能と変更点について詳しくは、こちらの変更履歴をご覧ください。
Android NDK r13b(2016 年 10 月)
- ダウンロード
- このリリースのダウンロードはこちらにアーカイブされています。
- お知らせ
-
- GCC はサポートされなくなりました。今すぐ NDK から削除されるわけではありませんが、バックポートを受け取らなくなります。gnustl の一部がまだ Clang と互換性がないため、libc++ がデフォルトとして十分安定するまでは GCC を削除することができません。GCC は libc++ が安定した時点で削除されます。
- Android 用の CPU プロファイラである simpleperf が追加されました。
- r13b
-
-
__cxa_bad_cast
の欠落に対する追加修正を行いました。
-
- NDK
-
NDK_TOOLCHAIN_VERSION
はデフォルトで Clang に設定されるようになりました。- libc++ は r263688 にアップデートされました。
- (ほぼ)クリーンなアップストリームにリセットされています。これにより、さまざまなバグが解消されるはずですが、デフォルトとして推奨するには libandroid_support をさらにクリーンアップする必要があります。
-
make-standalone-toolchain.sh
は、ツールの Python バージョンに対するラッパーになりました。動作がいくつか変更されています。詳しくは、コミット メッセージをご覧ください。 - サポートされていない ABI 用のライブラリが削除されました(mips64r2、mips32r6、mips32r2、x32)。削除されたライブラリが他にもあるかもしれません。
- ARM android-21+ 用の静的な実行可能ファイルのビルドのリンク時点で atexit が失われる crtbegin_static.o の不具合が解決されました(不具合 132)。
- build/cmake/android.toolchain.cmake に CMake ツールチェーン ファイルを追加しました。
- 既知の問題
-
- このリストは、未解決のすべてのバグを網羅したものではありません。
- libc++ と GCC を使用したスタンドアロン ツールチェーンが動作しません。これは、GCC のバグである可能性があります。詳しくは、コミット メッセージをご覧ください。
- android-24 が存在するにもかかわらず、Marshmallow と N 用の Bionic のヘッダーとライブラリがまだ公開されていません。これらのプラットフォームは、現在も Lollipop のヘッダーとライブラリです(r11 からのリグレッションではありません)。
- RenderScript ツールが存在しません(r11 からのリグレッションではありません)(不具合 7)。
Android NDK r12b(2016 年 6 月)
- ダウンロード
- このリリースのダウンロードはこちらにアーカイブされています。
- お知らせ
- r13 では、
ndk-build
コマンドはデフォルトで Clang を使用します。今後のリリースで、GCC が削除されます。 make-standalone-toolchain.sh
スクリプトは r13 で削除される予定です。make_standalone_toolchain.py
がニーズに合っていることをご確認ください。- 問題が発生した場合は、GitHub にご報告ください。
ndk-gdb.py
を修正しました(不具合 118)。-
無効な列挙値を含まないように
NdkCameraMetadataTags.h
をアップデートしました。 - ndk-build には、libc++ を使用する静的ライブラリについての誤った警告を出すバグがありましたが、このバグは修正されました。この変更について詳しくは、こちらのコメントをご覧ください。
- android-24 で OpenSLES のヘッダーを更新しました。
- NDK
- armeabi-v7a-hard ABI のサポートを廃止しました。詳しくは、説明をご覧ください。
- Gingerbread 以前のプラットフォーム レベルで、すべての sysroot を削除しました。r11 で sysroot のサポートを廃止しましたが、実際には削除していませんでした。
- ARM32 で c++_shared を使用する際に、例外処理がほぼ機能するようになりました。unwinder が、libc++ そのものではなく、リンクされた各オブジェクトにリンクされるようになります。例外処理について詳しくは、既知の問題をご覧ください。
- デフォルトのコンパイラ フラグが削除されました(不具合 27)。
- これらの変更の詳細については、こちらの変更点一覧をご覧ください。
- スタンドアロン ツールチェーンの Python 実装である
build/tools/make_standalone_toolchain.py
を追加しました。- Windows ユーザーがこの機能を使用する際に Cygwin が必要なくなりました。
- bash フレーバーは r13 で削除する予定のため、新しいバージョンを今すぐお試しください。
- Clang デバッグビルドで、
-fno-limit-debug-info
がデフォルトで有効になりました。この変更により、LLDB を使用したデバッグの操作性が向上します。 --build-id
がデフォルトで有効になりました。- ネイティブ障害レポートにビルド ID が表示されるので、実行していたコードのバージョンを簡単に確認できます。
- 今後、
NDK_USE_CYGPATH
が libgcc で問題を引き起こすことがなくなります(Android の不具合 195486)。 -Wl
、--warn-shared-textrel
、-Wl,--fatal-warnings
の各オプションがデフォルトで有効になりました。共有のテキスト リロケーションがある場合、Android 6.0(API レベル 23)以降ではアプリを読み込むことができません。64 ビットアプリでは、テキスト リロケーションはこれまで許可されていませんでした。- プリコンパイルされたヘッダーの動作を改善しました (不具合 14、不具合 16)。
- アクセスできない ARM(Thumb を除く)STL ライブラリを削除しました。
- android-24 に Vulkan のサポートを追加しました。
- android-24 に Choreographer API を追加しました。
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
以上のデバイス用のlibcamera2
API を追加しました。詳しくは、カメラの特性をご覧ください。- Clang
- Clang は、3.8svn(r256229、ビルド 2812033)に更新されました。
- 32 ビット Windows パッケージ内の
clang.exe
実行可能ファイルとclang++.exe
実行可能ファイルは実際には 64 ビットです。32 ビット実行可能ファイルはclang_32.exe
という名前です。
今回、 - 32 ビット Windows パッケージ内の
- GCC
- ChromeOS GCC @ google/gcc-4_9 r227810 と同期しました。
- カバレッジ サニタイザー パッチを ToT(r231296)から移植しました。
ifuncs
を使用しないように libatomic を修正しました(不具合 31)。- Binutils
- 情報メッセージ「Erratum 843419 found and fixed」が表示されないようにしました。
- サイズの大きい arm32 バイナリにリンクすると発生する内部リンカーエラーを修正するために、オプション
--long-plt
を導入しました。 - AArch64 のランタイム スタブの誤りを修正しました。この誤りにより、DSO のサイズが非常に大きい場合に、ジャンプ先アドレスが正しく計算されていませんでした。
- 旧リリースの Android での動的リンカーのバグを回避するために、デフォルトのオプション
--no-apply-dynamic
が導入されました。 - Clang で
dynamic_cast
の NDK r11 KI が正常に機能しませんでした。x86、stlport_static
、最適化機能を修正しました。 - GDB
- GDB 7.11 にアップデートしました。詳しくは、GDB ニュースをご覧ください。
ndk-gdb.py
のバグをいくつか修正しました。- 既知の問題
- x86 ASAN は現在も機能しません。詳しくは、こちらの変更リストに関するディスカッションをご覧ください。
- Android 2.3(API レベル 9)または Android 4.0(API レベル 14)の ARM では、
c++_shared
を使用した例外のアンワインドが現在も機能しません。 - android-24 があるにもかかわらず、Android 6.0(API レベル 23)と Android 7.0(API レベル 24)では、Bionic のヘッダーとライブラリがまだ公開されていません。 これらのプラットフォームは、現在も Android 5.0(API レベル 21)のヘッダーとライブラリです(r11 からのリグレッションではありません)。
- RenderScript ツールがありません(r11 からの回帰ではありません) (不具合 7)。
- この変更履歴は、未解決のすべてのバグを網羅するものではありません。
__thread
が実際に機能するようになりました。
Android NDK r12(2016 年 6 月)
- ダウンロード
- このリリースのダウンロードはこちらにアーカイブされています。
- お知らせ
- 次回のリリースで、
ndk-build
コマンドはデフォルトで Clang を使用するように設定される予定です。今後のリリースで、GCC は削除される予定です。 - 次回のリリースで、
make-standalone-toolchain.sh
スクリプトは削除される予定です。このスクリプトを使用している場合は、できるだけ早くmake_standalone_toolchain.py
に移行するようにしてください。 - NDK
- armeabi-v7a-hard ABI のサポートを削除しました。ドキュメントの説明をご覧ください。
- Android 2.3(API レベル 9)より前のプラットフォーム レベルの sysroot をすべて削除しました。 NDK r11 で sysroot に対するサポートを廃止しましたが、実際には削除されていませんでした。
- ARM32 上で c++_shared を使用している場合の例外処理が概ね機能するようにアップデートしました(既知の問題をご覧ください)。unwinder が、libc++ そのものではなく、リンクされた各オブジェクトにリンクされるようになります。
- デフォルトのコンパイラ フラグを削除しました(NDK 不具合 27)。このアップデートについて詳しくは、変更点 207721 をご覧ください。
build/tools/make_standalone_toolchain.py
にスタンドアロン ツールチェーンの Python 実装を追加しました。Windows 上でこの機能を使用する際に Cygwin が必要なくなりました。次回のリリースで bash フレーバーは削除される予定のため、新しいバージョンをテストしてください。- デフォルトで
-fno-limit-debug-info
オプションが有効になるように Clang デバッグビルドを設定しました。この変更によって、LLDB を使用したデバッグがやりやすくなります。 --build-id
をデフォルト オプションとして有効にしました。これにより、ネイティブ障害レポートに ID が表示されるため、実行中のコードのバージョンを簡単に特定できます。- libgcc で問題が発生しないように
NDK_USE_CYGPATH
に伴う不具合を修正しました(不具合 195486)。 - オプションの
-Wl,--warn-shared-textrel
と-Wl,--fatal-warnings
をデフォルトとして有効にしました。共有のテキスト リロケーションがある場合、Android 6.0(API レベル 23)以降ではアプリが読み込まれません。この設定はこれまで 64 ビットアプリに対して許可されなかったことに注意してください。 - プリコンパイルされたヘッダーの機能が向上するように、いくつかの不具合を修正しました(NDK 不具合 14、NDK 不具合 16)。
- アクセスできない ARM(Thumb を除く)STL ライブラリを削除しました。
- android-24 に Vulkan のサポートを追加しました。
- android-24 に Choreographer API を追加しました。
INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
機能レベル以上をサポートするデバイス用の libcamera2 API を追加しました。 詳しくは、CameraCharacteristics
のリファレンスをご覧ください。- Clang
- Clang は、3.8svn(r256229、ビルド 2812033)に更新されました。32 ビット Windows パッケージ内の
clang.exe
実行可能ファイルとclang++.exe
実行可能ファイルは実際には 64 ビットです。32 ビット実行可能ファイルはclang_32.exe
という名前です。 __thread
が実際に機能するように修正しました。- GCC
- コンパイラと ChromeOS GCC @ google/gcc-4_9 r227810 を同期しました。
- カバレッジ サニタイザー パッチを ToT(r231296)から移植しました。
- ifuncs を使用しないように
libatomic
を修正しました(NDK 不具合 31)。 - Binutils
- 情報メッセージ「Erratum 843419 found and fixed」が表示されないようにしました。
- サイズの大きい arm32 バイナリをリンクしたときの内部リンカーエラーを修正するために、オプション
--long-plt
を導入しました。 AArch64
のランタイム スタブの誤りを修正しました。この誤りにより、動的共有オブジェクト(DSO)のサイズが非常に大きい場合に、ジャンプ先アドレスが正しく計算されていませんでした。- 旧リリースの Android での動的リンカーのバグを回避するために、デフォルトのオプション
--no-apply-dynamic
が導入されました。 dynamic_cast
が Clang、x86、stlport_static、最適化で機能しない NDK r11 に伴う既知の不具合を修正しました。- GDB
- GDB バージョン 7.11 にアップデートしました。このリリースについて詳しくは、GDB ニュースをご覧ください。
ndk-gdb.py
スクリプトの複数のバグを修正しました。- 既知の問題
- 現在、x86 Address Sanitizer(ASAN)は機能しません。詳しくは、不具合 186276 をご覧ください。
- Android 2.3(API レベル 9)または Android 4.0(API レベル 14)の ARM では、
c++_shared
を使用した例外のアンワインドが現在も機能しません。 - android-24 が存在するにもかかわらず、Android 6.0(API レベル 23)以降用の Bionic のヘッダーとライブラリがまだ公開されていません。これらのプラットフォームには、NDK r11 と一貫性のある Android 5.0(API レベル 21)のヘッダーとライブラリが含まれています。
- NDK r11 と一貫性のある RenderScript ツールは存在しません (NDK 不具合 7)。
NdkCameraMetadataTags.h
ヘッダー ファイルで、カメラ メタデータ タグ列挙値ACAMERA_STATISTICS_LENS_SHADING_CORRECTION_MAP
が誤って列挙されました。これは次のリリースで削除される予定です。代わりにACAMERA_STATISTICS_LENS_SHADING_MAP
値を使用してください。
Android NDK r11c(2016 年 3 月)
- 変更
ndk-gdb.py
スクリプトに新たな修正プログラムを適用しました。ndk-gdb
コマンドの--attach
オプションに、任意指定のパッケージ名引数を追加しました(不具合 13)。- 32 ビット Windows プラットフォームの無効なツールチェーン パスを修正しました(不具合 45)。
ndk-which
コマンドの相対パスを修正しました(不具合 29)。- libgcc コンパイラでの cygpath の使用法を修正しました(Android の不具合 195486)。
Android NDK r11b(2016 年 3 月)
- NDK
-
- 重要なお知らせ
- GitHub にバグトラッカーを移動しました。
- 変更
ndk-gdb.py
を修正しました。r11 で完全に元に戻されました。- Mac 用の
ndk-gdb
を修正しました。 - コマンドライン ツールの最上位ショートカットを追加しました。
ndk-depends
ndk-gdb
ndk-stack
ndk-which
(このコマンドは、以前のリリースから完全に消去されました)
__cxxabi_config.h
が欠落していた libc++ 用のスタンドアロン ツールチェーンを修正しました。make-standalone-toolchain.sh
内の--toolchain
に関するヘルプ ドキュメントを修正しました。
- 重要なお知らせ
- Clang
-
- 誤記
- r11 リリースノートで報告された内容に反して、
__thread
が機能しません。これは、出荷された Clang のバージョンに、エミュレートされた TLS のサポートに関するバグの修正が含まれていないためです。
Android NDK r11(2016 年 3 月)
- Clang
-
- 重要なお知らせ
- 追加
- Clang がエミュレートされた TLS に対するサポートを提供するようになりました。
- コンパイラは、pthread スレッド固有データを使用して ELF TLS をエミュレートすることにより、
__thread
をサポートするようになりました。 - C++11
thread_local
は、機能する場合もありますが、データに非自明なデストラクタが含まれている場合は機能しません。これは、このようなケースでは libc からのサポートが必要なためです。この制限は、Android 6.0(API レベル 23)以降で動作している場合は適用されません。 - TLS 変数が共有ライブラリからアクセスを受ける場合は、エミュレートされた TLS が Aarch64 で動作しません。
- コンパイラは、pthread スレッド固有データを使用して ELF TLS をエミュレートすることにより、
- Clang がエミュレートされた TLS に対するサポートを提供するようになりました。
- GCC
-
- 重要なお知らせ
- Clang を優先して NDK 内の GCC のサポートが終了します。
- NDK は、5.x にアップグレードされることも、重要でないバックポートを受け入れることもありません。
- 4.9 でのコンパイルミスと内部コンパイラ エラーのメンテナンスは個別に処理されるようになります。
- 削除
- GCC 4.8 を削除しました。すべてのターゲットが GCC 4.9 を使用するようになりました。
- その他の変更点
- google/gcc-4_9 を r224707 に同期しました。以前は、r214835 に同期していました。
- NDK
-
- 重要なお知らせ
- NDK パッケージからサンプルが削除されました。 代わりに GitHub で入手できます。
- NDK パッケージからドキュメントが削除されました。 代わりに Android デベロッパー ウェブサイトで入手できます。
- 追加
android-23
にネイティブ トレース API を追加しました。android-23
にネイティブ マルチネットワーク API を追加しました。- API レベル 21 から、libc、m、dl でシンボルをバージョン管理できるようにしました。
- API レベル N に Vulkan のヘッダーとライブラリを追加しました。
- 削除
_WCHAR_IS_8BIT
のサポートを削除しました。- sed を削除しました。
- mclinker を削除しました。
- Perl を削除しました。
- NDK libc、m、dl のすべてのバージョンから、これらのライブラリのプラットフォーム バージョンでサポートされていないすべてのシンボルを削除しました。
- mips64r2 に対するサポートを一部削除しました。残りは今後削除される予定です。
- その他の変更点
- デフォルトで arm7 に設定されるように ARM スタンドアロン ツールチェーンを変更しました。
- 古い動作は、
-target
オプションをarmv5te-linux-androideabi
として指定することにより復元できます。
- 古い動作は、
- プラットフォームのインクルードで
-isystem
を使用するようにビルドシステムを変更しました。- bionic で発生した警告によって、アプリビルドが中断されなくなりました。
- バイナリが gabi++ 経由で例外をスローしたときに発生するセグメンテーション違反を修正しました(不具合 179410)。
- プラットフォームの libc++ に伴う ODR 不具合を回避するために、libc++ のインライン名前空間を
std::__ndk1
に変更しました。 - すべての libc++ ライブラリが libc++abi を使用してビルドされるようになりました。
- Gingerbread にデフォルトの
APP_PLATFORM
をバンプしました。- Froyo 以前に対するサポートは今後のリリースで廃止される予定です。
- デフォルトで arm7 に設定されるように ARM スタンドアロン ツールチェーンを変更しました。
- 64 ビットの gabi++
_Unwind_Exception
構造体を更新しました。 - cpufeatures に以下の機能を追加しました。
- SSE4.1 と SSE4.2 を検出する。
- x86_64 上の CPU 機能を検出します。
- libc++abi をアップストリーム r231075 に更新しました。
- ToT Bionic から
byteswap.h
、endian.h
、sys/procfs.h
、sys/ucontext.h
、sys/user.h
、uchar.h
を更新しました。 - すべての API レベルで
sys/cdefs.h
を同期しました。 - arm の
fegetenv and fesetenv
を修正しました。 - mips64 と x86_64 の
crtend_*
のエンドポインタのサイズとアライメントを修正しました。
- 重要なお知らせ
- Binutils
-
- 追加
- 新しいオプション
--pic-veneer
を追加しました。
- 新しいオプション
- 削除
- 32 ビット Windows パッケージから ld.gold が削除されました。 代わりに、64 ビット Windows パッケージから ld.gold を取得できます。
- 変更
- Android と Chromium 間で binutils ソースを統一しました。 この変更につい詳しくは、こちらをご覧ください。
- aarch64 の Gold の信頼性を高めました。リンク時に、bfd ではなく gold を使用します(
-fuse-ld=gold
)。次回のリリースで、デフォルトが切り替えられる可能性があります。 - Gold ARM バックエンド用の大量のバイナリのリンク時間を短縮しました(デバッグ可能な Chrome ブラウザのリンク時間を最大 50% 短縮)。
- 追加
- GDB
-
- 削除
- ndk-gdb.py を優先して ndk-gdb を削除しました。
- 変更
- gdb をバージョン 7.10 に更新しました。
- パフォーマンスを向上させました。
- エラー メッセージを改善しました。
- 相対プロジェクト パスを修正しました。
- バックグラウンド化された gdbserver を Ctrl+C で強制終了できないようにしました。
- Windows サポートを見直しました。
- 削除
- YASM
-
- 変更
- YASM をバージョン 1.3.0 に更新しました。
- 変更
Android NDK r10e(2015 年 5 月)
- ダウンロード
- このリリースのダウンロードはこちらにアーカイブされています。
- 重要な変更点:
-
- Cortex-A53 Erratum 843419 の回避策を
aarch64-linux-android-4.9
リンカーに統合しました。この回避策について詳しくは、cortex-a53 erratum 843419 の回避策をご覧ください。 - Clang 3.6 を追加しました。
NDK_TOOLCHAIN_VERSION=clang
のように設定すると、デフォルトでこのバージョンの Clang が選択されます。 - Clang 3.4 を削除しました。
- GCC 4.6 を削除しました。
- すべてのアーキテクチャの
ld.gold
にマルチスレッド サポートを実装しました。マルチスレッドに対するサポートを含める場合と、含めない場合のリンクが可能になりました。デフォルトはサポートを含めません。- マルチスレッドを使用してコンパイルするには、
--threads
オプションを使用します。 - マルチスレッドを使用せずにコンパイルするには、
--no-threads
オプションを使用します。
- マルチスレッドを使用してコンパイルするには、
- すべてのアーキテクチャの GDB/gdbserver を 7.7 にアップグレードしました。
- 32 ビット Darwin 用の NDK パッケージを削除しました。
- Cortex-A53 Erratum 843419 の回避策を
- 重要なバグの修正:
-
- OpenMP ループがメインスレッドの外部に存在する場合に発生するクラッシュを修正しました。
- ユーザーが
#pragma GCC optimize ("O0")
を宣言したが、コマンドラインで指定された最適化のレベルが異なっていた場合に発生する GCC 4.9 内部コンパイラ エラー(ICE)を修正しました。pragma
が優先されます。 - 以下のエラー メッセージを伴うクラッシュの原因となっていたエラーを修正しました。
in add_stores, at var-tracking.c:6000
- LLVM 自動ベクトル化によって
llvm.cttz.v2i64()
(ARM 命令セットに対応するものがない命令)が生成される Clang 3.5 の不具合の回避策を実装しました。
- その他のバグの修正:
-
- 以下のヘッダーとライブラリを修正しました。
media/NdkMediaDrm.h
のPROPERTY_*
を修正しました。mips64
のsys/ucontext.h
を修正しました。__builtin_isnan
と__builtin_isinf
に対する Clang バージョン チェックを廃止しました。android-21/arch-mips/usr/include/asm/reg.h
とandroid-21/arch-mips64/usr/include/asm/reg.h
を追加しました。- x86 の場合に GCC 4.9 が生成していた誤った配列境界警告を修正し、ARM の場合に GCC 4.9 が生成していた配列境界警告を再度有効にしました。ARM の場合の警告は、以前は無条件に無効になっていました。
- GCC の動作を一致させるために、
mips
とmips64
で書き込み可能な.gcc_except_table
を作成するように Clang 3.5 を修正しました。この変更により、 は、次のリンカー警告を回避するためのものです。.../ld: warning: creating a DT_TEXTREL in a shared object
- Clang で
mips64
向けにコンパイルを実行した場合にクラッシュの原因となっていたcompiler-rt
の不具合の修正プログラムを移植しました。詳しくは、LLVM の不具合 20098 をご覧ください。 - ASCII 以外のコメントで発生する Clang 3.5 のクラッシュを修正しました(不具合 81440)。
-1
と1
を返すようにstlport collate::compare
を修正しました。これまでは、任意の符号付き数値を返していました。- 64 ビット ABI の
ndk-gdb
を修正しました(不具合 118300)。 - RenderScript の HelloComputeNDK サンプルが Android 4.4(Android API レベル 19)で引き起こしていたクラッシュを修正しました。詳しくは、こちらのページをご覧ください。
- GCC の
libc++ __wrap_iter
を修正しました。詳しくは、LLVM の不具合 22355 をご覧ください。 - ABI の
x86_64
に対する.asm
のサポートを修正しました。 - GCC 4.8 の
stlport
の不具合に対する回避策を実装しました(不具合 127773)。 - Windows のプロジェクト パスから末尾のディレクトリ区切り記号
\\
を削除しました(不具合 160584)。 gradle
からndk-build.cmd
コマンドを実行することにより、単一の.c
ファイルをコンパイルしているときに発生するno rule to make target
エラーを修正しました(不具合 66937)。- 以下のホスト ツールチェーンに欠落していた
libatomic.a
ライブラリとlibgomp.a
ライブラリを追加しました。aarch64-linux-android-4.9
mips64el-linux-android-4.9
mipsel-linux-android-4.9
x86_64-4.9
- その他の変更点:
-
aarch64
用にld.gold
を追加しました。デフォルトのリンカーはld.bfd
のままです。ld.gold
を明示的に有効にするには、LOCAL_LDFLAGS
変数またはAPP_LDFLAGS
変数に-fuse-ld=gold
を追加します。- R6 サポートを強化するために
binutils-2.25
を使用して MIPS ツールチェーンと MIPS64 ツールチェーンをビルドしました。 -fstandalone-debug
(完全なデバッグ情報)を Clang のデフォルト オプションにしました。-fstack-protector
を、GCC 4.9、Clang 3.5、Clang 3.6 の ARM、AArch64、X86、X86_64 ツールチェーン用の-fstack-protector-strong
に置き換えました。- ビルドシステムがパッケージ名をオーバーライドできるように、
ndk-gdb
に--package
コマンドライン スイッチを追加しました(不具合 56189)。 - MIPS 用の
-mno-ldc1-stc1
のサポートを終了しました。このオプションは、新しい-fpxx
および-mno-odd-spreg
オプション、または FPXX ABI と併用できない場合があります。 cpu-features
に MIPS MSA と R6 の検出を追加しました。
Android NDK r10d(2014 年 12 月)
- 重要な変更点:
-
- GCC 4.8 をすべての 32 ビット ABI のデフォルトにしました。GCC 4.6 が非推奨になり、次回のリリースで削除される予定です。以前の動作を復元するには、ndk-build に
NDK_TOOLCHAIN_VERSION=4.6
を追加するか、コマンドラインでmake-standalone-toolchain.sh
を実行する場合は--toolchain=arm-linux-androideabi-4.6
を追加します。GCC 4.9 は、64 ビット ABI のデフォルトのままです。 - デフォルトで、すべての x86[_64] ツールチェーンが
-mstackrealign
を追加できないようにしました。NDK ツールチェーンは 16 バイトのスタック アライメントを前提とします。デフォルトで使用されるツールとオプションはこのルールに従います。ユーザーが作成するアセンブリ コードは、スタック アライメントを保持する必要があり、他のコンパイラもこのルールに従うことを保証する必要があります (GCC のバグ 38496)。 - ARM ABI と x86 ABI に対する Clang 3.5 サポートに Address Sanitizer 機能を追加しました。この変更について詳しくは、Address Sanitizer プロジェクトをご覧ください。
- API レベル 21 以降で、ビルド時に
-fPIE -pie
を使用するという要件を導入しました。API レベル 16 以降では、ndk-build でビルド時にPIE
が使用されます。この変更は、デベロッパー プレビュー不具合 888 に記載されているさまざまな影響をもたらします。共有ライブラリにはこれらの影響はありません。
- GCC 4.8 をすべての 32 ビット ABI のデフォルトにしました。GCC 4.6 が非推奨になり、次回のリリースで削除される予定です。以前の動作を復元するには、ndk-build に
- 重要なバグの修正:
-
- aarch64-linux-android-4.9 リンカーの A53 Errata #835769 に関連する修正を行いました。その一環として、GCC は、
-mfix-cortex-a53-835769
(デフォルトで有効)が指定された場合に、新しいオプションの--fix-cortex-a53-835769
を渡します。詳しくは、こちらの binutils メッセージと、こちらの binutils メッセージをご覧ください。 - API レベル 21 で発生する libc++
sscanf/vsscanf
ハングに対する修正を文書化しました。修正自体は r10c で実装されています(不具合 77988)。 -Os
が指定された場合に GCC 4.9 で発生する AutoFDO(-fauto-profile
)のクラッシュを修正しました(不具合 77571)。
- aarch64-linux-android-4.9 リンカーの A53 Errata #835769 に関連する修正を行いました。その一環として、GCC は、
- その他のバグの修正:
-
- 以下のヘッダーとライブラリを修正しました。
- API レベル 16 に
posix_memalign
を追加しました。また、API レベル 16~19 でstdlib.h
にプロトタイプを追加しました(不具合 77861)。 - C++11 の場合にのみ
<atomic>
を含めるようにstdatomic.h
を修正しました。 sys/user.h
と、API レベル 21 のgl2ext.h
、dlext.h
、fts.h
、sgidefs.h
の各ヘッダーをスタンドアロンで使用するために変更しました。sys/user.h
を次のように修正しました。mxcsr_mask
の名前をmxcr_mask
に変更し、u_ar0
のデータ型をsysconf()
の戻り値の型をint
からlong
に変更しました。LOCAL_ARM_MODE
に対するthumb
の ndk-build の扱いを修正しました。r10d では、以下の条件のいずれかが適用されない限り、ndk-build はデフォルトでLOCAL_LDFLAGS+=-mthumb
を追加します。LOCAL_ARM_MODE
をarm
と等価に設定している。- 以前のツールチェーンとの互換性を維持するために ARM モードがデフォルトになっているデバッグビルド(
APP_OPTIM=debug
などの設定や、android:debuggable="true"
を含むAndroidManifest.xml
を使用)を実行している(不具合 74040)。 - Windows の絶対パスを使用するように ndk-build の
LOCAL_SRC_FILES
を修正しました(不具合 74333)。 - ndk-gdb から bash 固有のコードを削除しました(不具合 73338)。
make-standalone-toolchain.sh
から bash 固有のコードを削除しました(不具合 74145)。System.loadLibrary()
の推移的な依存関係の修正に関するドキュメントを改訂しました(不具合 41790)。- 64 ビット パッケージが Ubuntu 14.04 と OS X 10.10(Yosemite)上で展開されない問題を修正しました(不具合 78148)。
- Clang サポートを強化するために
LOCAL_PCH
に伴う不具合を修正しました(不具合 77575)。 - ld.gold からの "requires executable stack" 警告を明確にしました(不具合 79115)。
unsigned long
から user_regs_struct* 構造体に変更しました。
Android NDK r10c(2014 年 10 月)
- 重要な変更点:
-
- ダウンロード構造に対する以下の変更を実行しました。
- 各パッケージに、それぞれのプラットフォーム用の 32 ビットと 64 ビット両方のヘッダー、ライブラリ、ツールが含まれるようになりました。
- デバッグ情報を含む STL ライブラリを個別にダウンロードする必要がなくなりました。
Android-L
と呼ばれていたものを公式リリースの名称であるandroid-21
に変更しました。- 新しいベースを GCC リポジトリの
google
ブランチに設定することにより、GCC 4.9 をアップデートしました。GCC 4.9 のアップストリーム バージョンとの主な違いは次のとおりです。 -O2
オプションは、ループ ピーリングを使用せず、より積極的なアンローリングを使用してベクトル化をオンにするようになりました。- FDO と LIPO の機能強化
- すべてのホストに Clang 3.5 のサポートを追加しました。
NDK_TOOLCHAIN_VERSION=clang
のように設定すると、Clang 3.5 が選択されます。以下の点にご注意ください。 - ARM と x86 はデフォルトで統合アセンブラを使用するように設定されます。これで問題が発生した場合は、回避策として
-fno-integrated-as
を使用します。 - Clang 3.5 では、GCC がサポートする
-finline-functions
オプションなどの未使用のフラグに関する警告がより多く発行されます。 art-on
オプションを指定することにより、ART を仮想マシンとして使用して Android 5.0 デバイス上でデバッグしているときに ART デバッグ モードに入れるようにしました。詳しくは、NDK が格納されたディレクトリ内のprebuilt/common/gdb/common.setup
をご覧ください。- Clang 3.3 に対するサポートを削除しました。
- GCC 4.6 が非推奨になり、今後のリリースで削除される可能性があります。
- mclinker を、Identical Code Folding(ICF)のサポートを含む 2.8 にアップデートしました。ICF を指定するには
--icf
オプションを使用します。 - NEON イントリンシクスの 93% をカバーするように、x86 と x86_64 における
arm_neon.h
のサポートを拡大しました。NEON のサポートの詳細は、以下でご確認いただけます。- NDK Programmer's Guide(
docs/Programmers_Guide/html/
)にアクセスして、「Architectures and CPUs」>「Neon」をご覧ください。 samples/
にある最新のhello-neon
サンプルをご覧ください。- ARM NEON から Intel SSE への移植に関する Intel のガイドをご覧ください。
- NDK Programmer's Guide(
headers/libs/android-21
での_FORTIFY_SOURCE
に対するサポートを文書化しました。このサポートは、android-21
がまだAndroid-L
と呼ばれていた r10 で導入されましたが、文書化されていませんでした。
詳しくは、下記の重要なバグの修正をご覧ください。
GCC を使用したプロジェクトから移行する場合は、
-Wno-invalid-command-line-argument
と-Wno-unused-command-line-argument
を使用して、未使用のフラグの長期的な用途が明確になるまでそれらのフラグを無視することができます。 - 重要なバグの修正:
-
- 以下のエラー メッセージが出力される GCC4.9/aarch64 に伴う内部コンパイラ エラーを修正しました(不具合 77564)。
internal compiler error: in simplify_const_unary_operation, at simplify-rtx.c:1539
- GCC4.9/arm からの不正なコード生成を修正しました(不具合 77567)。
- インライン アセンブリが関係する GCC4.9/mips に伴う内部コンパイラ エラーを修正しました(不具合 77568)。
- GCC4.9/arm が
x = (cond) ? y : x
に対して生成する不正なコードを修正しました(不具合 77569)。- GCC4.9/aarch64 と Clang3.5/aarch64 がデフォルトで Cortex-A53 erratum(835769)に対処するように修正しました。回避策を無効にするには、
-mno-fix-cortex-a53-835769
を指定します。 - その他のバグの修正:
-
- ヘッダーとライブラリに関する以下の修正を
android-21
に対して行いました。- 新しい TV キーコード
android/keycodes.h
を追加しました。 android/sensor.h
に定数と 6 つの新しいセンサー関数(ASensorManager_getDefaultSensorEx
、ASensor_getFifoMaxEventCount
、ASensor_getFifoReservedEventCount
、ASensor_getStringType
、ASensor_getReportingMode
、ASensor_isWakeUpSensor
)を追加しました。- GCC 4.6 との互換性を高め、
<atomic>
ヘッダーをサポートするようにstdatomic.h
を修正しました。 - すべての API レベルに
sys/ucontext.h
とsys/user.h
を追加しました。signal.h
ヘッダーに<sys/ucontext.h>
が含まれるようになりました。struct ucontext
の既存の定義を削除できます。 - API レベル 17、18、19 に
posix_memalign
を追加しました。 android_set_abort_message
、posix_fadvise
、posix_fadvise64
、pthread_gettid_np
の各関数をすべてのアーキテクチャに追加しました。native-media/AndroidManifest.xml
サンプルに必要なパーミッションを追加しました(不具合 106640)。- API レベル 21 に
clock_nanosleep
とclock_settime
を追加しました(不具合 77372)。 get_malloc_leak_info
、free_malloc_leak_info
、__srget
、__swbuf
、__srefill
、__swsetup
、__sdidinit
、__sflags
、__sfp
、__sinit
、__smakebuf
、__sflush
、__sread
、__swrite
、__sseek
、__sclose
、_fwalk
、__sglue
、__get_thread
、__wait4
、__futex_wake
、__open
、__get_tls
、__getdents64
、dlmalloc
の各シンボルをすべてのアーキテクチャから削除しました。basename_r
、dirname_r
、__isthreaded
、_flush_cache
(mips64)の各関数を 64 ビット アーキテクチャから削除しました。- 関数
__signalfd4
を 32 ビット アーキテクチャから削除しました。 strtoll_l
、strtoull_l
、wcstoll_l
、wcstoull_l
の各関数の 3 つ目の引数の型をsize_t
からint
に変更しました。arc4random
、arc4random_buf
、arc4random_uniform
の各関数を 64 ビット アーキテクチャに戻しました。cxa_*
と、new
およびdelete
演算子をlibstdc++.so
に戻しました。この変更により、r9d の動作が復元されます。以前のバージョンの r10 にはプレースホルダ ファイルが含まれていました。
- 新しい TV キーコード
- mips 用に GCC 4.8 および 4.9 での MXU のサポートを復元しました。このサポートは r10 と r10b にはありませんでした。これらのバージョンの GCC は、MXU をサポートしていない binutils-2.24 を使用してコンパイルされていたためです。
- 接尾辞を使用した Clang のバージョン指定を正しくサポートするように、
make-standalone-toolchain.sh
内の--toolchain=
を修正しました。 - libc++/armeabi の
strtod()
関数を修正しました。 docs/
にある NDK ドキュメントを修正しました。
- ヘッダーとライブラリに関する以下の修正を
- その他の変更点:
-
- AES、CRC32、SHA2、SHA1、64 ビット PMULL/PMULL2 の各命令セットに対する ARMv8 のサポートを検出するように
cpu-features
を拡張しました(不具合 106360)。 - GCC 4.8、GCC 4.9、Clang で使用可能な
*-gcc-ar
を使用するように ndk-build を変更しました。Clang は*-ar
の代わりにこのアーカイブを指定します。この設定により、LTO のサポートが改善されます。 - GCC コンパイラから
include-fixed/linux/a.out.h
ヘッダーとinclude-fixed/linux/compiler.h
ヘッダーを削除しました(不具合 73728)。 - Mac OS X における GCC 4.8 の
-flto
に関連した不具合を修正しました。次のようなエラー メッセージが表示されます。
.../ld: error: .../libexec/gcc/arm-linux-androideabi/4.9/liblto_plugin.so Symbol not found: _environ
build-binary.mk.
のタイプミスを修正しました(不具合 76992)。 - AES、CRC32、SHA2、SHA1、64 ビット PMULL/PMULL2 の各命令セットに対する ARMv8 のサポートを検出するように
- 重要な既知の問題:
-
- GCC4.9 で -Os(
-fauto-profile
)を指定すると、クラッシュすることがあります(不具合 77571)。
- GCC4.9 で -Os(
Android NDK r10b(2014 年 9 月)
- 重要な注意点:
-
- ダウンロード可能パッケージには 512MB というサイズ制限があるため、以下の 32 ビットアイテムが 32 ビット NDK ダウンロード可能パッケージに含まれていません。代わりに、64 ビット パッケージに含まれています。
- Android-L ヘッダー
- GCC 4.9
- 現時点で、NDK から提供されている唯一の Renderscript のサポートは、Android 4.4(API レベル 19)を使用した 32 ビット Renderscript に対するものです。その他の Renderscript(32 ビットまたは 64 ビット)と Android バージョンの組み合わせでは、HelloComputeNDK(唯一の Renderscript サンプル)をビルドできません。
- ネイティブ コーデックをコンパイルするには、すべての Android-L ヘッダーが揃っている 64 ビット NDK パッケージを使用する必要があります。
- 重要なバグの修正:
- その他のバグの修正:
-
- すべてのバージョンの GCC の
include-fixed/
ディレクトリからstdio.h
を削除しました(不具合 73728)。 platforms/android-L/arch-*/usr/include/linux/netfilter*/
ディレクトリ内の Windows パッケージから、重複するヘッダー ファイルを削除しました(不具合 73704)。- Clang で HelloComputeNDK をビルドできない問題を修正しました。
- atexit を修正しました(不具合 66595)。
docs/
とsources/third_party/googletest/README.NDK
のドキュメントに対するさまざまな修正を行いました(不具合 74069)。- Android-L ヘッダーに対して以下の修正を実行しました。
ctype.h
とwchar.h
に対し、dn_expand()
、grantpt()
、inet_nsap_addr()
、inet_nsap_ntoa()
、insque()
、nsdispatch()
、posix_openpt()
、__pthread_cleanup_pop()
、__pthread_cleanup_push()
、remque()
、setfsgid()
、setfsuid()
、splice()
、tee()
、twalk()
(不具合 73719)の各関数と 42 個の*_l()
関数を追加しました。cmsg_nxthdr
の名前を__cmsg_nxthdr
に変更しました。__libc_malloc_dispatch
を削除しました。ptrace()
のプロトタイプをlong ptrace(int, ...);
に変更しました。sha1.h
を削除しました。android/dlext.h
のandroid_dlextinfo
を拡張しました。stdlib.h
、time.h
、wchar.h
、complex.h
で float 型または double 型の値を受け取るまたは返す関数の__NDK_FPABI__
の注釈を追加しました。
- すべてのバージョンの GCC の
- その他の変更点:
-
- 新しい multilib ディレクトリ レイアウトを実装し、gdb-7.7 をサポートするように、
mipsel-linux-android-4.9
とmips64el-linux-android-4.9
を更新しました。 - 新しい arm64 機能を検出するように
cpu-features
を拡張しました(変更点一覧 100339)。
- 新しい multilib ディレクトリ レイアウトを実装し、gdb-7.7 をサポートするように、
Android NDK r10(2014 年 7 月)
- 重要な変更点:
-
- 3 つの新しい ABI(すべて 64 ビットの arm64-v8a、x86_64、mips64)を追加しました。 以下の点に注意してください。
- GCC 4.9 は 64 ビット ABI のデフォルトのコンパイラです。Clang の現在のバージョンは 3.4 です。
NDK_TOOLCHAIN_VERSION=clang
は arm64-v8a と mips64 に対して動作しない可能性があります。 - Android-L は 64 ビット サポートを伴う最初のレベルです。この API レベルは一時的なものであり、L プレビュー専用であることに注意してください。実際の API レベル番号は L リリースで置き換えられる予定です。
- このリリースには、
APP_ABI
のall32
設定とall64
設定が含まれます。APP_ABI=all32
はAPP_ABI=armeabi,armeabi-v7a,x86,mips
と等価です。APP_ABI=all64
はAPP_ABI=arm64-v8a,x86_64,mips64
と等価です。APP_ABI=all
はすべての ABI を選択します。
- Android-L の新しい GNU libstdc++ にはすべての
<tr1/cmath>
が含まれています。リンカーからの「複数定義」エラーを回避するには、独自の数学関数を定義する前に、_GLIBCXX_USE_C99_MATH_TR1
で同じ名前の関数が存在しないことを確認してください。 - cpu-features ライブラリが ARMv8 カーネル用に更新されました。既存の cpu-features ライブラリでは、ARMv8 プラットフォーム上の NEON の存在を検出できない可能性があります。コードを新しいバージョンで再コンパイルしてください。
- 新しい
platforms/android-L/
API ディレクトリを追加しました。このディレクトリには以下が格納されます。 - Android API レベル 3(Cupcake)から変更されていなかった Bionic ヘッダーを 19(KitKat)に更新しました。このレベル L 用の新しいバージョンは AOSP と同期する必要があります。
- 新しいメディア API とネイティブ コーデックのサンプル。
- AudioPlayer での単精度浮動小数点オーディオ形式をサポートするように更新された SLES/OpenSLES 用の
Android.h
ヘッダー。 libGLESv3.so.
に対する GLES 3.1 と AEP の拡張機能。- 最新の公式 Khronos バージョンにアップデートされた GLES2 ヘッダーと GLES3 ヘッダー。
- 32/64 ビット ABI に GCC 4.9 コンパイラを追加しました。GCC 4.9 は、前述したように 64 ビット ABI のデフォルト(唯一)のコンパイラです。32 ビット ABI では、依然として GCC 4.6 がデフォルトであるため、GCC 4.9 を明示的に有効にする必要があります。
- ndk-build では、
Application.mk
にNDK_TOOLCHAIN_VERSION=4.9
を追加するか、コマンドラインから環境変数としてエクスポートすることにより、32 ビット GCC 4.9 ビルドを有効にします。 - スタンドアロン ツールチェーンでは、
make-standalone-toolchain.sh
スクリプトで--toolchain=
オプションを使用します(例:--toolchain=arm-linux-androideabi-4.9.
)。 - GCC 4.8 / 4.9 と x86 で GDB をバージョン 7.6 にアップグレードしました*。GCC 4.6 では GDB が依然としてバージョン GDB-7.3.x(ARM と MIPS のデフォルト)であるため、ndk-gdb で GDB 7.6 を選択できるように
NDK_TOOLCHAIN_VERSION=4.8
または4.9
を設定する必要があります。 - SSSE3 をサポートし、それを ABI x86 のデフォルトにするために
-mssse3
ビルド オプションを追加しました(SSE3 からのアップグレード)。Google からリリースされるイメージには、SSSE3 命令が含まれていません。 - GCC 4.8 を 4.8.3 にアップデートしました。
- gabi++ から libc++abi に切り替えることにより、ARM libc++ EH のサポートを向上させました。詳しくは、ドキュメントの「C++ のサポート」をご覧ください。 以下の点にご注意ください。
- Clang 3.4 と GCC 4.8 では、ロケール以外のすべてのテストに合格しました詳しくは、ドキュメントの「C++ のサポート」をご覧ください。
- X86 と MIPS libc++ 用の libc++ ライブラリではまだ gabi++ が使用されます。
- GCC 4.7 以降で、<atomic> を使用できるようになりました。
__list_imp::_end
_ は TBAA ルールに違反するため、<list>
を使用する場合は-fno-strict-aliasing
を追加する必要があります(不具合 61571)。- GCC 4.6 以降では、LIBCXX_FORCE_REBUILD:=true のように設定しても libc++ が再ビルドされなくなります。再ビルドするためには、別のコンパイラを使用する必要があります。Clang 3.3 はテストされていないことにご注意ください。
- mclinker の最新バージョンは 2.7 で、aarch64 Linux のサポートが含まれています。
LOCAL_PCH
によって指定されるヘッダーに対するプリコンパイルされたヘッダーのサポートを追加しました(不具合 25412)。
- 重要なバグの修正:
-
std::feof
などをコンパイルするように libc++ を修正しました(不具合 66668)。- ABI armeabi の libc++ テストの一部でクラッシュを引き起こす Clang 3.3/3.4 アトミック ライブラリ呼び出しを修正しました。
- プリコンパイルされたヘッダーの読み取り中に発生する Clang 3.4 のクラッシュを修正しました(不具合 66657)。
- 以下における Clang 3.3/3.4
-O3
のアサートを修正しました。 - 以下における Clang 3.3/3.4 のクラッシュを修正しました。
llvm-3.2/llvm/include/llvm/MDBuilder.h:64: llvm::MDNode* llvm::MDBuilder::createBranchWeights(llvm::ArrayRef
(不具合 57381)): Assertion Weights.size() >= 2 && "Need at least two branch weights!" Assertion failed: (!Fn && "cast failed but able to resolve overload expression!!"), function CheckCXXCStyleCast, file Volumes/data/ndk-toolchain/src/llvm-3.3/llvm/tools/clang/lib/Sema/SemaCast.cpp, line 2018
(不具合 66950) - その他のバグの修正:
-
- 以下のヘッダーを修正しました。
- 32 ビットの
ssize_t
がlong int
ではなくint
になるよう修正しました。 WCHAR_MIN
とWCHAR_MAX
が稼働しているアーキテクチャに応じて適切な符号を使用するように修正しました。- X86/MIPS: 符号付き。
- ARM: 符号なし。
- X86/MIPS をデフォルトで符号なしに設定するには、
-D__WCHAR_UNSIGNED__
を使用します。 wchar_t
を 16 ビットにするには、-fshort-wchar
を使用します。- 32 ビット
libc.so
から存在しないシンボルを削除し、Android API レベル 12 以降のpread64
、pwrite64
、ftruncate64
を追加しました(不具合 69319)。詳細については、AOSP 変更点一覧 94137 を伴うコミット メッセージをご覧ください。 putchar
の再定義に関する GCC 警告を修正しました。次のような警告メッセージが表示されます。make-standalone-toolchain.sh --stl=libc++
を次のように修正しました。- 外部プログラムのプロセスの生成に必要な場合にのみ引数を引用するように GCC/Windows を修正しました。この変更により、32K の長さ制限を超える可能性が減少します。
APP_PLATFORM
環境変数の調整ができなくなる不具合を修正しました。- ライブラリパスの真のベース名を特定するために
strchr()
ではなくstrrchr()
を使用するように、crazy_linker のIsSystemLibrary()
の実装を修正しました。 - デバッグモードでネイティブ オーディオをビルドできない不具合を修正しました。
- gdb で極端な浮動小数点数を出力できない不具合を修正しました(不具合 69203)。
- Clang 3.4 で
-Wl,-shared
を指定してコンパイルできない不具合を修正しました(コンパイルの不具合が発生しない-shared
とは対照的)。-shared
も-static
も存在しない場合に Clang が Android ターゲット用の-pie
を追加していたことが問題でした。この誤った動作によって、リンカーから-shared
と-pie
は共存できないというエラーが出力されていました。
include/stdio.h:236:5: warning: conflicts with previous declaration here [-Wattributes] int putchar(int);
(変更点一覧 91185) - その他の変更点:
-
- Neon の約 47% をエミュレートするように、x86 ツールチェーンに
arm_neon.h
を追加しました。現時点で 64 ビット型に対するサポートは存在しません。詳細については、x86 ドキュメントの ARM Neon イントリンシクスのサポートに関するセクションをご覧ください。 - ARM/GOT_PREL 最適化(GCC Google ブランチからビルドされた GCC 4.6 内に存在)を ARM GCC 4.8/4.9 に移植しました。この最適化によって、グローバル変数にアクセスするときの命令数が削減される場合があります。例として、
$NDK/tests/build/b14811006-GOT_PREL-optimization/
の build.sh スクリプトをご覧ください。 - STL gabi++、stlport、libc++ の ARM バージョンを追加しました。このバージョンと Thumb モードの両方が存在することになります。
--toolchain=x86_64-4.9
と等価の--toolchain=x86_64-linux-android-4.9
を指定して make-standalone-toolchain.sh スクリプトを呼び出すことができるようになりました。
- Neon の約 47% をエミュレートするように、x86 ツールチェーンに
Android NDK r9d(2014 年 3 月)
- 重要な変更点:
-
- Clang 3.4 コンパイラに対するサポートを追加しました。
NDK_TOOLCHAIN_VERSION=clang
オプションが Clang 3.4 を選択するようになりました。デフォルトは GCC 4.6 のままです。 - 新しい multilib オプションの
-mfloat-abi=hard
を含むAPP_ABI=armeabi-v7a-hard
を追加しました。これらのオプションは、ARM GCC 4.6/4.8 と Clang 3.3/3.4(4.8 のアセンブラ、リンカー、ライブラリを使用)で使用するためのものです。これらのオプションを使用する場合は、以下の変更点にご注意ください。 -
ndk-build
スクリプトを実行する場合は、 armeabi-v7a ターゲットのオプションは次のとおりです。TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1 TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard
ビルドされたライブラリがlibs/armeabi-v7a
にコピーされます。Make to 想定どおりに動作するため、armeabi-v7a
と make のターゲットとして(つまり、APP_ABI= の行で)armeabi-v7a-hard
。 このような場合は、どちらかが無視されます。なお、APP_ABI=all
引き続きarmeabi armeabi-v7a x86 mips
。 make-standalone-toolchain.sh
スクリプトは、/hard
ディレクトリに追加されたライブラリをコピーします。GCC または Clang で/hard
内のライブラリとリンクできるようにするには、makefile に上記のCFLAGS
とLFLAGS
を追加します。- yasm アセンブラに加えて、x86 ターゲット用の
LOCAL_ASMFLAGS
フラグとEXPORT_ASMFLAGS
フラグも追加しました。ndk-build
スクリプトはprebuilts/*/bin/yasm*
を使用して、.asm
拡張子を持つLOCAL_SRC_FILES
をビルドします。 - MClinker を
-gc-sections
のサポートが追加された 2.6.0 にアップデートしました。 - 試験運用版の libc++ のサポート(アップストリーム r201101)を追加しました。この新しい機能は以下の手順で使用します。
APP_STL := c++_static
またはAPP_STL := c++_shared
をApplication.mk
に追加します。LIBCXX_FORCE_REBUILD := true
のように設定してソースから再ビルドすることもできます。make-standalone-toolchain.sh --stl=libc++
を実行し、libc++ ヘッダー / ライブラリを使用してスタンドアロン ツールチェーンを作成します。
CPLUSPLUS-SUPPORT.html
をご覧ください(不具合 36496)。
- Clang 3.4 コンパイラに対するサポートを追加しました。
- 重要なバグの修正:
-
- GCC 4.6/4.8 ARM EABI の予期せぬ例外ハンドラからの捕捉されないスローを修正しました(GCC の不具合 59392)。
- 従属する非型テンプレート引数を使用したテンプレートの部分特殊化が正しく解決されるように GCC 4.8 を修正しました(GCC の不具合 59052)。
- ビルド済みの python に新しいモジュールを追加しました(不具合 59902)。
- Mac OS X:
zlib
、bz2
、_curses
、_curses_panel
、_hashlib
、_ssl
- Linux:
zlib
、nis
、crypt
、_curses
、_curses_panel
- Mac OS X:
- x86 と MIPS gdbserver の
event_getmsg_helper
を修正しました。 - RenderScript NDK ツールチェーンのさまざまな不具合を修正しました。これには、古いデバイスと C++ リフレクションの互換性に伴う不具合が含まれます。
- その他のバグの修正:
-
- ヘッダーの修正:
- Android API レベル 13 以降の
android/asset_manager.h
で#include <sys/types.h>
が欠落していた不具合を修正しました(不具合 64988)。 - Android API レベル 14 以降の
android/rect_manager.h
で#include
が欠落していた不具合を修正しました。 JNICALL
をjni.h
のJNI_OnLoad
とJNI_OnUnload
に追加しました。JNICALL
が__NDK_FPABI__
として定義されていることに注意してください。詳しくは、sys/cdefs.h
をご覧ください。- 手動で依存関係を含めなくてもいいように、以下のヘッダーを更新しました(不具合 64679)。
android/tts.h EGL/eglext.h fts.h GLES/glext.h GLES2/gl2ext.h OMXAL/OpenMAXSL_Android.h SLES/OpenSLES_Android.h sys/prctl.h sys/utime.h
- Android API レベル 13 以降の
sys/cachectl.h
をすべてのアーキテクチャに追加しました。MIPS のデベロッパーは、#ifdef __mips__
を記述する代わりに、このヘッダーを含めることができるようになりました。- 浮動小数値または倍精度値を取得するまたは返す関数に
__NDK_FPABI__
を追加することにより、platforms/android-18/include/android/input.h
を修正しました。 - Android API レベル 12 以降の 64 ビット同等のシステムに誤って設定されていた MIPS
struct stat
を修正しました。この間違った設定は、リリース r9c が導入された際のリグレッションとなっていました。 - Android API レベル 9 以前用の
__PTHREAD_MUTEX_INIT_VALUE
、__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE
、__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE
を定義しました。 - API 18 以降の x86
libm.so
にscalbln
、scalblnf
、scalblnl
を追加しました。 sources/android/support/include/iconv.h
のタイプミスを修正しました(不具合 63806)。
std::terminate()
を呼び出して、ユーザー定義のstd::terminate()
ハンドラが実行できるように gabi++std::unexpected()
を修正しました。std::nullptr
をキャッチするように gabi++ を修正しました。- サンプルの Teapot と MoreTeapots を修正しました。
- 中間精度を使用するように specular 変数を変更することにより、Tegra 2 および 3 チップに伴う問題を解決しました。specular 指数の値を 1.0 未満にできるようになりました。
- 音量ボタンを押すと没入モードが復元され、
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
が無効になるようにサンプルを変更しました。画面の回転ではonSystemUiVisibilityChange
がトリガーされないため、没入モードが復元されません。
ld.bfd
を使用して実行可能ファイルをリンクするために、-rpath-link=$SYSROOT/usr/lib
と-rpath-link=$TARGET_OUT
を追加するようにndk-build
を修正しました(不具合 64266)。- すべての STL ビルドから
-Bsymbolic
を削除しました。- 設定を無視する
python.exe
に渡す代わりに、SHELL
を環境変数として設定することにより、ndk-gdb-py.cmd
を修正しました(不具合 63054)。--stl=stlport
オプションで、gabi++ ヘッダーのシンボリック リンクを作成するのではなく、このヘッダーをコピーするようにmake-standalone-toolchain.sh
スクリプトを修正しました。cmd.exe
と MinGW シェルは、cygwin によって作成されたシンボリック リンクを認識しません。 - ヘッダーの修正:
- その他の変更点:
-
- デベロッパーが cygwin 内で、推奨されている
ndk-build
スクリプトの代わりにndk-build.cmd
を使用したい場合に備えて、cmd.exe
シェルでの使用しか想定されていなかったすべての*cmd
スクリプトに実行権限を適用しました。 - 指定された宛先ディレクトリが存在しない場合にコピーではなく移動することにより、
make-standalone-toolchain.sh
スクリプトの速度を改善しました。
- デベロッパーが cygwin 内で、推奨されている
Android NDK r9c(2013 年 12 月)
これはバグ修正のみのリリースです。
- 重要なバグの修正:
-
- スタック ポインタの復元が早すぎる GCC 4.8 ARM に伴う問題を修正しました。この問題によって、フレーム ポインタからスタック フレーム内の変数に確実にアクセスできませんでした(GCC の不具合 58854)。
- std::nth_element のバグによって、セグメンテーション違反がランダムに発生するコードが生成される GCC 4.8 libstdc++ に伴う問題を修正しました(不具合 62910)。
- cc1/cc1plus での GCC 4.8 ICE を修正
-fuse-ld=mcld
を再度実装します。これにより、次のエラーが発生しなくなります。cc1: internal compiler error: in common_handle_option, at opts.c:1774
__builtin
数学関数の-mhard-float
のサポートを修正しました。STL を使用した-mhard-float
に対する修正の最新情報については、不具合 61784 をご確認ください。
- その他のバグの修正:
-
- ヘッダーの修正:
poll
のプロトタイプをpoll.h
内でpoll(struct pollfd *, nfds_t, int);
に変更しました。- Android API レベル 12 および 19 の
libc.so
にutimensat
を追加しました。これらのライブラリは、Android API レベル 12~19 のすべてに含まれることになります。 - Android API レベル 19 の
libc.so
にfutimens
を導入しました。 - Android API レベル 8 以降の
time.h
に欠落していたclock_settime()
とclock_nanosleep()
を追加しました。 CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,
CLOCK_BOOTTIME_ALARM
をtime.h.
に追加しました。- サポートが終了した
CLOCK_REALTIME_HR
とCLOCK_MONOTONIC_HR.
を削除しました。
- サンプルの Teapot、MoreTeapots、
source/android/ndk_helper
における変更点:- armeabi-v7a に対して hard-float abi を使用するように変更しました。
- Android API レベル 19 以降で没入モードを使用するように更新しました。
- x86 デバイスでクラッシュを引き起こす
/system/lib/libdvm.so
のCheck_ReleaseStringUTFChars
に伴う問題を修正しました。
- NDK パッケージがシンボリック リンク経由で参照されているときに cygwin で発生する
ndk-build
エラーを修正しました。 LOCAL_SRC_FILES
に絶対パスが含まれているときに Windows のcmd.exe
で発生するndk-build.cmd
エラーを修正しました(不具合 69992)。- ルーチン、ファイル名、または行番号が見つからないためにフレームを解析できなかった場合でも処理が続行されるように
ndk-stack
スクリプトを修正しました。このようなケースでは??
が出力されます。 pc
、eip
、ip
を含まないstack:
セクション内の行とフレーム行を誤って照合しないように、windows-x64_64 ターゲットのndk-stack
スタックを修正しました。次に例を示します。I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so
- gabi++ を次のように修正しました。
- C++ thread-local オブジェクトを割り当てるために malloc() を使用しないようにします。
- libc.debug.malloc が userdebug/eng Android プラットフォーム ビルドで 0 以外になった場合の gabi++ 内のデッドロックを回避します。
- ヘッダーの修正:
- その他の変更点:
-
LOCAL_EXPORT_LDFLAGS
を追加しました。- オプションが明示的に
ndk-build
に渡される統合ビルドシステムで使用するための設定NDK_PROJECT_PATH=null
を導入しました。この設定を使用すれば、ndk-build
はNDK_PROJECT_PATH.
の検索を試みません。また、変数で NDK_PROJECT_PATH からデフォルト設定を抽出できなくなります。そのため、NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG
の各変数(オプション、デフォルトで 0 に設定される)や、Application.mk
に含まれているその他のAPP_*
変数を明示的に指定する必要があります(デフォルト値がある場合はデフォルト値のままにします)。 APP_ABI
は、カンマ区切り値リストに列挙できるようになりました。対象 例:APP_ABI := "armeabi,armeabi-v7a"
-g
オプションを使用して、android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
という名前の別のオプション パッケージ内のデバッグ情報を使用してすべての STL を再ビルドできるようにしました。このオプションは、ndk-stack
スクリプトで STL 全体のスタックダンプを出力するのに役立ちます。最後のストリップ ファイルのコードまたはサイズには影響ありません。- コンパイル時に
APP_ABI
を報告するようにhello-jni
サンプルを拡張しました。 ar
ツールを確定モード(オプション-D
)で使用して、静的ライブラリをビルドします(不具合 60705)。
Android NDK r9b(2013 年 10 月)
- 重要な変更点:
-
- レベル 13、15、16、17 の追加を含む、18 までのすべての Android API レベルの
include/android/*h
とmath.h
を更新しました。追加された API については、変更点 68012 と変更点 68014 のコミット メッセージをご覧ください(不具合 47150、不具合 58528、不具合 38423)。 - Renderscript のバインディングを含む、Android API レベル 19 に対するサポートを追加しました。
- 既存の armeabi-v7a ABI の
-mhard-float
に対するサポートを追加しました。Clang の詳細情報と現在の制限事項については、tests/device/hard-float/jni/Android.mk
をご覧ください。 - GNU Compiler Collection(GCC)4.8 から 4.8.2 に移行し、診断色のサポートを追加しました。診断色を有効にするには、
-fdiagnostics-color=auto
を設定します。 次のように-fdiagnostics-color=always,
するか、GCC_COLORS
をエクスポートします。GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
詳細については、次をご覧ください: GCC 言語に依存しないオプション。 - OpenGL ES 3.0 機能を実演するための新しい 2 つのサンプルである Teapot と MoreTeapots を追加しました。 これらのサンプルは、Android 4.1(API レベル 16)以降が搭載されたデバイスで動作します。
- GCC 4.7 と Clang 3.2 は、サポートが終了し、次回のリリースで削除されます。
- レベル 13、15、16、17 の追加を含む、18 までのすべての Android API レベルの
- 重要なバグの修正:
-
- 16 ビット相対ジャンプ テーブルを生成できない ARM GCC 4.6
thumb2
に伴う問題を修正しました(GCC の不具合)。 g++.dg/cpp0x/lambda/lambda-defarg3.C
に対する GCC 4.8 内部コンパイラ エラー(ICE)を修正しました(変更点 62770、GCC の不具合)。- Windows 32 ビットの
*-gdb.exe
実行可能ファイルを起動できない問題を修正しました(不具合 58975)。 - bullet ライブラリのビルド時の GCC 4.8 ICE を修正しました。エラー メッセージは次のとおりです。
internal compiler error: verify_flow_info failed
(問題 58916、 GCC に関する問題) - プロローグ コードでアンワインドするために
ARM.exidx
データをスキップするように GDB/ARM ビルドを修正し、exidx ベースのスタック アンワインドを制御するためのコマンド(set arm exidx-unwinding
)を追加しました(不具合 55826)。 - HI レジスタと HO レジスタが正しく再利用されない Clang 3.3 MIPS コンパイラの問題を修正しました。
dbx_reg_number
内の MIPS 4.7 ICE に伴う不具合を修正しました。エラー メッセージは次のとおりです。 次のようになります。external/icu4c/i18n/decimfmt.cpp:1322:1: internal compiler error: in dbx_reg_number, at dwarf2out.c:10185
(GCC パッチ)
- 16 ビット相対ジャンプ テーブルを生成できない ARM GCC 4.6
- その他のバグの修正:
-
- ヘッダーの修正
- ARM の
WCHAR_MIN
とWCHAR_MAX
を仕様に合わせて符号なしにするように修正しました(X86/MIPS バージョンは符号付き)。以前の動作を復元するには、_WCHAR_IS_ALWAYS_SIGNED
を定義します(不具合 57749)。 TCP_INFO
状態列挙型を含めるようにinclude/netinet/tcp.h
を修正しました(不具合 38881)。- c++11 モードの使用時の GCC 4.8 ツールチェーンでの警告の生成を停止するように
cdefs_elh.h
のマクロ_C_LABEL_STRING
を修正しました(不具合 58135、不具合 58652)。 - ヘッダー
inttypes.h
から存在しない関数imaxabs
とimaxdiv
を削除しました。 pthread_exit()
の戻り値とpthread_self()
に伴う不具合を修正しました(不具合 60686)。- 欠落していた
mkdtemp()
関数を追加しました(bionic
ヘッダーstdlib.h
にはすでに存在します)。
- ARM の
- Android API レベル 11 で Clang を使用して
samples/gles3jni
をビルドしたときに発生する問題を修正しました。 - オプションの
-gc-sections
と--eh-frame-hdr
を複数回指定できるように MCLinker を修正しました。 --no-warn-mismatch
オプションを受け入れるように MCLinker を修正しました。- すべての VFPv4 デバイスで IDIV がサポートされることを前提としないように
cpu-features
オプションを変更しました。このオプションは、Nexus 4 を含むホワイトリストに登録されたデバイスにのみ IDIV を追加します(不具合 57637)。 - 誤ってイベント プリディスパッチ操作のエラーを記録する
android_native_app_glue.c
に伴う問題を修正しました。 gabi++
停止と unexpected_handler に対するすべての操作をスレッドセーフにするように修正しました。ssax-instructions
とfenv
のテストに合格できるように、Clang の-integrated-as
オプションに伴ういくつかの不具合を修正しました。- 静的な実行可能ファイルの場合でもリンカー オプション
--eh-frame-hdr
を渡すように GCC 4.6/4.7/4.8 コンパイラを修正しました。詳しくは、GCC のパッチをご覧ください。 CPU-ARCH-ABIS.html
の余分なアポストロフィを修正しました。詳しくは、NDK-DEPENDS.html
をご覧ください(不具合 60142)。- Windows での ndk-build の出力に含まれる余分な引用符を修正しました(不具合 60649)。
__atomic_fetch_add
、__atomic_fetch_sub
、__atomic_fetch_or
などの ARM の組み込みアトミック操作をコンパイルするように Clang 3.3 を修正しました。- カスタマイズされた
vfprintf
に伴う Clang 3.3 の ICE を修正しました(Clang の不具合)。
- ヘッダーの修正
- その他の変更点:
-
- すべての GCC ビルドに対して OpenMP を有効にしました。この機能を使用するには、次のフラグを
ビルド設定:
LOCAL_CFLAGS += -fopenmp LOCAL_LDFLAGS += -fopenmp
コード例については、tests/device/test-openmp
をご覧ください。 ld.mcld
のサイズを大幅に削減(ld.bfd
3.5 MB とld.gold
7.5 MB を 1.5 MB に削減)した結果、速度が約 20% 向上しました。- C のみに適用できる(C++ には適用できない)オプションを指定するために、
LOCAL_CONLYFLAGS
とAPP_CONLYFLAGS
を追加しました。既存のLOCAL_CFLAGS
とAPP_CFLAGS
は C++ コンパイルにも使用されるため(ほとんどのオプションを 2 回指定する手間を省くため)、-std=gnu99
などのオプションは g++ ビルドでは警告を伴って、clang++ ビルドではエラーを伴って失敗する可能性があります。 gabi++
配列ヘルパー関数を追加しました。__aeabi_idiv0
などの過去にブロックされたことのあるポイントをすぎた時点でスタックをアンワインドできるようにするために、すべてのlibgcc.a
ファイルを-funwind-tables
を使用してビルドするように GCC ビルドを変更しました。- MIPS GCC4.6/4.7/4.8 に新しい
-mmxu
オプションによる Ingenic MXU のサポートを追加しました。 - ldxc1/sdxc1 も制御するように MIPS GCC 4.6/4.7/4.8
-mldc1-sdc1
を拡張しました。 - crazy linker を追加しました。詳しくは、
sources/android/crazy_linker/README.TXT
をご覧ください。 - 200x200 のピクセル領域ではなく、全画面に描画するように
bitmap-plasma
を修正しました。 - 同じファイルへのシンボリック リンクを作成することにより、Linux と Darwin のツールチェーンのサイズを 25% 削減しました。
- すべての GCC ビルドに対して OpenMP を有効にしました。この機能を使用するには、次のフラグを
ビルド設定:
Android NDK r9(2013 年 7 月)
- 重要な変更点:
-
- Android 4.3(API レベル 18)に対するサポートを追加しました。詳しくは、
STABLE-APIS.html
と、samples/gles3jni/README
の新しいコードの解説をご覧ください。 - Android 4.3(API レベル 18)以降でサポートされる OpenGL ES 3.0 用のヘッダーとライブラリを追加しました。
- NDK に GNU Compiler Collection(GCC)4.8 を追加しました。デフォルトはまだ GCC 4.6 のため、GCC 4.8 のオプションを明示的に有効にする必要があります。
ndk-build
ビルドでは、NDK_TOOLCHAIN_VERSION=4.8
をエクスポートするかApplication.mk
に追加します。- スタンドアロン ビルドでは、以下のように
make-standalone-toolchain.sh
で--toolchain=
オプションを使用します。
--toolchain=arm-linux-androideabi-4.8
注:
-Wunused-local-typedefs
オプションは-Wall
によって有効化されています。sources/cxx-stl/stlport/stlport/stl/config/features.h
の 311 行目のように、コンパイル時アサートを使用する場合は必ず__attribute__((unused))
を追加します。詳しくは、変更点 55460 をご覧ください。注: GCC 4.7 リリース以降では、ARM コンパイラがデフォルトで ARMv6 以降のビルド ターゲットに対してアラインされていないアクセスコードを生成します。この機能をサポートしていないカーネルの場合は、ビルド時に
-mno-unaligned-access
ビルド オプションを追加する必要があります。 - Clang 3.3 のサポートを追加しました。
NDK_TOOLCHAIN_VERSION=clang
ビルド オプションがデフォルトで Clang 3.3 を選択するようになりました。注: GCC 4.4.3 と Clang 3.1 の両方が非推奨になり、次回の NDK リリースから削除される予定です。
- python 2.7.5 をサポートするように GNU Project Debugger(GDB)アップデートしました。
- Windows ホストをサポートするために MCLinker を追加しました。利用可能な場合は
ld.gold
がデフォルトになるため、MCLinker を有効にするにはLOCAL_LDFLAGS
またはAPP_LDFLAGS
に-fuse-ld=mcld
を追加する必要があります。 - ELF ライブラリの依存関係を出力する
ndk-depends
ツールを追加しました。詳しくは、NDK-DEPENDS.html
をご覧ください(不具合 53486)。
- Android 4.3(API レベル 18)に対するサポートを追加しました。詳しくは、
- 重要なバグの修正:
-
android_native_app_glue
の潜在的なイベント処理の不具合を修正しました(不具合 41755)。- NEON の読み込みに十分なアライメントを生成し、VST 命令と VLD 命令を保存するように ARM/GCC-4.7 ビルドを修正しました(GCC の不具合 57271)。
- 文字列リテラルに対する一定の負のインデックス値に関する GCC 4.4.3/4.6/4.7 内部コンパイラ エラー(ICE)を修正しました(不具合 54623)。
- オブジェクト アドレスを使用した定数初期化に関する GCC 4.7 セグメンテーション違反を修正しました (不具合 56508)。
- Boost 1.52.0 使用時の
-O
値に対する GCC 4.6 ARM セグメンテーション違反を修正しました(不具合 42891)。 wait4()
関数をサポートするようにlibc.so
とlibc.a
を修正しました(不具合 19854)。clone()
関数を含めるように、x86 libc.so ファイルと libc.a ファイルを更新しました。linker.list
ファイルが空であるかまたは使用されないLOCAL_SHORT_COMMANDS
のバグを修正しました。- Mac OS 上の GCC MIPS ビルドを、CFI ディレクティブを使用するように修正しました。このディレクティブがないと、
ld.mcld --eh-frame-hdr
が頻繁に失敗します。 llvm/lib/VMCore/Value.cpp
での Clang 3.2 X86/MIPS 内部コンパイラ エラーを修正しました(変更点 59021)。- GCC 4.7 64 ビット Windows アセンブラのクラッシュを修正しました(エラー:
out of memory allocating 4294967280 bytes
)。 --start
または--launch
のアクションが GNU Debug Server を待機するようにndk-gdb
スクリプトを更新しました。これにより、実行パスの早い段階で設定されたブレークポイント(JNI コード内のブレークポイントなど)に確実にヒットするようになります(不具合 41278)。注: この機能には jdb が必要であり、保留中のブレークポイントに関する警告を生成します。 以前の動作を復元するには、
--nowait
オプションを指定します。- ライブラリ リストが空の場合の GDB のクラッシュを修正しました。
bx pc
またはblx pc
Thumb 命令の後にstepi
コマンドを使用した場合の GDB のクラッシュを修正しました(不具合 56962、不具合 36149)。DT_DEBUG
の代わりにDT_MIPS_RLD_MAP
を探すよう MIPS のgdbserver
を修正しました(不具合 56586)。- ndk-build スクリプト内の循環依存関係を修正しました。たとえば A-> B かつ B-> B の場合、B はビルドから削除されていました (不具合 56690)。
- その他のバグの修正:
-
ndk-build
スクリプトを修正し、Clang のバージョンをコマンドライン オプション(NDK_TOOLCHAIN_VERSION=clang3.2
など)として指定できるようにしました。以前は、バージョンは環境変数としてのみ指定が可能でした。- Clang コンパイラの使用時の MIPS ビルド ターゲットの
_Unwind_Exception
の gabi++ サイズを 24 に修正しました(変更点 54141)。 ndk-build clean
コマンドの使用時にビルド済みの静的ライブラリを含むプロジェクトからビルドしたライブラリが確実に削除されるようにndk-build
スクリプトを修正しました(変更点 54461、変更点 54480)。- 出力が冗長にならないように
NDK_ANALYZE=1
オプションを変更しました。 - 下位互換性を使用するビルドの場合に
backward/
パスを含めるようにgnu-libstdc++/Android.mk
を修正しました(不具合 53404)。 stlport new
が乱数値を返すことがある問題を修正しました。APP_ABIS
ではなくCPU_ABIS
の順序と一致するようにndk-gdb
を修正しました(不具合 54033)。- Mac OS X 上の NDK 64 ビットビルドでコンパイラの誤ったパスが選択される問題を修正しました(不具合 53769)。
- 64 ビット Windows Vista を検出するようにビルド スクリプトを修正しました (不具合 54485)。
- x86 の
ntonl/swap32
のエラーinvalid 'asm': operand number out of range
を修正しました(不具合 54465、変更点 57242)。 - 文字列リテラルをマージするように
ld.gold
を修正しました。 - 大きなシンボルのアライメントを処理するように
ld.gold
を修正しました。 --sort-section=name
オプションを有効にするようにld.gold
を更新しました。- 静的にリンクされたプログラムの場合は
-export-dynamic
オプションを抑制するように GCC 4.4.3/4.6/4.7 を修正しました。GCC は、静的にリンクされたプログラムの場合に.interp
セクションを追加しなくなりました。 _Unwind_Control_Block
の一貫性のないtypedef
に関する GCC 4.4.3stlport
コンパイル エラーを修正しました(不具合 54426)。- 末尾に
\r
文字が付加されるためにビルドエラーを引き起こす可能性がある Windows 上で作成されたAndroidManifest.xml
ファイルに対処するよう、awk
スクリプトを修正しました(不具合 42548)。 prebuilts/
ディレクトリを調査してホストが 32 ビットか 64 ビットかを検出するようにmake-standalone-toolchain.sh
を修正しました。- Clang 3.2
-integrated-as
オプションを修正しました。 - Clang 3.2 ARM EHABI コンパクト モデルの
pr1
とpr2
のハンドラデータを修正しました。 - 以下の Clang エラーを修正するために Clang
-mllvm -arm-enable-ehabi
オプションを追加しました。clang: for the -arm-enable-ehabi option: may only occur zero or one times!
- アプリ マニフェスト内に
uses-sdk
要素が存在しない場合のビルドエラーを修正しました(不具合 57015)。
- その他の変更点:
-
- ヘッダーの修正
errno.h
内の__set_errno
が非推奨になり、libc.so
でエクスポートされなくなったため、__set_errno
をインライン関数にするようにヘッダーを変更しました。stdint.h
をインクルードするようにelf.h
を変更しました(不具合 55443)。- 他のヘッダーとは独立してインクルードされるように
sys/un.h
を修正しました(不具合 53646)。 const AInputEvent* motion_event
を取得するように、すべてのMotionEvent_getHistorical
API を修正しました(不具合 55873)。const void*
を取得するようにmalloc_usable_size
を修正しました(不具合 55725)。- C99 との互換性を高めるように stdint.h を修正しました (変更点 46821)。
WCHAR_MAX
とWCHAR_MIN
を再定義しないよう、wchar.h
を修正しました。- ポインタ関連の
PRI
マクロとSCN
マクロの<inttypes.h>
宣言を修正しました(不具合 57218)。 - API レベルが 9 未満の場合に
__WCHAR_TYPE__
が 32 ビットになるようにsys/cdefs.h
ヘッダーを変更しました。これにより、すべての API レベルでwchat_t
が 32 ビットになります。以前の動作を復元するには、_WCHAR_IS_8BIT
ブール変数を定義します(不具合 57267)。
- NDK
docs/
の書式設定を増やし、各種ドキュメントに修正を加えました。 - 静的ライブラリのビルド時のシンアーカイブ テクニックに対するサポートを追加しました(不具合 40303)。
- オプション
--stl=stlport
を指定する際にgnustl
だけでなくstlport
ライブラリもサポートするよう、スクリプトmake-standalone-toolchain.sh
を更新しました。詳しくは、STANDALONE-TOOLCHAIN.html
をご覧ください。 - ホストの clang 定義と clang++ 定義が誤って使用されることを避けるため、
--llvm-version=
オプションでclang
とclang++
に加えて$TOOLCHAIN_PREFIX-clang
スクリプトと$TOOLCHAIN_PREFIX-clang++
スクリプトが作成されるようmake-standalone-toolchain.sh
スクリプトを更新しました。 - GCC によってコンパイルされたコードとの互換性を高めるために、NDK 内で無効になっているアップストリーム Clang の 2 つの最適化を再度有効にするための 2 つのフラグを追加しました。
- Clang 3.2+ で欠落していた戻りセマンティクスを再度有効にするため、
-fcxx-missing-return-semantics
フラグを追加しました。通常、すべてのパスは値を返す関数の return 文で終わる必要があります。そうでない場合、clang は return 文を使用せず、パスに未定義命令(またはデバッグモードのトラップ)を挿入します。コードが正しいことが確認できている場合は、このフラグを使用してオプティマイザが未定義の動作を利用できるようにします。そうでない場合は、このフラグを使用しないでください。呼び出し元は依然として不正なランダム値を受け取る可能性がありますが、オプティマイザがそれを利用することによりコードのデバッグが困難になることはありません。 - 静的コンストラクタを含むグローバル変数を定数に昇格させるための
-fglobal-ctor-const-promotion
フラグを追加しました。LLVM のグローバル変数最適化パスは、このフラグを使用して静的コンストラクタを含むグローバル変数を評価し、それらをグローバル定数に昇格させようとします。この最適化は正常ですが、GCC によってコンパイルされたコードとの矛盾を引き起こす可能性があります。たとえば、コードがconst_cast
を実行し、定数を変更可能にキャストして変更する場合があります。GCC では変数が読み書き可能なため、コードが誤って実行されます。Clang では const 変数が読み取り専用メモリ内に存在するため、アプリのクラッシュを引き起こす可能性があります。
- Clang 3.2+ で欠落していた戻りセマンティクスを再度有効にするため、
- MIPS GCC コンパイラと Clang コンパイラに
-mldc1-sdc1
を追加しました。デフォルトで、コンパイラは 8 バイトのオブジェクトを正しく配置し、それらを移動するためのldc1
命令とsdc1
命令を発行します。アプリが、必ずしもデフォルトのアロケータと同じ方法で新しいオブジェクトの 8 バイト境界に揃えるわけではないカスタム アロケータを使用している場合は、整列されていないメモリ上でのldc1
とsdc1
の操作によってアプリがクラッシュすることがあります。この場合は、-mno-ldc1-sdc1
フラグを使用して問題を解決します。 APP_PLATFORM_LEVEL
がAPP_MIN_PLATFORM_LEVEL
を上回っている場合は、「警告」から「情報」にイベント重大度をダウングレードしました。jni/Application.mk
ではAPP_PLATFORM_LEVEL
がAPP_PLATFORM
を下回る場合があります。これは、NDK にすべてのレベルに対応するヘッダーがないためです。この場合は、実際のレベルが下位に移動されます。APP_MIN_PLATFORM_LEVEL
は、アプリのマニフェスト内のandroid:minSdkVersion
によって指定されます(不具合 39752)。android_getCpuIdArm()
メソッドとandroid_setCpuArm()
メソッドをcpu-features.c
に追加しました。これにより、ARM CPUID 情報の取得が容易になります(不具合 53689)。- Clang コンパイルに GCC 4.7 の
as/ld
を使用するようにndk-build
を変更しました。注: GCC 4.7 では、
monotonic_clock
とis_monotonic
の名前がそれぞれsteady_clock
とis_steady
に変更されています。 ndk-build
スクリプトに以下の新しい警告を追加しました。LOCAL_LDLIBS/LDFLAGS
が静的ライブラリ モジュールで使用されている場合の警告を追加しました。- 設定にビルドするモジュールが含まれていない場合の警告を追加しました。
- 共有ライブラリまたは実行可能モジュールの
LOCAL_LDLIBS/LDFLAGS
で使用されている非システム ライブラリに関する警告を追加しました。
APP_MODULES
が定義されておらず、静的ライブラリしかAndroid.mk
内に列挙されない場合は、スクリプトがそのすべてを強制ビルドするようにビルド スクリプトを更新しました(不具合 53502)。LOCAL_SRC_FILES
で絶対パスをサポートするようにndk-build
を更新しました。-tui
オプションが有効になっている*-gdb
実行可能ファイルと重複する*-gdbtui
実行可能ファイルを削除しました。- Edison Design Group(EDG)コンパイラ フロントエンドが
_STLP_HAS_INCLUDE_NEXT
をオンに戻したときに警告するようにビルド スクリプトを更新しました(不具合 53646)。 - デフォルトの
$PROJECT/libs
からのlibraries/gdbserver
のパスのオーバーライドを許可するための環境変数NDK_LIBS_OUT
を追加しました。詳しくは、OVERVIEW.html
をご覧ください。 - 書式文字列を保護する
-Wformat -Werror=format-security
を使用してコードをコンパイルするように ndk-build スクリプトのデフォルトを変更しました。無効にする場合は、LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
を設定します。詳しくは、ANDROID-MK.html
をご覧ください。 ndk-gdb-py
に STL プリティプリントのサポートを追加しました。詳しくは、NDK-GDB.html
をご覧ください。- googletest フレームワークに基づくテストを追加しました。
- 現在のシェルが
bash
でない場合に警告する通知をツールチェーン ビルド スクリプトに追加しました。
- ヘッダーの修正
Android NDK r8e(2013 年 3 月)
- 重要な変更点:
-
- 64 ビット ホスト ツールチェーン セット(パッケージ名のサフィックスが
*-x86_64.*
)を追加しました。詳しくは、CHANGES.HTML
とNDK-BUILD.html
をご覧ください。 - Clang 3.2 コンパイラを追加しました。デフォルトは GCC 4.6 のままです。Clang コンパイラの使用方法については、
CHANGES.HTML
をご覧ください。 - Linux/MacOSX ホスト用の静的コード アナライザを追加しました。アナライザの使用方法については、
CHANGES.HTML
をご覧ください。 - Linux/MacOSX ホスト用の MCLinker を試験運用中の機能として追加しました。
ld.gold
リンカーは使用可能であればデフォルトになるため、それを明示的に有効にする必要があります。詳しくは、CHANGES.HTML
をご覧ください。 - モジュールの依存関係に対してトポロジカル ソートを使用するように ndk-build を更新しました。今後は、
LOCAL_STATIC_LIBRARIES
、LOCAL_WHOLE_STATIC_LIBRARIES
、LOCAL_SHARED_LIBRARIES
内で指定されているライブラリの順序を、ビルドが自動的に並べ替えるようになります。詳しくは、CHANGES.HTML
をご覧ください(不具合 39378)。
- 64 ビット ホスト ツールチェーン セット(パッケージ名のサフィックスが
- 重要なバグの修正:
-
-O2
内のすべてのツールチェーンをビルドするようにビルド スクリプトを修正しました。以前のリリースのツールチェーンは最適化を行わず、正しくビルドされていませんでした。- 64 ビットの Mac OS X では無条件に Clang/llvm をビルドするようにビルド スクリプトを修正しました。
- GCC 4.6/4.7 内部コンパイラ エラー(
gen_thumb_movhi_clobber at config/arm/arm.md:5832
)を修正しました(不具合 52732)。 - GCC/ARM 4.6/4.7 が 64 ビット アトミック組み込み関数を使用してコードをリンクできないビルド問題を修正しました(不具合 41297)。
- GCC 4.7 リンカー DIV 使用不一致エラーを修正しました (Sourceware の不具合)。
- GCC 4.7 内部コンパイラ エラー(
build_data_member_initialization, at cp/semantics.c:5790
)を修正しました。 - GCC 4.7 内部コンパイラ エラー(
redirect_eh_edge_1, at tree-eh.c:2214
)を修正しました。 (不具合 52909)。 - GCC 4.7 セグメンテーション違反を修正しました (GCC の不具合)。
<chrono>
クロック分解能を修正し、steady_clock
を有効にしました(不具合 39680)。- GCC 4.7 libstdc++ に対して
_GLIBCXX_HAS_GTHREADS
を有効にするようにツールチェーンを修正しました(不具合 41770、不具合 41859)。 posix_memalign
の欠落が原因で X86 MXX/SSE コードをリンクできない問題を修正しました(変更点 51872)。i386.c
の関数distance_non_agu_define_in_bb()
の GCC4.7/X86 セグメンテーション違反を修正しました(変更点 50383)。- 以前の
cmov
の動作を復元するように GCC4.7/X86 を修正しました(GCC の不具合)。 - libstdc++/GCC4.7 での
setlocale()
の NULL 戻り値の処理を修正しました(不具合 46718)。 __exidx_start
と__exidx_start_end
に対するld.gold
ランタイム未定義参照を修正しました(変更点 52134)。- Eigen ライブラリの使用時の Clang 3.1 内部コンパイラ エラーを修正しました(不具合 41246)。
- C++11 モードでの
<chrono>
を含む Clang 3.1 内部コンパイラ エラーを修正しました(不具合 39600)。 - 均一に初期化された
rvalue
に対するメソッド呼び出し用のオブジェクト コードを生成する際の Clang 3.1 内部コンパイラ エラーを修正しました(不具合 41387)。 - Clang 3.1/X86 スタック再アライメントを修正しました (変更点 52154)。
- Android 4.1.2 でのデバッグ時の GNU Debugger(GDB)SIGILL に伴う問題を修正しました(不具合 40941)。
- シンボルに長い間接ファイルパスが含まれている場合に GDB が
source:line
ブレークポイントを設定できない問題を修正しました(不具合 42448)。 - MIPS PIE 実行可能ファイルの GDB
read_program_header
を修正しました(変更点 49592)。 uncaught_exception()
のSTLport
セグメンテーション違反を修正しました(変更点 50236)。DW_EH_PE_udata2
、DW_EH_PE_udata4
、DW_EH_PE_udata8
のアラインされていないアクセスが原因の例外処理でのSTLport
バスエラーを修正しました。nothrow new[]
演算子に伴う Gabi++ 無限反復問題を修正しました(不具合 52833)。- 例外ハンドラ ポインタへの誤った Gabi++ オフセットを修正しました (変更点 53446)。
- 例外オブジェクト上の不要なフリーの Gabi++ を削除しました(変更点 53447)。
- その他のバグの修正:
-
- 以下の NDK ヘッダーを修正しました。
- メモリ不足エラーの後に、警告なしに終了するのではなく、中断するように
STLport
を修正しました。 - API レベル 8 以前でコンパイルできるようにシステム ヘッダーと Gabi++ ヘッダーを修正しました。
/proc/self/auxv
を解析しないようcpufeatures
を修正しました(不具合 43055)。- ホスト libstdc++ に依存しないように、また、Windows プラットフォームでは
libgcc_sjlj_1.dll
ライブラリに依存しないようにld.gold
を修正しました。 .vsave
に一貫性のないレジスタリストを発行し、アセンブラを中断させる Clang 3.1 を修正しました(変更点 49930)。- libgabi++ をコンパイルして、MIPS ビルド ターゲット用の
test-stlport
テストに合格するように Clang 3.1 を修正しました(変更点 51961)。 - C ではなく、C++ の場合にデフォルトで例外のみを有効にするように Clang 3.1 を修正しました。
- ほとんどの GNU 例外テストに合格するように Clang 3.1 のいくつかの不具合を修正しました。
-cc1
を検出して、発見時に-target
を指定しないように、スタンドアロン NDK コンパイラのclang
スクリプトとclang++
スクリプトを修正しました。Application.mk
でNDK_APP_OUT
セットを監視するようndk-build
を修正しました。setjmp.h
で宣言されたsigsetjmp
関数とsiglongjmp
関数が欠落している X86libc.so
とlib.a
を修正しました(不具合 19851)。- C++ 11 の Clang で動作するように GCC 4.4.3/4.6/4.7 libstdc++ にパッチを適用しました (Clang の不具合)。
HOST_AWK
に渡される引数内の cygwin パスを修正しました。- Windows でプロジェクトの JNI ディレクトリから実行したときの
ndk-build
スクリプト警告を修正しました(不具合 40192)。 LOCAL_PATH
定義内の makefile の末尾が空白の場合にndk-build
スクリプトがビルドしない問題を修正しました(不具合 42841)。
- その他の変更点:
-
- GCC/MIPS ツールチェーンでのスレッド化のサポートを有効にしました。
- GNU libstdc++ で以前の非表示の表示設定をデフォルトの表示設定にするように、GCC 例外処理ヘルパーの
__cxa_begin_cleanup
と__cxa_type_match
を更新しました。詳しくは、CHANGES.HTML
をご覧ください。 - Gabi++ と STLport の静的ライブラリが例外処理ヘルパーを除いて非表示の表示設定でビルドされるようにビルド スクリプトを更新しました。
STLport
が Thumb モードの ARM に対してビルドされるようにビルドを更新しました。- Gabi++ に
std::set_new_handler
のサポートを追加しました(不具合 52805)。 - GNU libstdc++ の
FUTEX
システム呼び出しを有効にしました。 - ビルド済みの静的ライブラリをプロジェクトの
obj/local/<abi>/
ディレクトリにコピーしないようにndk-build
を更新しました(不具合 40302)。 __ARM_ARCH_5*__
を ARMtoolchains/*/setup.mk
スクリプトから削除しました(不具合 21132)。- ARM の thumb で追加の GNU libstdc++ ライブラリをビルドしました。
- 32 ビット FPU を使用した MIPS 浮動小数点
madd/msub/nmadd/nmsub/recip/rsqrt
命令を有効にしました。 - GCC 4.6 および 4.7 のグラファイト ループ オプティマイザを有効にして、より多くの最適化(
-fgraphite
、-fgraphite-identity
、-floop-block
、-floop-flatten
、-floop-interchange
、-floop-strip-mine
、-floop-parallelize-all
、-ftree-loop-linear
)を行えるようにしました(情報)。 - メモリアクセスを分析して最適化する Linux と Mac OS X の 32 ビットホスト上の Clang 3.1 に対して
polly
を有効にしました(情報)。 - Linux 上の GCC 4.7、GCC 4.6、Clang 3.2、Clang 3.1 で
-flto
を有効にしました(LLVMgold.so 経由の Clang LTO)。ld.gold
が使用できないため、MIPS コンパイラ ターゲットはサポートされません。 - GCC 4.6/4.7 の
ld.gold
に対して--plugin
と--plugin-opt
を有効にしました。 - GCC 4.7 の
ld.gold
に対して--text-reorder
を有効にしました。 - bionic ヘッダー内の
isinf
スクリプトを定義解除する_GLIBCXX_USE_C99_MATH
を使用して GNU libstdc++ を設定しました。詳しくは、CHANGES.html
をご覧ください。 - ビルド スクリプトに
APP_LDFLAGS
を追加しました。詳しくは、ANDROID-MK.html
をご覧ください。 NDK_LOG=0
でNDK_LOG
を無効にできるようにビルド スクリプトを更新しました。NDK_HOST_32BIT=0
でホスト デベロッパー環境 32 ビット ツールチェーンを無効にできるようにビルド スクリプトを更新しました。- デフォルトの GCC/X86 フラグである
-march=
と-mtune=
を、pentiumpro
とgeneric
からi686
とatom
に変更しました。 - ツールチェーン ビルド スクリプトを次のように拡張しました。
- 大量の並列ビルド処理を回避する
mingw
ビルドタイプのbuild-gcc.sh
内の競合状態を修正しました。 build-gabi++.sh
とbuild-stlport.sh
を NDK パッケージから実行できるように更新しました(不具合 52835)。MSys
ユーティリティ コレクション内のrun-tests.sh
を修正しました。- 64 ビットホスト ツールチェーンと Canadian Cross ビルドのサポートを充実させました。
build-mingw64-toolchain.sh
スクリプトを最新バージョンにアップデートしました。- 非表示の表示設定を使用せずに
libgnustl_static.a
とstlport_static.a
をビルドするためのオプションを追加しました。
- 大量の並列ビルド処理を回避する
Android NDK r8d(2012 年 12 月)
- 重要な変更点:
-
- GNU Compiler Collection(GCC)4.7 コンパイラを NDK に追加しました。デフォルトはまだ GCC 4.6 コンパイラであるため、次のように新しいバージョンを明示的に有効にする必要があります。
ndk-build
では、NDK_TOOLCHAIN_VERSION=4.7
変数をエクスポートするか、Application.mk
に追加します。- スタンドアロン ビルドの場合は、
--toolchain=
オプションを以下に追加します。make-standalone-toolchain.sh
。例:--toolchain=arm-linux-androideabi-4.7
注: この機能は試験運用版です。お試しいただいて問題があればご報告ください。
- gabi++ による
stlport
例外のサポートを追加しました。新しい gabi++ はdlopen
と関連コードに依存することに注意してください。これには次のような意味があります。-static
オプションを使用した静的実行可能ファイルのビルドや、APP_STL := stlport_static
を使用したlibstlport_static.a
のインクルードができなくなりました(スタンドアロン ツールチェーンではまだ-static
オプションを使用できます)。include $(BUILD_EXECUTABLE)
を使用した動的実行可能ファイルのコンパイルは引き続き動作します。これは、コンパイラが自動的に-ldl
オプションを追加するためです。- プロジェクトが
-nostdlib
と {-Wl,--no-undefined} を使用してリンクしている場合は、手動で-ldl
オプションを含める必要があります。
CPLUSPLUS-SUPPORT.html
をご覧ください。注: この機能は試験運用中であり、GCC 4.4.3 や Clang 3.1 よりも GCC 4.6/4.7 コンパイラで効率的に動作します。お試しいただいて問題があればご報告ください。
- 古い Android C ライブラリ(bionic)と互換性があるグローバル デフォルト パスと、GCC 4.6 以降のコンパイラを使用した
-fstack-protector
、-fstack-protector-all
、-fstack-protector-strong
用の新しい tls パス(%gs:20)のどちらかを選択するために使用する、x86 用の-mstack-protector-guard=
オプションを追加しました。注:
-mstack-protector-guard
設定だけでは-fstack-protector*
オプションは有効になりません。 - Android 4.1 以降で
/proc
による自動検出が使用できない場合に使用するandroid_setCpu()
関数をsources/android/cpufeatures/cpu-features.c
に追加しました(Chromium の不具合 164154)。
- GNU Compiler Collection(GCC)4.7 コンパイラを NDK に追加しました。デフォルトはまだ GCC 4.6 コンパイラであるため、次のように新しいバージョンを明示的に有効にする必要があります。
- 重要なバグの修正:
-
ndk-build
スクリプトの使用時の不要なオブジェクト ファイルの再ビルドを修正しました(不具合 39810)。-
次のエラーが発生します。
dyld: lazy symbol binding failed: Symbol not found: _memmem Referenced from: ...../arm-linux-androideabi/bin/ld Expected in: /usr/lib/libSystem.B.dylib
この問題は、Mac OS X 10.7 上でのビルドが原因で発生しました。 Mac OS 10.6.x および NDK とは互換性がありません。 - Clang++ スタンドアロン ビルド スクリプトから
-x c++
オプションを削除しました(不具合 39089)。 - Cygwin で
NDK_TOOLCHAIN_VERSION=clang3.1
オプションを使用した場合の不具合を修正しました(不具合 39585)。 - Cygwin または MinGW 環境を使用したスタンドアロン ツールチェーンの生成を許可するように
make-standalone-toolchain.sh
スクリプトを修正しました。生成されたツールチェーンは Cygwin、MingGW、または CMD.exe 環境で使用できます(不具合 39915、不具合 39585)。 - ARM と X86 用の android-14 ビルドに欠落していた
SL_IID_ANDROIDBUFFERQUEUESOURCE
オプションを追加しました(不具合 40625)。 ANDROID_CPU_X86_FEATURE_MOVBE
機能の x86 CPU 検出を修正しました(不具合 39317)。- 標準テンプレート ライブラリ(STL)で
.cpp
ファイル拡張子が付いていない C++ ソースを使用できない不具合を修正しました。 - reload1.c:1061 での GCC 4.6 ARM 内部コンパイラ エラーを修正しました (不具合 20862)。
- emit-rtl.c:1954 での GCC 4.4.3 ARM 内部コンパイラ エラーを修正しました (不具合 22336)。
- postreload.c:396 での GCC 4.4.3 ARM 内部コンパイラ エラーを修正しました(不具合 22345)。
- GCC 4.6/4.7 でラムダ関数がスキップされる問題を修正しました (不具合 35933)。
- その他のバグの修正:
-
- NDK ヘッダー ファイルの修正は次のとおりです。
__WINT_TYPE__
とwint_t
が同じ型になるよう修正しました。android/bitmap.h
のスペルミスを修正しました。 (不具合 15134)。errno.h
のスペルミスを修正しました。sys/cdefs.h
内の__STDC_VERSION__
の有無のチェックを追加しました(不具合 14627)。byteswap.h
とdirent.h
内のヘッダーを再編成しました。PAGE_SIZE
設定を提供するpage.h
をインクルードするようlimits.h
を修正しました(不具合 39983)。glGetAttribLocation()
とglGetUniformLocation()
の戻り値の型をint
からGLint
に修正しました。- x86 ビルド用の
__BYTE_ORDER
定数を修正しました(不具合 39824)。
- ARM ビルドで
-Os
を-O2
で上書きしないようにndk-build
スクリプトを修正しました。 HOST_AWK
、HOST_SED
、HOST_MAKE
の各設定の上書きを許可するようにビルド スクリプトを修正しました。- Intel C/C++ コンパイラ(ICC)によってビルドされたオブジェクトをリンクする
fsck_msdos
ビルドでのld.gold
に関する不具合を修正しました。 - 仕様を遵守するように Clang の ARM EHABI のサポートを修正しました。
solib
イベントでターゲットのリンクマップをたどるのに要する時間を短縮するよう GNU Debugger(GDB)を修正しました(不具合 38402)。- 共有ライブラリのリンク時に欠落していた
libgcc.a
ファイルを修正しました。
- NDK ヘッダー ファイルの修正は次のとおりです。
- その他の変更点:
-
- ARM 用の 64 ビット組み込みアトミック関数を GCC 4.6 に移植しました。
- オーディオ出力遅延に関するドキュメントのほかに、関連するドキュメントと修正を追加しました。
- 非 void 関数が return 文のないパスに対して
SIGILL
信号を発するように Clang を使用したデバッグビルドを修正しました。 - GCC 4.6 ツールチェーンに
--llvm-version=3.1
を追加するのと等価のサフィックス-clang3.1
を受け入れるようmake-standalone-toolchain.sh
を更新しました。 - GCC と Clang のバグレポート URL を https://source.android.com/source/report-bugs.html に更新しました。
llvm-objdump
に ARM ELF のサポートを追加しました。- Clang ビルドの警告「treating c input as c++」を抑制しました。
libiberty.a
の 32 ビット版だけがビルドされ、lib32/
に配置されるようにビルドを更新しました。
Android NDK r8c(2012 年 11 月)
- 重要な変更点:
-
- NDK に Clang 3.1 コンパイラを追加しました。デフォルトはまだ GNU Compiler Collection(GCC)4.6 であるため、次のように Clang コンパイラ オプションを明示的に有効にする必要があります。
ndk-build
では、NDK_TOOLCHAIN_VERSION=clang3.1
をエクスポートするか、この環境変数設定をApplication.mk
に追加します。- スタンドアロン ビルドでは、
--llvm-version=3.1
をmake-standalone-toolchain.sh
に追加して、makefile のCC
とCXX
を<tool-path>/bin/clang
と<tool-path>/bin/clang++
で置き換えます。詳しくは、STANDALONE-TOOLCHAIN.html
をご覧ください。
注: この機能は試験運用版です。お試しいただいて問題があればご報告ください。
- Windows ツールチェーン用の Gold リンカー
ld.gold
を追加しました。Gold リンカーは、すべてのホスト上の ARM と X86 用のデフォルトでもあります。これをオーバーライドしてld.bfd
リンカーを使用するには、LOCAL_LDFLAGS += -fuse-ld=bfd
をAndroid.mk
に追加するか、リンクを実行する g++/clang++ コマンドラインに-fuse-ld=bfd
を渡します。 - 診断が困難なビルドエラーを回避するために、
ndk-build[.cmd]
スクリプトとndk-gdb
スクリプトへの NDK パスに含まれるスペースのチェックを追加しました。 - API レベル処理に以下の変更を加えました。
APP_PLATFORM
、project.properties
、default.properties
でandroid-13
を介してandroid-10
を指定するプロジェクトがandroid-14
ではなくandroid-9
に対してリンクするようにビルドロジックを変更しました。- android-16(Jelly Bean)以降を使用した実行可能ファイルが位置独立実行形式(PIE)用の
-fPIE
オプションを使用してコンパイルされるようにビルドを更新しました。新しいAPP_PIE
オプションを使用すれば、この動作を制御することができます。詳しくは、APPLICATION-MK.html
をご覧ください。注: 14 を超えるすべての API レベルは引き続き
platforms/android-14
に対してリンクします。新しいplatforms/android-N
は追加されていません。 - 調整済みの API レベルがプロジェクトの
AndroidManifest.xml
内のandroid:minSdkVersion
を上回っている場合に警告を出力するようにndk-build
を変更しました。
- 新しい ARM 固有の機能を含めるように
cpu-features
ヘルパー ライブラリを更新しました。詳しくは、sources/android/cpufeatures/cpu-features.h
をご覧ください。 - X86 プラットフォーム上の長倍精度を 8 バイトに変更しました。このデータ型は倍精度と同じサイズになりましたが、まだ別の型として扱われます。
APP_ABI=armeabi-v7a
のビルドを次のように更新しました。- リンカーに
-march=armv7-a
パラメータを渡すようにこのビルドタイプを変更しました。この変更によって、v7 固有のライブラリとcrt*.o
が正しくリンクされることが保証されます。 - 以前のリリースで使用されていた
-mfpu=vfp
オプションの代わりに、-mfpu=vfpv3-d16
をndk-build
に追加しました。
- リンカーに
- NDK に Clang 3.1 コンパイラを追加しました。デフォルトはまだ GNU Compiler Collection(GCC)4.6 であるため、次のように Clang コンパイラ オプションを明示的に有効にする必要があります。
- 重要なバグの修正:
-
- ルート権限を使用して
make-standalone-toolchain.sh
を実行すると、一部のユーザーがスタンドアロン ツールチェーンにアクセスできなくなる不具合を修正しました(不具合 35279)。- NDK リリース パッケージ内のすべてのファイルと実行可能ファイルに、読み取りパーミッションと実行パーミッションが割り当てられます。
libstdc++.a
の所有権 / グループがコピー時に保持されるようになりました。
- Windows のビルド済み
echo.exe
から不要な\r
を削除しました。不要な\r
が誤ってパスに含まれていたために、GNU Debugger(GDB)でgdb.setup
が中断していました(不具合 36054)。 host-mkdir
の実装でのタイミングの不具合が原因で中断することがあった Windows の並列ビルドを修正しました(不具合 25875)。- デフォルトで
typeinfo
名をマージしないよう、GCC 4.4.3 GNUlibstdc++
を修正しました。詳しくは、toolchain repo gcc/gcc-4.4.3/libstdc++-v3/libsupc++/typeinfo
をご覧ください(不具合 22165)。 - コンテキストが
null
であり、TREE_CODE
で参照解除されている場合に GCC がクラッシュする、GCC 4.6cp/mangle.c::write_unscoped_name
内のnull
コンテキストに関する不具合を修正しました。 - 浮動小数の ARM NEON 固有の型定義に関する GCC 4.4.3 クラッシュを修正しました(不具合 34613)。
- 参照解除された値を保持する古いスタック位置が返され、ランタイム クラッシュが発生する
STLport
内部の_IteWrapper::operator*()
実装を修正しました(不具合 38630)。 - ARM 固有の修正は次のとおりです。
- 「mangling of <va_list> was changed in GCC 4.4」という警告を発しないよう、ARM GCC 4.4.3/4.6
g++
を修正しました。-Wno-psabi
スイッチを使用してこの警告を回避する必要がなくなりました。 LOCAL_SRC_FILES
で.arm
サフィックスまたは.neon
サフィックスを使用したプロジェクトでAPP_STL
も使用した場合の問題を修正しました。ndk-build
スクリプトはAPP_STL
を使用してコンパイルに STLheader/lib
パスを追加する前に、LOCAL_SRC_FILES
で C++ ファイルを検索します。ndk-build
を変更して、検索の前に.arm
サフィックスと.neon
サフィックスを除外するようにしました。これを行わないと、myfile.cpp.arm.neon
などのLOCAL_SRC_FILES
内のアイテムが C++ コードとしてコンパイルされません。- GNU Binutils でエラー メッセージ「assertion fail」を発生させていた
tag_FP_arch
を使用せずに、古い binutils からオブジェクトをリンクできるようにbinutils-2.21/ld.bfd
を修正しました(不具合 35209)。 binutils-2.19/ld
が新しいbinutils-2.21
によってビルド済みのオブジェクトをリンクしたときに発生する警告「Unknown EABI object attribute 44」を削除しました。headers/libs
をサブディレクトリarmv7-a/thumb
に生成するようmake-standalone-toolchain.sh
を変更することで、-mthumb
と-march=armv7-a
の両方を使用した GNUstdc++
コンパイルにおける不具合を修正しました(不具合 35616)。- 「unresolvable R_ARM_THM_CALL relocation」エラーを修正しました(不具合 35342)。
char
からの符号拡張時に間違ったオペランド型を期待している ARM バックエンドによって引き起こされる、reload1.c:3633
の内部コンパイラ エラーを修正しました(GCC の不具合 50099)。- 負のシフト量に伴う内部コンパイラ エラーを修正しました (GCC の不具合)。
- 「mangling of <va_list> was changed in GCC 4.4」という警告を発しないよう、ARM GCC 4.4.3/4.6
ndk-build
x86 ABI ターゲットのデフォルトでもある X86 用の-fstack-protector
を修正しました。- MIPS 固有の修正は次のとおりです。
- MIPS
libstlport_*
のコンパイル時に_STLP_LITTLE_ENDIAN
を 1 に設定することにより、STLport
エンディアンを修正しました。 - LLVM のコンパイル時の GCC
__builtin_unreachable
の不具合を修正しました(GCC の不具合 54369)。 - CPU を 100% 消費する
cc1
コンパイル プロセスに対する修正を移植しました(GCC の不具合 50380)。
- MIPS
- GNU Debugger 固有の修正は次のとおりです。
- ビルドにおける gdb-7.x の Python サポートを無効にしました。これを行わないと、gdb-7.x 設定関数がホスト上で使用可能な Python のどんなバージョンでも選択してしまい、Python の特定のバージョンに組み込まれた依存関係を使用して
gdb
をビルドします(不具合 36120)。 APP_ABI
にall
が含まれる場合に、既知のどのアーキテクチャとも一致しないndk-gdb
の不具合を修正しました(不具合 35392)。- ドライブ文字で始まる Windows パスの一部とみなされる場合は
:
記号を維持するように Windows パス名のサポートを修正しました(GDB の不具合 12843)。 gdbserver
での ARM 用のハードウェア ブレークポイント サポートの追加を修正しました(GDB の不具合)。- リンカーが一貫している場合に現在の
solibs
のみを読み取るための修正を追加しましたこの変更により、solib
のイベント処理が高速化されます(不具合 37677)。 solib
ブレークポイントの検索を繰り返し試すための修正を追加しました。GDB は、svr4_current_sos()
を呼び出すたびに、成功するまでenable_break()
を試みます(変更点 43563)。gdb
がdlopen-ed
ライブラリに配置されたブレークポイントで停止しない不具合を修正しました(不具合 34856)。sym_addr
のLSB
が保持されないことが原因で/system/bin/linker
がシンボルを削除され、rtld_db_dlactivity()
がThumb
として実装されるシステムで、dlopen()
を呼び出したときの動的リンカー内のSIGILL
を修正しました(不具合 37147)。
- ビルドにおける gdb-7.x の Python サポートを無効にしました。これを行わないと、gdb-7.x 設定関数がホスト上で使用可能な Python のどんなバージョンでも選択してしまい、Python の特定のバージョンに組み込まれた依存関係を使用して
- ルート権限を使用して
- その他のバグの修正:
-
- 以下の NDK ヘッダーを修正しました。
- 元のカーネルから誤って削除された
arch-mips/include/asm/*
コードを修正しました(変更点 43335)。 sys/cdefs.h
内の#define __unused
との競合を避けるために、linux/sysctl.h
とlinux/icmp.h
内の構造体メンバーデータ__unused
を__linux_unused
で置き換えました。__BEGIN_DECLS
と__END_DECLS
で C 関数を囲むようにfenv.h
を修正しました。- 実装されていない
malloc.h
の関数を削除しました。 - ANSI コンパイラの
uint64_t
のstdint.h
定義を修正しました(不具合 1952)。 <arch>/include/machine/*
内のプリプロセッサ マクロを修正しました。- すべてのプラットフォームをサポートする新しいバージョンで MIPS 用の
link.h
を置き換えました。 linux-unistd.h
を削除しました。- GLibc 固有のマクロ
LONG_LONG_MIN
、LONG_LONG_MAX
、ULONG_LONG_MAX
を<pthread.h>
から<limits.h>
に移動しました。
- 元のカーネルから誤って削除された
ndk-stack-parser
のバッファ オーバーフローを修正しました。- 定義されていない場合に、
__Named_exception
のすべての宣言と使用を省略するように_STLP_USE_EXCEPTIONS
を修正しました。__Named_exception
設定のコンパイルと使用は、STLport
に例外の使用が許可されている場合のみ可能です。 - Windows コードをビルドしないように、Linux 専用 NDK パッケージのビルドを修正しました。こちらの
次の設定を使用して、このタイプのビルドを実行します。
./build/tools/make-release.sh --force --systems=linux-x86
atexit()
と__do_handler
をエクスポートしないようにlibc.so
を修正しました。これらのシンボルは、従来のネイティブ ライブラリをサポートするために C ライブラリのシステム バージョンによる ARM ビルド用にエクスポートされます。NDK で生成されるライブラリでは、これらのシンボルを直接参照しないようにしてください。 代わりに、各共有ライブラリまたは実行可能ファイルは、crtbegin_*.o
から提供されるこれらのシンボルの独自バージョンを組み込む必要があります。プロジェクトを
-nostdlib -Wl,--no-undefined
オプションを使用してリンクする場合は、crtbegin_so.o
がリンクされないため、独自の__dso_handle
を指定する必要があります。以下のサンプルコードに示すように、__dso_handle
の内容は問題ではありません。extern "C" { extern void *__dso_handle __attribute__((__visibility__ ("hidden"))); void *__dso_handle; }
- 読みやすい形式の
function@plt
を生成するように、plt
エントリのobjdump
で使用される ARM 用のシンボル デコーダを修正しました。 - X86 プラットフォームの
libc.so
ライブラリから、GCC 4.6libgcc.a
で導入されたシンボル__aeabi_idiv0
、__aeabi_ldiv0
、__aeabi_unwind_cpp_pr1
、__aeabi_unwind_cpp_pr2
を削除しました。 - MIPS の
crt*_so.S
内にある使用されていない.ctors
、.dtors
、.eh_frame
を削除しました。 ndk-build
DUMP_XXXX
の最後の出力行だけを取得するようにndk-gdb
を更新しました。この変更により、Application.mk
またはAndroid.mk
が$(info ...)
構文を使用して出力を行った場合に、DUMP_XXXX
の結果に挿入されなくなります(詳細)。
- 以下の NDK ヘッダーを修正しました。
- その他の変更点:
-
platforms/android-[3,4,5,8]
からarch-x86
ヘッダーとarch-mips
ヘッダーを削除しました。X86 ABI と MIPS ABI の両方が API 9 以降でしかサポートされないため、これらのヘッダーは不完全なものになっていました。- 以下に示すように、簡略化された c++ にスタンドアロン パッケージ内のパスが含まれています(問題 35279)。
<path>/arm-linux-androideabi/include/c++/4.6.x-google to: <path>/include/c++/4.6/
- デフォルトでより多くの C++ ファイル拡張子(
.cc .cp .cxx .cpp .CPP .c++ .C
)を認識するようndk-build
を修正しました。LOCAL_CPP_EXTENSION
を使用すると、これらの拡張子設定を上書きすることができます。 - 再起動時に真っ黒な画面やフリーズ フレームが表示される
samples/san-angeles
の不具合を修正しました。 - NDK サンプル内の非推奨の API が置き換えられました(不具合 20017)。
hello-gl2
を android-5 から android-7 へnative-activity
を android-9 から android-10 へnative-audio
を android-9 から android-10 へnative-plasma
を android-9 から android-10 へ
- デバッグツールが対応できるように、
crtbegin_static/dynamic.o
で定義した.note.android.ident
内の簡略化された枠組みを使用する Android 実行可能ファイル用に、新しいブランディングを追加しました。構造体のメンバーと値は、次のように定義されます。 次のようになります。static const struct { int32_t namesz; /* = 8, sizeof ("Android") */ int32_t descsz; /* = 1 * sizeof(int32_t) */ int32_t type; /* = 1, ABI_NOTETYPE */ char name[sizeof "Android"]; /* = "Android" */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
セクション
.note.ABI-tag
内の以前のブランディング オプションは廃止されました。 - さまざまな条件で
run-tests.sh
とstandalone/run.sh
を呼び出す新しいスクリプトrun-tests-all.sh
を追加しました。スクリプトrun-tests.sh
は--abi
オプションなしで動作し、サポートされているすべての ABI 用のほとんどのテストをコンパイルし、接続されたすべてのデバイスで動作するように拡張されています。
Android NDK r8b(2012 年 7 月)
このリリースの主な特徴は、新しい GNU Compiler Collection(GCC)4.6 ツールチェーンと、Android 4.1(API レベル 16)システム イメージに対するデバッグ サポートを追加する GNU Debugger(GDB)7.3.x です。
- 重要なバグの修正:
-
- Mac OS 環境と Windows Cygwin 環境における静的ライブラリの
LOCAL_SHORT_COMMANDS
の不具合を修正しました。リストファイルの生成が高速化されましたが、プロジェクトの再ビルドが繰り返されることを防ぐため再生成されません。 ndk-gdb
のいくつかの不具合を修正しました。- フラグの
-e
、-d
、-s
を、一貫性を保って adb に渡すようツールを更新しました。 - スペースを含むデバイスのシリアル名を受け入れるようにツールを更新しました。
/system/bin/link
情報を取得するようにツールを更新しました。これにより、ホスト上のgdb
が__dl_rtld_db_dlactivity
でブレークポイントを設定し、リンカーのアクティビティを認識できるようになります(dlopen()
が呼び出されたときにsolib
シンボルを再スキャンするなど)。
- フラグの
./libs/*/lib*.so
の削除に失敗する Windows 上のndk-build clean
を修正しました。make
が失敗したときに 0 以外のERRORLEVEL
を返すようにndk-build.cmd
を修正しました。__exidx_start
シンボルと__exidx_end
シンボルの間違ったエクスポートを停止するようにlibc.so
を修正しました。- ARM と MIPS でスタックのアンワインドが
__libc_init
を超えるSEGV
を修正しました。
- Mac OS 環境と Windows Cygwin 環境における静的ライブラリの
- 重要な変更点:
-
- オリジナルの GCC 4.4.3 ツールチェーン(
binutils
2.19 と GDB 6.6)と共存するよう GCC 4.6 ツールチェーン(gold
を含むbinutils
2.21 と GDB 7.3.x)を追加しました。- GCC 4.6 がデフォルトのツールチェーンになりました。オリジナルのツールチェーンを選択するには、
Application.mk
でNDK_TOOLCHAIN_VERSION=4.4.3
を設定します。 gold
リンカーに対するサポートは、Linux ホストと Mac OS ホスト上の ARM アーキテクチャと x86 アーキテクチャでしか利用できません。このサポートはデフォルトで無効になっています。有効にするには、Android.mk
にLOCAL_LDLIBS += -fuse-ld=gold
を追加します。-fPIE
を使用してコンパイルするプログラムには、Android 4.1(API レベル 16)システム イメージ内のバイナリを含むデバッグ用の新しいGDB
が必要です。binutils
2.21ld
ツールには、バージョン 2.22 から移植された修正が含まれています。- 旧プラットフォームとの互換性を維持するために
sincos()
の最適化を無効にしました。
- GCC 4.6 がデフォルトのツールチェーンになりました。オリジナルのツールチェーンを選択するには、
- デフォルトで Never eXecute(NX)ビットと
relro
/bind_now
の保護を有効にするよう、ビルド オプションを更新しました。- スタックとヒープ上の NX ビットを有効にしてバッファ オーバーフロー攻撃から NX を保護するために、アセンブラに
--noexecstack
を、リンカーに-z noexecstack
を追加しました。 - メモリ破損によるセキュリティ脆弱性から保護するために、リンク後に内部データ セクションを強化する
-z relro
と-z now
をリンカーに追加しました(詳細: 1、2)。 - これらの機能は、以下のオプションを使用して無効にできます。
- アセンブラの
--execstack
オプションとリンカーの-z execstack
を設定して NX 保護を無効にする。 - リンカーの
-z norelro
オプションと-z lazy
オプションを設定して内部データの強化を無効にする。 - NDK
jni/Android.mk
でこれらの保護を無効にするには、 次のオプションがあります。LOCAL_DISABLE_NO_EXECUTE=true # disable "--noexecstack" and "-z noexecstack" DISABLE_RELRO=true # disable "-z relro" and "-z now"
詳しくは、
docs/ANDROID-MK.html
をご覧ください。 - アセンブラの
- スタックとヒープ上の NX ビットを有効にしてバッファ オーバーフロー攻撃から NX を保護するために、アセンブラに
- デバッグツールが対応できるよう、
.note.ABI-tag
セクション(crtbegin_static/dynamic.o
内)を使用した Android 実行可能ファイル用に、ブランディングを追加しました。構造 メンバーと値は次のように定義されます。static const struct { int32_t namesz; /* = 4, sizeof ("GNU") */ int32_t descsz; /* = 6 * sizeof(int32_t) */ int32_t type; /* = 1 */ char name[sizeof "GNU"]; /* = "GNU" */ int32_t os; /* = 0 */ int32_t major; /* = 2 */ int32_t minor; /* = 6 */ int32_t teeny; /* = 15 */ int32_t os_variant; /* = 1 */ int32_t android_api; /* = 3, 4, 5, 8, 9, 14 */ }
- オリジナルの GCC 4.4.3 ツールチェーン(
- その他のバグの修正:
-
R_MIPS_TLS_LDM
の不具合に適合するために切り捨てられたmips-linux-gnu
リロケーションを修正しました(詳細)。--gc-sections
の使用時のld
ツール セグメンテーション違反を修正しました(詳細)。- MIPS の
GOT_PAGE
カウントの不具合を修正しました(詳細)。 mips_elf_count_got_symbols
のフォロー警告シンボルリンクを修正しました。mips_elf_allocate_lazy_stub
のフォロー警告シンボルリンクを修正しました。- MIPS
.dynamic
をデータ セグメントに移動し、書き込み可能にしました。 - シンボルのハードコードされた値を MIPS の正しいセグメント サイズで置き換えました。
- MIPS ツールチェーンのデフォルトから
-mno-shared
オプションを削除しました。Android ツールチェーンのデフォルトは-fPIC
(サポートされている場合は-fpic
)です。-mshared
、-fpic
、-fPIC
、-fpie
、-fPIE
を明示的に指定しない場合は、MIPS コンパイラが PIC をオフにする-mno-shared
を追加します。この場合にコンパイラが-mno-shared
を追加しないよう修正しました。 - サンプル
hello-jni
とtwo-libs
のパッケージ名を修正して、その下のtests
プロジェクトがコンパイルできるようにしました。
- その他の変更点:
-
- 次のようにバイナリの場所を変更しました。
gdbserver
をtoolchain/<arch-os-ver>/prebuilt/gdbserver
からprebuilt/android-<arch>/gdbserver/gdbserver
に移動しました。- x86 ツールチェーン接頭辞の名前を
i686-android-linux-
からi686-linux-android-
に変更しました。 sources/cxx-stl/gnu-libstdc++/include
とlib
を、GCC 4.6 でコンパイルする場合はsources/cxx-stl/gnu-libstdc++/4.6
に、GCC 4.4.3 でコンパイルする場合はsources/cxx-stl/gnu-libstdc++/4.4.3
に移動しました。libbfd.a
とlibintl.a
をlib/
からlib32/
に移動しました。
- リビルドとテストの NDK ツールチェーンにさまざまなスクリプトを追加し、強化しました。
- Win32 実行可能ファイルと Win64 実行可能ファイルを生成する新しい Linux ホスト型ツールチェーンを生成するために
build-mingw64-toolchain.sh
を追加しました。 - NDK ツールチェーン バイナリをビルドするために必要なディレクトリに対して
clone
コマンドとcheckout
のみを使用することにより、download-toolchain-sources.sh
の速度を向上させました。 build-host-gcc.sh
スクリプトとbuild-host-gdb.sh
スクリプトを追加しました。- 特定の NDK インストール ディレクトリまたは既存の NDK パッケージの内容をチェックするための
tests/check-release.sh
を追加しました。 - スタンドアロン テスト
tests/standalone/run.sh
を書き直しました。
- Win32 実行可能ファイルと Win64 実行可能ファイルを生成する新しい Linux ホスト型ツールチェーンを生成するために
- すべてのプラットフォームとアーキテクチャから
if_dl.h
ヘッダーを削除しました。記述されるAF_LINK
要素とsockaddr_dl
要素は BSD 固有のものです(つまり Linux には存在しません)。
- 次のようにバイナリの場所を変更しました。
Android NDK r8(2012 年 5 月)
この NDK のリリースでは、MIPS ABI に対するサポートが追加され、いくつかの修正が行われています。
- 新しい機能:
-
- MIPS ABI に対するサポートを追加しました。これにより、互換性のある MIPS ベースの Android デバイスで動作するマシンコードを生成することができます。MIPS の主な機能には、MIPS 固有のツールチェーン、システム ヘッダー、ライブラリ、デバッグ サポートがあります。MIPS サポートについて詳しくは、NDK パッケージの
docs/CPU-MIPS.html
をご覧ください。デフォルトで、ARM ベースのデバイス用のコードが生成されます。MIPS プラットフォーム用にビルドするには、
Application.mk
ファイル内のAPP_ABI
の定義にmips
を追加します。たとえば以下では、ndk-build
に対して 3 つの異なる ABI 用のコードをビルドするよう指示しています。APP_ABI := armeabi armeabi-v7a mips
ARM アセンブリ コードなどのアーキテクチャ固有のアセンブリ ソースに依存していなければ、MIPS マシンコードをビルドするために
Android.mk
ファイルを編集する必要はありません。 make-standalone-toolchain.sh
の呼び出し時に--arch=mips
オプションを使用してスタンドアロン MIPS ツールチェーンをビルドできます。詳しくは、docs/STANDALONE-TOOLCHAIN.html
をご覧ください。
注: ユーザーが自分のデバイスで動作するアプリしか利用できないようにするために、Google Play はアプリに含まれている命令セット情報に基づいてアプリを絞り込みます。デベロッパーがなんらかの措置を講じる必要はありません。また、Android システム自体もインストール時にアプリをチェックして、アプリがデバイスの CPU アーキテクチャ用にコンパイルされたライブラリを提供する場合にのみインストールの続行を許可します。
- MIPS ABI に対するサポートを追加しました。これにより、互換性のある MIPS ベースの Android デバイスで動作するマシンコードを生成することができます。MIPS の主な機能には、MIPS 固有のツールチェーン、システム ヘッダー、ライブラリ、デバッグ サポートがあります。MIPS サポートについて詳しくは、NDK パッケージの
- 重要なバグの修正:
-
- 派生クラス
D
への基本クラス オブジェクトb
のdynamic_cast<D>(b)
の結果が基本クラスからの反対方向で正しく調整されない GAbi++ 実装内のタイプミスを修正しました(不具合 28721)。 make-standalone-toolchain.sh
でlibsupc++.*
をコピーできない不具合を修正しました。
- 派生クラス
- その他のバグの修正:
-
- ユーザーが
SHELL
環境変数を再定義した場合でもndk-build.cmd
が正しく機能するようにndk-build.cmd
を修正しました。この環境変数は、Windows 環境でさまざまな開発ツールをインストールしたときに変更される可能性があります。
- ユーザーが
Android NDK r7c(2012 年 4 月)
この NDK のリリースでは、Tegra2 ベースのデバイスに対する重要な修正に加えて、その他のいくつかの修正と改善が行われています。
- 重要なバグの修正:
-
- 非 NEON デバイスでクラッシュしないように GNU STL armeabi-v7a バイナリを修正しました。NDK r7b に付属のファイルが正しく設定されていなかったために、Tegra2 ベースのデバイスなどで特定の浮動小数点関数(
cosf
、sinf
、expf
など)を使用しようとしたときにクラッシュが発生していました。
- 非 NEON デバイスでクラッシュしないように GNU STL armeabi-v7a バイナリを修正しました。NDK r7b に付属のファイルが正しく設定されていなかったために、Tegra2 ベースのデバイスなどで特定の浮動小数点関数(
- 重要な変更点:
-
NDK_OUT
環境変数を介したカスタム出力ディレクトリのサポートを追加しました。この変数を定義すると、$PROJECT_PATH/obj
の代わりに、生成されたすべての中間ファイルを保存するために使用されます。この変数はndk-gdb
によっても認識されます。Android.mk
でLOCAL_SHORT_COMMANDS
をtrue
に設定することにより、何百、何千というソースファイルを持つモジュールのビルドに対するサポートを追加しました。この変更により、NDK ビルドシステムは、コマンドライン長の制限に対する対策として、ほとんどのリンカー オプションまたはアーカイブ ツール オプションをリストファイルに含めるよう強制されます。 詳しくは、
docs/ANDROID-MK.html
をご覧ください。
- その他のバグの修正:
-
cpufeatures
ヘルパー ライブラリ内のandroid_getCpuCount()
の実装を修正しました。以前の実装では、コアがシステムによって動的に有効にされる特定のデバイスでは、初めて関数が呼び出されたときに、物理的に使用可能なコアの総数ではなくアクティブなコアの総数を報告していました。
Android NDK r7b(2012 年 2 月)
この NDK のリリースでは、ネイティブ Windows ビルドと Cygwin のための修正に加えて、その他のさまざまな改善が行われています。
- 重要なバグの修正:
-
- 一部のマルチコア ARM ベースのデバイスでの正確さに関する不具合を回避するように
sys/atomics.h
を更新しました。このバージョンの NDK を使用して未変更のソースを再ビルドしてください。この問題が完全に排除されるはずです。 詳しくは、docs/ANDROID-ATOMICS.html
をご覧ください。 binutils
2.20.1 に更新後の NDK r7 で発生したデバッグ不具合を修正するために、binutils
2.19 に戻しました。- 32 ビット版の Linux の
ndk-build
を修正しました。パッケージング エラーによって、awk
実行可能ファイルの 64 ビット版が NDK r7 のprebuilt/linux-x86/bin
に配置されます。 - ネイティブ Windows ビルド(
ndk-build.cmd
)を修正しました。その他のビルドモードには影響ありません。修正には以下が含まれます。- プロジェクト パスの最上位に位置していないディレクトリ(最上位ディレクトリのサブディレクトリなど)から
ndk-build.cmd
を呼び出そうとすると発生する無限ループやスタック オーバーフローといったバグを削除しました。 - 自動生成された依存関係ファイルが無視される問題を修正しました。修正前は、ヘッダーを更新してもソースの再コンパイルがトリガーされていませんでした。
- ファイルまたはパス内のスペースや引用符以外の特殊文字が正しく処理されない問題を修正しました。
- プロジェクト パスの最上位に位置していないディレクトリ(最上位ディレクトリのサブディレクトリなど)から
-lstdc++
の使用時(GNUlibstdc++
C++ ランタイムに対するリンク時など)に適切なバイナリを生成するようにスタンドアロン ツールチェーンを修正しました。共有ライブラリ バージョンまたは静的バージョン用の-lstdc++
に対してリンクする場合は-lgnustl_shared
を使用する必要があります。この修正について詳しくは、
docs/STANDALONE-TOOLCHAIN.html
をご覧ください。- Cygwin の
gnustl_shared
を修正しました。修正前は、ファイルが正しい場所に存在するのにlibsupc++.a
が見つからないことをリンカーが報告していました。 APP_STL
経由で特定の C++ ランタイムを使用していない場合の Cygwin C++ リンクを修正しました。
- 一部のマルチコア ARM ベースのデバイスでの正確さに関する不具合を回避するように
- その他の変更点:
-
- アプリで GNU
libstdc++
ランタイムを使用すると、コンパイラが例外と RTTI を強制的に有効にすることがなくなります。この変更により、コードをコンパクトにすることができます。これらの機能が必要な場合は、以下のいずれかの操作を行う必要があります。
- モジュールまたは
Application.mk
(推奨)で例外および / または RTTI を明示的に有効にします。 Application.mk
内で'exceptions'
と'rtti'
のいずれかまたは両方にAPP_GNUSTL_FORCE_CPP_FEATURES
を設定します。詳しくは、docs/APPLICATION-MK.html
をご覧ください。
- モジュールまたは
- アプリの独立したプロセスで非公開サービスが動作している場合に、
ndk-gdb
が適切に機能するようになりました。ps
で最初に列挙されるプロセス(通常はサービス プロセス)ではなく、メインのアプリプロセスをデバッグします。 - NDK r7 が
LOCAL_ARM_MODE
値を信用せず、常に特定のソースファイル(すべてのファイルではない)を 32 ビット命令にコンパイルする珍しいバグを修正しました。 STLport
: Android プラットフォーム バージョンと一致するようにソースを更新します。この更新により、いくつかのマイナーなバグが修正されます。- 不完全な型のインスタンス化を修正しました。
- 「==」と「=」のタイプミスを修正しました。
string::assign
でmemcpy
の代わりにmemmove
が使用されました。IsNANorINF
、IsINF
、IsNegNAN
などの処理を改善しました。
詳しくは、コミットログをご覧ください。
STLport
: ライブラリから 5 つの不要な静的イニシャライザを削除しました。- armeabi-v7a 用の GNU libstdc++ ライブラリが誤って armeabi 用にコンパイルされていました。この変更は正確性には影響しませんが、正しい ABI を使用することによりパフォーマンスが若干向上するはずです。
cpu-features
ヘルパー ライブラリが 3 つのオプションの x86 CPU 機能(SSSE3
、MOVBE
、POPCNT
)を報告するように更新されました。詳しくは、docs/CPU-FEATURES.html
をご覧ください。docs/NDK-BUILD.html
は、カスタムApplication.mk
ファイルを選択するためにNDK_APP_APPLICATION_MK
の代わりにNDK_APPLICATION_MK
に言及するよう更新されました。- Cygwin:
ndk-build
が呼び出されたときに現在のディレクトリで空の "NUL" ファイルを作成しなくなります。 - Cygwin: 依存関係の自動検出が改善されました。以前のバージョンでは、以下の場合に正しく機能しませんでした。
- Cygwin ドライブ接頭辞が
/cygdrive
ではない場合。 - ドライブなしのマウントを使用している場合。たとえば、Cygwin が
/home
をC:\Some\Dir
ではなく\\server\subdir
に変換する場合。
- Cygwin ドライブ接頭辞が
- Cygwin:
ndk-build
は、Cygwin および / または GNU Make の特定のバージョンを含む$NDK/prebuilt/windows/bin
の下でネイティブ Windows ツールを使用しなくなりました。
- アプリで GNU
Android NDK r7(2011 年 11 月)
この NDK のリリースでは、Android 4.0 プラットフォームをサポートする新機能が追加され、その他のさまざまな追加と改善が行われています。
- 新機能
-
- Android 4.0(API レベル 14)用の公式 NDK API を追加しました。これにより、以下のネイティブ機能がプラットフォームに追加されます。
- Khronos Group OpenMAX AL 1.0.1 標準に基づくネイティブのマルチメディア API を追加しました。新しい
<OMXAL/OpenMAXAL.h>
ヘッダーと<OMXAL/OpenMAXAL_Android.h>
ヘッダーを使用すれば、API レベル 14 を対象とするアプリは、新しい Android 固有のバッファキュー インターフェースを使用してネイティブ コードから直接マルチメディア出力を実行することができます。詳しくは、docs/openmaxal/index.html
と http://www.khronos.org/openmax/ をご覧ください。 - Khronos Group OpenSL ES 1.0.1 標準に基づくネイティブのオーディオ API を更新しました。API レベル 14 を使用すれば、圧縮されたオーディオ(MP3、AAC、Vorbis など)を PCM にデコードできるようになります。詳しくは、
docs/opensles/index.html
と http://www.khronos.org/opensles/ をご覧ください。
- Khronos Group OpenMAX AL 1.0.1 標準に基づくネイティブのマルチメディア API を追加しました。新しい
- CCache のサポートを追加しました。大規模な再ビルドの速度を上げるには、
NDK_CCACHE
環境変数をccache
(またはccache
バイナリへのパス)に設定します。CCache が宣言された場合、NDK ビルドシステムは、ソースファイルのコンパイル時に自動的に CCache を使用します。次に例を示します。export NDK_CCACHE=ccache
注: CCache は NDK リリースに含まれていないため、使用する前にインストールする必要があります。CCache について詳しくは、http://ccache.samba.org をご覧ください。
- 特定の NDK リリースでサポートされているすべての ABI 用に NDK モジュールの構築が必要であることを示すために、
APP_ABI
をall
に設定するためのサポートが追加されました。つまり、Application.mk
はこのリリースと同等です。APP_ABI := all APP_ABI := armeabi armeabi-v7a x86
これは、
ndk-build
をコマンドラインから呼び出すときにAPP_ABI
を定義した場合も機能します。この方法では、プロジェクトのApplication.mk file
を変更することなく、サポートされているすべての ABI のプロジェクト ビルドを簡単にチェックできます。次に例を示します。ndk-build APP_ABI=all
- モジュールで使用する C++ 機能(RTTI または例外)を宣言できるように
Android.mk
にLOCAL_CPP_FEATURES
変数を追加しました。これにより、これらの機能に依存しているモジュールを事前にビルドした場合に、最終リンクが正しく機能することが保証されます。詳しくは、docs/ANDROID-MK.html
とdocs/CPLUSPLUS-SUPPORT.html
をご覧ください。 - ビルドコマンドで使用されるソースファイルとオブジェクト ファイルへのパスを短くしました。プロジェクト パスから
$NDK/ndk-build
を呼び出すときに、ビルドコマンドに渡されるソースファイル、オブジェクト ファイル、バイナリ ファイルへのパスが大幅に短縮されます。これは、現在のディレクトリに相対して渡されるためです。これは、大量のソース ファイルを含むプロジェクトをビルドする場合に、ホストのオペレーティング システムでサポートされる最大コマンドライン長の制限を回避できるので便利です。プロジェクト ツリーのサブディレクトリからndk-build
を呼び出す場合や、特定のディレクトリを指すようにNDK_PROJECT_PATH
を定義した場合は、この動作は変更されません。
- Android 4.0(API レベル 14)用の公式 NDK API を追加しました。これにより、以下のネイティブ機能がプラットフォームに追加されます。
- 試験運用版の機能
- コマンドラインからプロジェクト パス内の
ndk-build.cmd
スクリプトを呼び出すことにより、Cygwin を使用せずに Windows 上の NDK ソースファイルをビルドできるようになりました。このスクリプトは、オリジナルのndk-build
スクリプトとまったく同じ引数を取得します。Windows NDK パッケージには、ビルドに必要な GNU Make、Awk、その他のツール用の独自のビルド済みのバイナリが付属しています。機能するビルドシステムを使用するために、他に何かをインストールする必要はありません。重要:
ndk-gdb
は Windows 上では機能しないため、デバッグには引き続き Cygwin が必要です。この機能はまだ試験運用版のため、自由にお試しいただき、公開バグ データベースや公開フォーラムで不具合をご報告ください。NDK に付属のすべてのサンプルと単体テストは、この機能を使用して正常にコンパイルされます。
- 重要なバグの修正
-
Application.mk
でAPP_MODULES
が定義されていない場合は、インポートされた共有ライブラリがデフォルトでターゲットのインストール場所(libs/<abi>
)にインストールされるようになりました。たとえば、最上位モジュールfoo
がモジュールbar
をインポートすると、libfoo.so
とlibbar.so
の両方がインストール場所にコピーされます。以前は、APP_MODULES
にbar
を含めない限り、libfoo.so
のみがコピーされていました。APP_MODULES
を明示的に定義した場合は、この動作は変更されません。ndk-gdb
が MAIN インテント フィルタ内に複数のカテゴリがあるアクティビティに対して正しく機能するようになりました。- 静的ライブラリのインポートが正しく行われるようになりました。たとえば、最上位モジュール
foo
が静的ライブラリzoo
をインポートする静的ライブラリbar
をインポートすると、libfoo.so
がlibbar.a
とlibzoo.a
の両方に対してリンクされるようになりました。
- その他の変更点
-
docs/NATIVE-ACTIVITY.HTML
: タイプミスを修正しました。ネイティブ アクティビティの場合は、最小 API レベルを 8 ではなく 9 にする必要があります。docs/STABLE-APIS.html
: 欠落していたドキュメント リスト EGL を、API レベル 9 以降でサポートされる安定版 API として追加しました。download-toolchain-sources.sh
: ツールチェーン ソースを、AOSP サーバーの新しい場所である android.googlesource.com からダウンロードするように更新しました。- 新しい C ++サポート ランタイム
gabi++
を追加しました。詳しくは、更新されたdocs/CPLUSPLUS-SUPPORT.html
をご覧ください。 - GNU libstdc++ v3(GPLv3 ライセンス)の共有ライブラリ バージョンに対応する新しい C++ サポート ランタイム
gnustl_shared
を追加しました。詳しくは、docs/CPLUSPLUS-SUPPORT.html
をご覧ください。 - STLport C++ ランタイムに RTTI のサポートを追加しました(例外に対するサポートはありません)。
LOCAL_CPP_EXTENSION
で複数のファイル拡張子に対するサポートを追加しました。対象 たとえば、foo.cpp
とbar.cxx
の両方を C++ ソースとしてコンパイルするには、 以下を宣言します。LOCAL_CPP_EXTENSION := .cpp .cxx
- NDK が提供するリンク時共有システム ライブラリから不要なエクスポート済みシンボルを多数削除しました。これにより、スタンドアロン ツールチェーンを使用して生成されたコードが誤って不安定な ABI シンボル(プラットフォームのビルドに使用されるツールチェーンが変更されるたびに変化する libgcc.a シンボルなど)に依存する危険性がないことが保証されます。
- より多くの拡張機能をサポートするために EGL ヘッダーと OpenGLES Khronos ヘッダーを更新しました。対応するライブラリ用の NDK ABI は変更されないことに注意してください。これは、各拡張機能をクライアント アプリケーションが実行時に調査する必要があるためです。
使用可能な拡張機能は、実際のデバイスで動作しているプラットフォームのバージョンではなく、デバイスと GPU ドライバによって異なります。ヘッダーの更新により、拡張機能が
eglGetProcAddress()
または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
Android NDK r6b(2011 年 8 月)
この NDK のリリースには、r6 より新しい機能は含まれていません。r6b リリースでは、r6 リリースで見られた以下の問題が修正されています。
- 重要なバグの修正
-
APP_ABI="armeabi x86"
をマルチアーキテクチャ ビルドに使用する場合のビルドを修正しました。- NDK リリース パッケージ内のビルド済みの STLport ライブラリの場所を修正しました。 これらは、パッケージ化スクリプト内のバグによって間違った場所に配置されていました。
- x86 スタンドアロン ツールチェーンを含む共有ライブラリでの
atexit()
の使用方法を修正しました。 make-standalone-toolchain.sh --arch=x86
を修正しました。適切な GNU libstdc++ バイナリが正しい場所にコピーされていませんでした。__dso_handle
シンボルの定義とサイズが欠落していることに関するスタンドアロン ツールチェーン リンカー警告を修正しました(ARM のみ)。- x86 ビルド用の
$(SYSROOT)/usr/include
のインクルード順序を修正しました。詳しくは、バグをご覧ください。 - x86 スタンドアロン ツールチェーンで使用される場合の x86 固有のシステム内の
ptrdiff_t
とsize_t
の定義を修正しました。
Android NDK r6(2011 年 7 月)
この NDK のリリースでは、x86 ABI に対するサポートが追加され、その他のマイナーな変更が行われています。このリリースでの変更点の詳細については、NDK パッケージに同梱されている CHANGES.HTML
ドキュメントをご覧ください。
- 一般的な注意点:
-
- x86 ABI に対するサポートが追加されます。これにより、互換性のある x86 ベースの Android デバイスで動作するマシンコードを生成することができます。x86 の主な機能には、x86 固有のツールチェーン、システム ヘッダー、ライブラリ、デバッグ サポートが含まれます。x86 サポートについて詳しくは、NDK パッケージの
docs/CPU-X86.html
をご覧ください。デフォルトで、ARM ベースのデバイス用のコードが生成されますが、
Application.mk
ファイル内のAPP_ABI
定義に x86 を追加して、x86 プラットフォーム用にビルドすることができます。たとえば以下では、ndk-build
に対して 3 つの異なる ABI 用のコードをビルドするよう指示しています。APP_ABI := armeabi armeabi-v7a x86
ARM ベースのアセンブリ ソースに依存していない限り、x86 マシンコードをビルドするために
Android.mk
ファイルを編集する必要はありません。 make-standalone-toolchain.sh
の呼び出し時に--toolchain=x86-4.4.3
オプションを使用してスタンドアロン x86 ツールチェーンをビルドできます。詳しくは、docs/STANDALONE-TOOLCHAIN.html
をご覧ください。- 新しい
ndk-stack
ツールを使用すれば、ネイティブ コードによって生成されたlogcat
内のスタック トレースを変換することができます。このツールは、命令アドレスを、関数、ソースファイル、各スタック フレームに対応する行番号などを含む可読形式に変換します。 詳細と使用例については、docs/NDK-STACK.html
をご覧ください。
- x86 ABI に対するサポートが追加されます。これにより、互換性のある x86 ベースの Android デバイスで動作するマシンコードを生成することができます。x86 の主な機能には、x86 固有のツールチェーン、システム ヘッダー、ライブラリ、デバッグ サポートが含まれます。x86 サポートについて詳しくは、NDK パッケージの
- その他の変更点:
- NDK r5 でサポートが終了している
arm-eabi-4.4.0
が、NDK の配布から削除されました。
Android NDK r5c(2011 年 6 月)
この NDK のリリースには、r5b より新しい機能は含まれていません。r5c リリースでは、r5b リリースで見られた以下の問題が修正されています。
- 重要なバグの修正:
-
ndk-build
: デバッグ可能なプロジェクトの並列ビルドを実行しようとしたときに発生する珍しいバグを修正しました。- 新しいツールチェーンでの
LOCAL_WHOLE_STATIC_LIBRARIES
の正しい動作を妨げていたタイプミスを修正し、これに関するドキュメントをdocs/ANDROID-MK.html
に追加しました。 gnustl_static
に対してリンクされたコードが API レベル 8(Android 2.2)より古いプラットフォーム リリースで動作中にクラッシュするバグを修正しました。ndk-gdb
: Android 3.0 以降のデバイスでデバッグ中にセグメンテーション違反を引き起こすバグを修正しました。<android/input.h>
: API レベル 9(Android 2.3)で導入された 2 つの関数が間違っていたため、修正されました。これにより、ソース API は更新されますが、システムへのバイナリ インターフェースは変更されません。正しくない関数にhistory_index
パラメータと正しい定義を以下に示します。float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event, size_t pointer_index, size_t history_index); float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event, size_t pointer_index, size_t history_index);
- API レベルで追加された新しい関数(
pthread_rwlock_init
など)をリンク時に正しく公開するように API レベル 9(Android 2.3)用の C ライブラリ ARM バイナリを更新しました。
- マイナーな機能強化と修正:
-
- オブジェクト ファイルが
LOCAL_SRC_FILES
に指定されている順に常にリンクされるようになりました。以前はファイルがソースの拡張子ごとにグループ分けされていたため、その順序になりませんでした。 import-module
が失敗した場合に、検索されたディレクトリのリストが出力されるようになりました。これは、ビルドシステムによって使用されるNDK_MODULE_PATH
定義が正しいことをチェックするのに役立ちます。import-module
が成功した場合に、モジュールが発見されたディレクトリがログに記録されるようになりました(NDK_LOG=1
を使用して表示できます)。- プロジェクト内に大量のインクルード ディレクトリを含むデバッグ可能なアプリのビルド速度を向上させました。
ndk-gdb
:adb shell
の失敗検出を強化し、エラー メッセージを改善しました。<pthread.h>
: API レベル 9(Android 2.3)以降のPTHREAD_RWLOCK_INITIALIZER
の定義を修正しました。- モジュールがそれ自体をインポートできたことで GNU Make 内で無限ループが発生する不具合を修正しました。
LOCAL_ARM_NEON
が true(build/core/build-binary.mk
内の誤記述)に設定されている場合にビルドが失敗するバグを修正しました。.s
アセンブリ ファイルのコンパイルを妨げる不具合を修正しました(.S
ファイルは正常)。
- オブジェクト ファイルが
Android NDK r5b(2011 年 1 月)
この NDK のリリースには、r5 より新しい機能は含まれていません。r5b リリースでは、r5 リリースで見られた以下の問題が修正されています。
- r5 バイナリには glibc 2.11 が必要でしたが、r5b バイナリは glibc 2.7 以降を対象とする特別なツールチェーンを使用して生成されます。Linux ツールチェーン バイナリは Ubuntu 8.04 以降で動作するようになりました。
- arm-linux-androideabi-4.4.3 ツールチェーンでのコンパイラのバグを修正しました。 以前のバイナリは、符号付き char を処理中に無効な thumb 命令シーケンスを生成していました。
- APP_STL の "gnustl_static" 値に関する欠落していたドキュメントを追加しました。これにより、GNU libstdc++ の静的ライブラリ バージョンに対してリンクできるようになります。
- 以下の
ndk-build
の問題を修正しました。- Windows 上でコンパイル エラーが発生したときに一貫性のない依存関係ファイルが生成されるバグ。これにより、ソースコード内のエラーが修正された後の適切なビルドが妨げられていました。
- 非常に短いパス(Android NDK のインストール用)、またはプロジェクト パスを使用している場合に無効な依存関係ファイルが生成される Cygwin 固有のバグ。これにより、増分ビルドが不可能になっていました。
- cpufeatures ライブラリの新しい NDK ツールチェーンでの正しい動作を妨げていたタイプミス。
- すべてのソースファイルまたはオブジェクト ファイルの GNU Make からの
cygpath -m
に対する呼び出しを回避することにより、Cygwin 内のビルドが高速化されます。この呼び出しによって、非常に大きなソースツリーに伴う問題が発生していました。これが正しく機能しない場合は、使用環境で再びcygpath -m
を使用するようにNDK_USE_CYGPATH=1
を定義します。 - Cygwin のインストールで、スペースを含む無効なインストール パスの使用がユーザーに通知されるようになりました。以前は、正しいバージョンの GNU Make がインストールされていても、無効なパスを指定すると、GNU Make のバージョンが間違っているというエラーが出力されていました。
- コロンで区切られた複数のディレクトリが含まれている場合に、
NDK_MODULE_PATH
環境変数の正しい動作を妨げていたタイプミスを修正しました。 prebuilt-common.sh
スクリプトはホストタグに依存するのではなく、64 ビットで生成されたマシンコードに対してコンパイラをチェックするよう修正されました。これにより、Snow Leopard で 32 ビット ツールチェーンを正しく再ビルドすることができます。ツールチェーン再ビルド スクリプトは、32 ビット ホスト ツールチェーンの使用もサポートするようになりました。- 欠落していた
INET_ADDRSTRLEN
の宣言が<netinet/in.h>
に追加されました。 - 欠落していた
IN6_IS_ADDR_MC_NODELOCAL
とIN6_IS_ADDR_MC_GLOBAL
の宣言が<netinet/in6.h>
に追加されました。 -std=c99
を使用したコンパイルを可能にするために、<asm/byteorder.h>
で 'asm' が '__asm__' で置き換えられました。
Android NDK r5(2010 年 12 月)
この NDK のリリースでは、さまざまな新しい API が追加されています。そのほとんどは、ネイティブ コードを大量に消費するゲームなどのアプリの開発をサポートするために導入されました。デベロッパーは、API を使用して、イベント、オーディオ、グラフィックスとウィンドウの管理、アセット、ストレージに直接ネイティブ アクセスすることができます。また、新しい NativeActivity
クラスを利用することで、ネイティブ コード内に Android アプリのライフサイクルを実装することもできます。このリリースでの変更点の詳細については、ダウンロードした NDK パッケージに同梱されている CHANGES.HTML
ドキュメントをご覧ください。
- 一般的な注意点:
-
- ネイティブ アクティビティに対するサポートが追加されます。これにより、ネイティブ コードで Android アプリのライフサイクルを実装することができます。
- 以下に対するネイティブ サポートが追加されます。
- 入力サブシステム(キーボードやタッチ スクリーンなど)
- センサーデータ(加速度計、コンパス、ジャイロスコープなど)へのアクセス
- 入力イベントやセンサー イベントなどを待機するためのイベントループ API
- Windows とサーフェス サブシステム
- 再生と記録をサポートするだけでなく、プラットフォーム オーディオ エフェクトを制御する OpenSL ES 標準に基づくオーディオ API
.apk
ファイルにパッケージ化されたアセットへのアクセス
- より適切なコードを生成し、
./configure && make
を使用したビルドを希望するデベロッパー向けに、スタンドアロン クロスコンパイラとしても使用可能になった新しいツールチェーン(GCC 4.4.3 に基づく)が含まれています。詳しくは、docs/STANDALONE-TOOLCHAIN.html をご覧ください。GCC 4.4.0 のバイナリがまだ提供されていますが、4.2.1 バイナリは削除されました。 - ビルド済みの静的および共有ライブラリ(docs/PREBUILTS.html)およびモジュールのエクスポートおよびインポートに対するサポートが追加されます。これにより、サードパーティ モジュールの共有と再利用がより簡単になります(理由については、docs/IMPORT-MODULE.html をご覧ください)。
- デフォルトの C++ STL 実装(STLport に基づく)がヘルパー モジュールとして提供されます。これは、静的ライブラリと共有ライブラリのどちらにも使用できます(詳細と使用例については、sources/android/stlport/README をご覧ください)。STLport(静的または共有)と GNU libstdc++(静的のみ)用のビルド済みバイナリも提供されます(デフォルトの C++ STL 実装の代わりに、これらのライブラリに対するコンパイルを選択した場合)。 デフォルトの STL 実装では、C++ 例外と RTTI はサポートされません。詳しくは、docs/CPLUSPLUS-SUPPORT.HTML をご覧ください。
- CPU タイプの報告が改善された
cpufeatures
ヘルパー ライブラリに対する機能が強化されています(以前は、一部のデバイスが ARMv6 であるにもかかわらず ARMv7 CPU として報告していました)。デベロッパーは、このライブラリを使用してアプリを再ビルドしてから Google Play にアップロードすることをおすすめします。そうすることにより、機能強化のメリットが得られます。 - OpenGL ES のテクスチャとサービスを作成して管理できる EGL ライブラリが追加されます。
- ネイティブ アクティビティの作り方を示すための新しいサンプルアプリである
native-plasma
とnative-activity
が追加されます。 - 複数のバグが修正されたほか、小さな改善が行われています。詳しい変更点のリストについては、docs/CHANGES.html をご覧ください。
Android NDK r4b(2010 年 6 月)
- NDK r4b の注意点:
-
NDK ビルドとデバッグ スクリプトのいくつかの不具合が修正されました。NDK r4 を使用している場合は、NDK r4b ビルドをダウンロードすることをおすすめします。このリリースでの変更点の詳細については、ダウンロードした NDK パッケージに同梱されている CHANGES.TXT ドキュメントをご覧ください。
- 一般的な注意点:
-
- 新しい
ndk-build
ビルドコマンドを介して簡略化されたビルドシステムが提供されます。 - 新しい
ndk-gdb
コマンドを介して本番デバイス上で生成されたマシンコードの容易なネイティブ デバッグに対するサポートが追加されます。 - ARM ベースの CPU アーキテクチャ
armeabi-v7a
用の新しい Android 固有の API が追加されます。新しい ABI は、以下の CPU 命令セット拡張機能を包含するように既存のarmeabi
ABI を機能強化します。- Thumb-2 命令
- VFP ハードウェア FPU 命令(VFPv3-D16)
- ARM Advanced SIMD(NEON)GCC イントリンシクスと VFPv3-D32 に対するオプション サポート。 Motorola 製の Verizon Droid や Google Nexus One などのデバイスでサポートされます。
- アプリがランタイムにホストデバイスの CPU 機能を検出することを可能にする、新しい
cpufeatures
静的ライブラリ(およびソース)が追加されます。特に、アプリは VFPv3-D32 と NEON のサポートに加え、ARMv7-A に対するサポートをチェックしてから、必要に応じて別のコードパスを提供できます。 - サンプルアプリ
hello-neon
が追加されます。このアプリは、cpufeatures
ライブラリを使用して CPU 機能をチェックしてから、NEON イントリンシクスを使用(CPU によってサポートされている場合)して最適化されたコードパスを提供する方法を示します。 - NDK によってサポートされている命令セットのどちらかまたは両方のマシンコードを生成することができます。たとえば、ARMv5 と ARMv7-A の両方のアーキテクチャに対して同時にビルドを実行して、すべてをアプリの最終
.apk
に保存することができます。 - ユーザーが確実に自分のデバイスで実行可能なアプリだけを入手できるようにするため、Google Play では、アプリに含まれている命令セット情報に基づいてアプリを絞り込みます。絞り込みを有効にするために必要なアクションはありません。また、Android システム自体もインストール時にアプリをチェックして、アプリがデバイスの CPU アーキテクチャ用にコンパイルされたライブラリを提供する場合にのみインストールの継続を許可します。
- Android 2.2 がサポートされるようになりました。たとえば、ネイティブ コードから
Bitmap
オブジェクトのピクセル バッファにアクセスするための新しい安定版 API が追加されています。
- 新しい
Android NDK r3(2010 年 3 月)
- 一般的な注意点:
-
- OpenGL ES 2.0 ネイティブ ライブラリ サポートが追加されます。
- OpenGL ES 2.0 頂点シェーダーおよびフラグメント シェーダーの使い方を示すサンプルアプリ
hello-gl2
が追加されます。 - このリリースのツールチェーン バイナリは GCC 4.4.0 で更新されています。以前(4.2.1)より少しだけコンパクトで効率的なマシンコードが生成されるはずです。NDK はまだ 4.2.1 バイナリを提供しています。このバイナリは、オプションで、マシンコードのビルドに使用できます。
Android NDK r2(2009 年 9 月)
元々は、「Android 1.6 NDK、リリース 1」としてリリースされました。
- 一般的な注意点:
-
- OpenGL ES 1.1 ネイティブ ライブラリ サポートが追加されます。
- サンプルアプリ
san-angeles
が追加されました。このサンプルアプリは、ネイティブ OpenGL ES API を通じて 3D グラフィックスをレンダリングしつつ、GLSurfaceView
オブジェクトを使用してアクティビティのライフサイクルを管理します。
Android NDK r1(2009 年 6 月)
元々は、「Android 1.5 NDK、リリース 1」としてリリースされました。
- 一般的な注意点:
-
- Thumb-1 命令を含む ARMv5TE 命令に対するコンパイラ サポート(GCC)が含まれています。
- 安定版ネイティブ API 用のシステム ヘッダー、ドキュメント、サンプルアプリが追加されました。