Android Native Development Kit

Android NDK
開発元 Google
最新版
r27c (27.2.12479018) / 2024年10月9日(2年前) (2024-10-09)
リポジトリ https://android.googlesource.com/platform/ndk.git
対応OS Android 5.0 Lollipop (API 21) 以降
プラットフォーム x86 / x64 / ARM / ARM64
種別 ソフトウェア開発キット
ライセンス Apache License v2.0
公式サイト https://developer.android.com/ndk
テンプレートを表示

Android Native Development Kit (Android NDK) は、Androidオペレーティングシステム上で動作するアプリケーションソフトウェアを、C言語あるいはC++を用いたネイティブコードによって開発できるようにするためのソフトウェア開発キット。GCC/Clangツールチェイン、標準CライブラリのBionic、標準C++ライブラリのlibstdc++/libc++、AndroidネイティブAPIなどを含む。なお、GCCが同梱されている最後のNDKバージョンはr17cであり、r18では取り除かれた。リンカに関しては、NDK r21まではldがデフォルトで使われていたが、r22からはLLVMのLLDがデフォルトで使われるようになった。

概要

Androidのアプリケーション開発には通例Java仮想マシン(Dalvik仮想マシン/Android Runtime)上で動作するJavaあるいはKotlinといったJVMマネージ言語を利用する。マネージ言語はメモリ管理や生産性、移植性の点で優れているが、メモリへの直接アクセスによるパフォーマンス向上や、x86のSSEあるいはARMのNEONといったプロセッサ (CPU) アーキテクチャ固有の拡張命令の使用、またOpenCVのような既存のC/C++コード資産を活用する目的で、NDKを用いたマシンネイティブな開発が許可されている。ただしNDKを利用すると、CPUアーキテクチャごとにバイナリを用意しなければならなくなるというデメリットもある。

Android 2.3以降ではNativeActivityのサポートにより、制約はあるもののC/C++のみでアプリケーション開発をすることもできるようになっている。JVMとネイティブコード間の相互運用には、一般的なデスクトップのJavaアプリケーション開発時と同様、Java Native Interface (JNI) を利用できる。Androidのグラフィカルユーザーインターフェイス (GUI) ライブラリ(ウィジェット・ツールキット)など、上位レベルのAPIはAndroid SDKに含まれるが、大半はJVM言語向けにしか提供されておらず、C/C++向けには提供されていないため、C/C++から利用するにはJNIを経由する必要がある。

NDKにおけるAndroid固有のネイティブAPIは、"A" で始まる名前が付けられており、JVM言語用APIとよく似たものも提供されている。

新しいバージョンのAndroid OSで追加された機能をNDK経由で利用する場合、Android SDK経由でJVM言語用APIを使うときと同様に、minSdkVersionを設定しておくことで、利用可能なAPIセット(関数の集合)がコンパイル時に静的に決定される。一方、実行環境に応じてminSdkVersionよりも新しいAPIを使用したい場合は、dlopen()とdlsym()を使って関数エントリポイントを動的ロードする(リフレクションに相当)か、弱いAPI参照を使う方法がある。

最新のNDKでは、ある程度古いバージョンのAndroid OSはサポートが打ち切られている。r18ではIce Cream Sandwich (Android 4.0; API 14, 15) のサポートが打ち切られた。r24ではJelly Bean (Android 4.1-4.3; API 16-18) のサポートが打ち切られた。r26ではKitKat (Android 4.4; API 19-20) のサポートが打ち切られた。

脚注

  1. ↑ NDK のダウンロード  |  Android NDK  |  Android Developers
  2. ↑ NDK Downloads  |  Android NDK  |  Android Developers
  3. ↑ refs/tags/ndk-r27c - platform/ndk.git - Git at Google
  4. ↑ Android ABI  |  Android NDK  |  Android Developers
  5. ↑ NOTICE - platform/ndk - Git at Google
  6. ↑ NDK の概要 | Android NDK | Android Developers
  7. 1 2 NDK 変更履歴 | Android NDK | Android Developers
  8. 1 2 NDK Revision History | Android NDK | Android Developers
  9. ↑ Android NDK ネイティブ API | Android Developers
  10. ↑ Android SDK バージョンのプロパティ  |  Android NDK  |  Android Developers
  11. ↑ 新しい API の使用  |  Android NDK  |  Android Developers

関連項目

外部リンク