Android NDK ネイティブ API

Android NDK は、ネイティブ ヘッダーと共有ライブラリ ファイルのセットを提供します。このセットは、新しい Android API レベルの継続的なリリースに伴って徐々に拡充されています。このページでは、このセットに含まれるヘッダーとファイルについて説明し、各 Android API レベルとの対応を示します。

ネイティブ API の使用

NDK が提供するライブラリをアプリで使用できるようにするには、次の 2 つの基本的なステップを実行します。

  1. 使用するライブラリに関連付けられたヘッダーをコードに含めます。
  2. 読み込み時にネイティブ モジュールをライブラリにリンクする必要があることをビルドシステムに通知します。
    • ndk-build を使用している場合: Android.mk ファイルの LOCAL_LDLIBS 変数にネイティブ ライブラリを追加します。たとえば、/system/lib/libfoo.so に対してリンクするには、次の行を追加します。
    •     LOCAL_LDLIBS := -lfoo
          

      複数のライブラリをリストするには、スペースを区切り記号として使用します。LOCAL_LDLIBS 変数の使用方法について詳しくは、Android.mk をご覧ください。

    • CMake を使用している場合: プロジェクトへの C / C++ コードの追加の手順をご確認ください。
すべての API レベルで、ビルドシステムは標準の C および C++ ライブラリを自動的にリンクします。LOCAL_LDLIBS を設定する際にそれらを明示的に含める必要はありません。

多くの場合、NDK は、新しい Android リリース向けの新しいヘッダーとライブラリを提供します。Android リリース バージョンで導入されたネイティブ API のリストについては、下記の表 1 をご覧ください。これらのファイルは、NDK インストール ルートの sysroot/usr/include にあります。

次の表は、NDK でサポートされる API レベルと Android プラットフォーム リリースの対応関係を示しています。Android API レベルの詳細については、API レベルとはをご覧ください。

表 1. Android バージョンで導入された主なネイティブ API サポートの概要。

NDK でサポートされる API レベル Android プラットフォーム リリース 主なネイティブ API include
3 1.5 C 標準ライブラリ(libc/libm #include ...
C++ #include ...
Java Native Interface #include <jni.h>
Android ロギング API #include <android/log.h>
Zlib #include <zlib.h>
ダイナミック リンカー #include <dlfcn.h>
4 1.6 OpenGL ES 1.x #include <GLES/gl.h>
#include <GLES/glext.h>
5 2.0 - 2.1.x OpenGL ES 2.0 #include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
8 2.2 Android ビットマップ API #include <android/bitmap.h>
9 2.3 - 3.0.x EGL #include <EGL/egl.h>
#include <EGL/eglext.h>
#include <EGL/eglplatform.h>
OpenSL ES #include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Platform.h>
#include <SLES/OpenSLES_Android.h>
#include <SLES/OpenSLES_AndroidConfiguration.h>
ネイティブ アプリ API イベントループ:
#include <android/looper.h>

入力イベント:
#include <android/input.h>
#include <android/keycodes.h>

センサー イベント:
#include <android/sensor.h>

ウィンドウ / サーフェス管理:
#include <android/rect.h>
#include <android/window.h>
#include <android/native_window.h>
#include <android/native_window_jni.h>

アセット:
#include <android/asset_manager.h>

構成:
#include <android/configuration.h>

OBB ファイル:
#include <android/storage_manager.h>

#include <android/obb.h>

ネイティブ アクティビティ:
#include <android/native_activity.h>
12 3.1.x
13 3.2
14 4.0 - 4.0.2 OpenMAX AL #include <OMXAL/OpenMAXAL.h>
#include <OMXAL/OpenMAXAL_Platform.h>
#include <OMXAL/OpenMAXAL_Android.h>
15 4.0.3、4.0.4
16 4.1、4.1.1
17 4.2、4.2.2
18 4.3 OpenGL ES 3.0 #include <GLES3/gl3.h>
#include <GLES3/gl3ext.h>
19 4.4、4.4w
21 5.0、5.1 OpenGL ES 3.1 #include <GLES3/gl31.h>
#include <GLES3/gl3ext.h>
ネイティブ メディア API #include <media/NdkMediaCodec.h>
#include <media/NdkMediaCrypto.h>
#include <media/NdkMediaDrm.h>
#include <media/NdkMediaError.h>
#include <media/NdkMediaExtractor.h>
#include <media/NdkMediaFormat.h>
#include <media/NdkMediaMuxer.h>
23 6.0 ネイティブ トレース API #include <android/trace.h>
24 7.0 - 7.1.1 Vulkan #include <vulkan/vulkan.h>
ネイティブ カメラ API #include <camera/NdkCameraCaptureSession.h>
#include <camera/NdkCameraDevice.h>
#include <camera/NdkCameraError.h>
#include <camera/NdkCameraManager.h>
#include <camera/NdkCameraMetadata.h>
#include <camera/NdkCameraMetadataTags.h>
#include <camera/NdkCaptureRequest.h>
ネイティブ Choreographer API #include <android/choreographer.h>
ネイティブ マルチネットワーク API #include <android/multinetwork.h>
OpenGL ES 3.2 #include <GLES3/gl32.h>
#include <GLES3/gl3ext.h>
ネイティブ メディア API #include <media/NdkImage.h>
#include <media/NdkImageReader.h>
26 8.0 AAudio API #include <aaudio/AAudio.h>
ハードウェア バッファ API #include <android/hardware_buffer.h>
#include <android/hardware_buffer_jni.h>>
共有メモリ API #include <android/sharedmem.h>
27 8.1 Neural Networks API #include <android/NeuralNetworks.h>
共有メモリ JNI API #include <android/hardware_buffer.h>
28 9.0 SurfaceTexture API #include <android/surface_texture.h>

ネイティブ API のハイライト

Android API レベル 3

C ライブラリ

標準 C ライブラリのヘッダーは、通常の名前で使用できます。たとえば、<stdlib.h><stdio.h> などです。 Android では、Linux とは異なり、pthread および rt ライブラリは独立していません。その機能は libc に含まれています。math ライブラリは libm では独立していますが、コンパイラによって自動的に追加されます。

ダイナミック リンカー ライブラリ

Android ダイナミック リンカーの dlopen(3) および dlsym(3) 機能にアクセスできます。libdl にもリンクする必要があります。次に例を示します。
    LOCAL_LDLIBS := -ldl
    

C++ ライブラリ

C++17 のサポートが利用できます。C++ ライブラリのサポートに関する詳細は、C++ ライブラリ サポートをご覧ください。

Android 固有のログサポート

<android/log.h> には、アプリがログメッセージをネイティブ コードから logcat に送信するときに使用できるさまざまな機能が含まれています。その定義の詳細については、ロギングのドキュメントをご覧ください。 通常、この機能にアクセスするには、独自のラッパーマクロを記述する必要があります。ログに記録したい場合は、liblog にリンクします。次に例を示します。
    LOCAL_LDLIBS := -llog
    

ZLib 圧縮ライブラリ

zlib.h および zconf.h を含めることで、Zlib 圧縮ライブラリを使用できます。また、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libz.so にリンクする必要があります。

    LOCAL_LDLIBS := -lz
    

Android API レベル 4

この NDK では、Android 1.6 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

OpenGL ES 1.x ライブラリ

標準の OpenGL ES ヘッダー <GLES/gl.h> および <GLES/glext.h> には、ネイティブ コードから OpenGL ES 1.x レンダリング呼び出しを実行するために必要な宣言が含まれています。

これらのヘッダーを使用するには、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libGLESv1_CM.so にリンクする必要があります。

    LOCAL_LDLIBS := -lGLESv1_CM
    

Android では GPU なしのデバイスで使用できる Open GL 1.0 対応ソフトウェア レンダラが提供されるため、すべての Android ベースのデバイスが OpenGL ES 1.0 をサポートします。

必要な GPU を備えた Android デバイスのみが OpenGL ES 1.1 を完全にサポートします。アプリは OpenGL ES バージョンの文字列および拡張子の文字列に対してクエリを実行することで、現在のデバイスが必要な機能をサポートしているかどうかを判定できます。このクエリの実行方法については、OpenGL の仕様にある glGetString() の説明をご覧ください。

さらに、マニフェスト ファイルで <uses-feature> タグを使用して、アプリに必要な OpenGL ES のバージョンを指定する必要があります。

EGL API は、API レベル 9 以降でのみ使用できます。ただし、VM を使用すると、サーフェスの作成やフリップなど、この API の一部の操作を実行できます。GLSurfaceView を使用する方法の例については、GLSurfaceView の概要をご覧ください。

san-angeles サンプルアプリは、このような操作を実行する方法の例として、ネイティブ コードで各フレームをレンダリングしています。このサンプルは、San Angeles Observation の優れたデモプログラムを Android に移植した小規模なプログラムです。

Android API レベル 5

この NDK では、Android 2.0 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

OpenGL ES 2.0 ライブラリ:

標準の OpenGL ES 2.0 ヘッダー <GLES2/gl2.h> および <GLES2/gl2ext.h> には、ネイティブ コードから OpenGL ES 2.0 レンダリング呼び出しを実行するために必要な宣言が含まれています。これらのレンダリング呼び出しにより、GLSL 言語を使って頂点シェーダーやフラグメント シェーダーを定義および使用する機能が提供されます。

OpenGL ES 2.0 を使用するには、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libGLESv2.so にリンクする必要があります。

    LOCAL_LDLIBS := -lGLESv2
    

すべてのデバイスが OpenGL ES 2.0 をサポートしているわけではありません。アプリは OpenGL ES バージョンの文字列および拡張子の文字列に対してクエリを実行することで、現在のデバイスが必要な機能をサポートしているかどうかを判定できます。このクエリの実行方法については、OpenGL の仕様にある glGetString() の説明をご覧ください。

さらに、マニフェスト ファイルで <uses-feature> タグを使用して、アプリに必要な OpenGL ES のバージョンを指定する必要があります。<uses-feature> での OpenGL ES の設定について詳しくは、OpenGL ES をご覧ください。

hello-gl2 サンプルアプリは、NDK で OpenGL ES 2.0 を使用する方法の基本的な例を示しています。

EGL API は、API レベル 9 以降でのみ使用できます。ただし、VM を使用すると、サーフェスの作成やフリップなど、この API の一部の操作を実行できます。GLSurfaceView を使用する方法の例については、GLSurfaceView の概要をご覧ください。

Android API レベル 8

この NDK では、Android 2.2 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

jnigraphics

jnigraphics ライブラリは、ネイティブ コードで Java ビットマップ オブジェクトのピクセル バッファに確実にアクセスできるようにする C ベースのインターフェースを公開します。jnigraphics を使用するためのワークフローは次のとおりです。

  1. AndroidBitmap_getInfo() を使用して、任意のビットマップ ハンドルに関する幅や高さなどの情報を JNI から取得します。
  2. AndroidBitmap_lockPixels() を使用して、ピクセル バッファをロックし、ピクセル バッファへのポインタを取得します。これにより、アプリが AndroidBitmap_unlockPixels() を呼び出すまでピクセルが移動しなくなります。
  3. ネイティブ コードで、ピクセル形式、幅、およびその他の特性に適合するようにピクセル バッファを変更します。
  4. AndroidBitmap_unlockPixels() を呼び出して、バッファをロック解除します。

jnigraphics を使用するには、<bitmap.h> ヘッダーをソースコードに含め、次の行を Android.mk ファイルに含めて jnigraphics にリンクする必要があります。

    LOCAL_LDLIBS += -ljnigraphics
    

この機能に関する追加情報については、<android/bitmap.h> ファイルのコメントをご覧ください。

Android API レベル 9

この NDK では、Android 2.3 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

EGL

EGL では、OpenGLES サーフェスを割り当てて管理するためのネイティブ プラットフォーム インターフェースが提供されています。この機能の詳細については、EGL ネイティブ プラットフォーム インターフェースをご覧ください。

EGL を使用すると、ネイティブ コードから次の操作を実行できます。

  • サポートされる EGL 設定をリストする。
  • OpenGLES サーフェスの割り当てと解放を実行する。
  • サーフェスをスワップまたはフリップする。

次のヘッダーは EGL 機能を提供します。

  • <EGL/egl.h>: EGL API のメイン定義。
  • <EGL/eglext.h>: EGL の拡張機能関連の定義。

システムの EGL ライブラリにリンクするには、次の行を Android.mk ファイルに追加します。

    LOCAL_LDLIBS += -lEGL
    

OpenSL ES

Android ネイティブ オーディオの処理は、Khronos Group の OpenSL ES 1.0.1 API に基づいています。

標準の OpenSL ES ヘッダー <SLES/OpenSLES.h> および <SLES/OpenSLES_Platform.h> には、Android のネイティブ サイドからオーディオの入出力を実行するために必要な宣言が含まれています。また、OpenSL ES の NDK 配布により、Android 固有の拡張機能も提供されます。このような拡張機能の詳細については、<SLES/OpenSLES_Android.h><SLES/OpenSLES_AndroidConfiguration.h> のコメントをご覧ください。

システム ライブラリ libOpenSLES.so によって、ネイティブ オーディオのパブリック関数が実装されます。次の行を Android.mk ファイルに追加して、このライブラリにリンクします。

    LOCAL_LDLIBS += -lOpenSLES
    

OpenSL ES API の詳細については、Android の OpenSL ES をご覧ください。

Android ネイティブ アプリ API

API レベル 9 以降では、Java を使用せずに、ネイティブ コードで Android アプリ全体を記述できます。

注: VM でアプリを実行するには、ネイティブ コードでアプリを記述するだけでは不十分です。それに加えて、アプリは JNI を介して Android プラットフォームのほとんどの機能にアクセスできる必要があります。

このリリースでは、次のネイティブ ヘッダーが提供されます。

それぞれのヘッダーの詳細については、NDK API リファレンスのドキュメント、およびヘッダー内のコメントを参照してください。また、ネイティブ アプリの作成に関するより広範で詳細な情報については、ネイティブ アクティビティとアプリをご覧ください。

上記のヘッダーを 1 つ以上含めるときは、libandroid.so ライブラリに対してリンクする必要もあります。libandroid.so にリンクするには、次の行を Android.mk ファイルに含めます。

    LOCAL_LDLIBS += -landroid
    

Android API レベル 14

この NDK では、Android 4.0 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

OpenMAX AL

Android ネイティブ マルチメディアの処理は、Khronos Group の OpenMAX AL 1.0.1 API に基づいています。

標準の OpenMAX AL ヘッダー <OMXAL/OpenMAXAL.h> および <OMXAL/OpenMAXAL_Platform.h> には、Android のネイティブ サイドからマルチメディア出力を実行するために必要な宣言が含まれています。

また、OpenMAX AL の NDK の配布により、Android 固有の拡張機能が提供されます。この拡張機能の詳細については、<OMXAL/OpenMAXAL_Android.h> のコメントをご覧ください。

システム ライブラリ libOpenMAXAL.so によって、ネイティブ マルチメディアのパブリック関数が実装されます。このライブラリにリンクするには、次の行を Android.mk ファイルに含めます。

    LOCAL_LDLIBS += -lOpenMAXAL
    

このトピックの詳細については、$NDK/docs/openmaxal/index.html をご覧ください。ここで、$NDK は NDK インストールのルート ディレクトリです。

OpenSL ES

この Android API レベルの OpenSL ES サポートにより、PCM サポートが追加されます。NDK の OpenSL ES サポートに関する詳細については、OpenSL ES をご覧ください。

Android API レベル 18

この NDK では、Android 4.3 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

OpenGL ES 3.0

標準の OpenGL ES 3.0 ヘッダー <GLES3/gl3.h> および <GLES3/gl3ext.h> には、ネイティブ コードから OpenGL ES 3.0 レンダリング呼び出しを実行するために必要な宣言が含まれています。これらのレンダリング呼び出しにより、GLSL 言語を使って頂点シェーダーやフラグメント シェーダーを定義および使用する機能が提供されます。

OpenGL ES 3.0 を使用するには、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libGLESv3.so にリンクする必要があります。

    LOCAL_LDLIBS := -lGLESv3
    

すべてのデバイスが OpenGL ES 3.0 をサポートしているわけではありません。アプリは OpenGL ES バージョンの文字列および拡張子の文字列に対してクエリを実行することで、現在のデバイスが必要な機能をサポートしているかどうかを判定できます。このクエリの実行方法については、OpenGL の仕様にある glGetString() の説明をご覧ください。

さらに、マニフェスト ファイルで <uses-feature> タグを使用して、アプリに必要な OpenGL ES のバージョンを指定する必要があります。<uses-feature> での OpenGL ES の設定について詳しくは、OpenGL ES をご覧ください。

gles3jni サンプルアプリは、NDK で OpenGL ES 3.0 を使用する方法の基本的な例を示しています。

Android API レベル 21

この NDK では、Android 4.3 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が提供されています。

OpenGL ES 3.1

標準の OpenGL ES 3.1 ヘッダー <GLES3/gl31.h> および <GLES3/gl3ext.h> には、ネイティブ コードから OpenGL ES 3.1 レンダリング呼び出しを実行するために必要な宣言が含まれています。これらのレンダリング呼び出しにより、GLSL 言語を使って頂点シェーダーやフラグメント シェーダーを定義および使用する機能が提供されます。

OpenGL ES 3.1 を使用するには、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libGLESv3.so にリンクする必要があります。

    LOCAL_LDLIBS := -lGLESv3
    

すべてのデバイスが OpenGL ES 3.1 をサポートしているわけではありません。アプリは OpenGL ES バージョンの文字列および拡張子の文字列に対してクエリを実行することで、現在のデバイスが必要な機能をサポートしているかどうかを判定できます。このクエリの実行方法については、OpenGL の仕様にある glGetString() の説明をご覧ください。

さらに、マニフェスト ファイルで <uses-feature> タグを使用して、アプリに必要な OpenGL ES のバージョンを指定する必要があります。<uses-feature> での OpenGL ES の設定について詳しくは、OpenGL ES をご覧ください。

gles3jni サンプルアプリは、NDK で OpenGL ES 3.1 を使用する方法の基本的な例を示しています。

注: Android エミュレータは OpenGL ES 3.1 ハードウェア エミュレーションをサポートしていません。この API を使用するコードの実行とテストには、OpenGL ES 3.1 をサポートできるハードウェアを備えた実機が必要です。

Android API レベル 23

この NDK では、Android 6.0 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が導入されています。

トレース

ネイティブ トレース API(<android/trace.h>)では、Java プログラミング言語の android.os.trace メソッドに相当するネイティブ メソッドを提供します。この API を使用すると、トレース イベントをシステム トレース バッファに書き込んで、ネイティブ コード内で名前が付いている作業単位をトレースできます。その後、Systrace ツールを使用してトレース イベントを収集および分析できます。この API の使用方法の詳細については、ネイティブ トレースをご覧ください。

Android API レベル 24

この NDK では、Android 7.0 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が導入されています。

Vulkan

Vulkan は、高パフォーマンスの 3D グラフィック レンダリングを実現する、低オーバーヘッドのクロス プラットフォーム API です。Vulkan は、Khronos Group が管理しているオープン スタンダードです。標準の <vulkan/vulkan.h> ヘッダー ファイルには、ネイティブ コードから Vulkan レンダリング呼び出しを実行するために必要な宣言が含まれています。

Android アプリで Vulkan を使用する方法の詳細については、API ドキュメントをご覧ください。コードサンプルについては、GitHub の vulkan-basic-samples プロジェクトおよび android-vulkan-tutorials プロジェクトをご覧ください。

カメラ

ネイティブ カメラ API では、Java プログラミング言語の android.hardware.camera2 クラスに相当するネイティブ クラスを提供します。ネイティブ カメラ API を使用すると、きめ細かい写真のキャプチャと処理をネイティブ コードで実行できます。Java Camera2 API とは異なり、ネイティブ カメラ API では非推奨のカメラの HAL 1.0 実装をサポートしていません(つまり、ネイティブ カメラ API で使用可能なカメラのリストには、 LEGACY ハードウェア レベルのカメラデバイスは含まれません)。

Choreographer

ネイティブ Choreographer API(<android/choreographer.h>)は、Java の android.view.Choreographer クラスに相当するネイティブ クラスです。ネイティブ Choreographer API を使用すると、アニメーション、入力、描画のタイミングをネイティブ コードで調整できます。この API は、vsync との同期を提供することでフレーム ペーシングに役立ちます。Choreographer API の使用方法の例については、GitHub の Teapots サンプル プロジェクトchoreographer-30fps ディレクトリをご覧ください。

マルチネットワーク

ネイティブ マルチネットワーク API(<android/multinetwork.h>)により、Android 5.0 で追加された Java マルチネットワーク API と同等の機能がネイティブ コードで利用可能となります。

EGL

Android API レベル 24 の EGL サポートには、次の拡張機能のサポートが追加されています。

NDK での EGL サポートの詳細については、EGL をご覧ください。

OpenGL ES 3.2

標準の OpenGL ES 3.2 ヘッダー <GLES3/gl32.h> および <GLES3/gl3ext.h> には、ネイティブ コードから OpenGL ES 3.2 レンダリング呼び出しを実行するために必要な宣言が含まれています。

OpenGL ES 3.2 を使用するには、次の行を Android.mk ファイルに含めて、ネイティブ モジュールを /system/lib/libGLESv3.so にリンクする必要があります。

    LOCAL_LDLIBS := -lGLESv3
    

すべてのデバイスが OpenGL ES 3.2 をサポートしているわけではありません。アプリは OpenGL ES バージョンの文字列および拡張子の文字列に対してクエリを実行することで、現在のデバイスが必要な機能をサポートしているかどうかを判定できます。このクエリの実行方法については、OpenGL の仕様にある glGetString() の説明をご覧ください。

さらに、マニフェスト ファイルで <uses-feature> タグを使用して、アプリに必要な OpenGL ES のバージョンを指定する必要があります。<uses-feature> での OpenGL ES の設定について詳しくは、OpenGL ES をご覧ください。

Android API レベル 26

この NDK では、Android 8.0 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が導入されています。

AAudio

この NDK では、低レイテンシを必要とする高性能オーディオ アプリのための AAudio API<aaudio/AAudio.h>)が導入されています。AAudio を使用するアプリは、オーディオ ストリームへのデータの読み書きを行います。AAudio は、OpenSL ES よりも簡単に使えます。この API の使用方法の詳細については、AAudio デベロッパー ガイドをご覧ください。

ハードウェア バッファ

この NDK では、プロセス間バッファ管理用の独自のパイプラインの作成を可能にする 2 つのネイティブ API が導入されています。

ネイティブ ハードウェア バッファ API (<android/hardware_buffer.h>)を使用すると、バッファを直接割り当てて、プロセス間バッファ管理用の独自のパイプラインを作成できます。 AHardwareBuffer 構造体を割り当てて、それを使用して eglGetNativeClientBufferANDROID 拡張機能を介して EGLClientBuffer リソースタイプを取得できます。そのバッファを eglCreateImageKHR に渡し、サポートされているデバイス上で glEGLImageTargetTexture2DOES を介してテクスチャにバインドできる EGLImage リソースタイプを作成できます。これは、プロセス間で共有するテクスチャを作成するのに役立ちます。

ネイティブ ハードウェア バッファ JNI API(<android/hardware_buffer_jni.h>)を使用すると、HardwareBuffer オブジェクトを取得できます。これは Parcelable であるため、2 つの異なるプロセス間で転送できます。これにより、内部の Android API にアクセスすることなく、SurfaceFlinger と同様の機能(プロセス間に独自のバッファのキューを作成するなど)をアプリで使用できるようになります。

共有メモリ

共有メモリ API(<android/sharedmem.h>)は、Android ネイティブ共有メモリのラッパーです。これはプロセス間の通信に使用できます。共有メモリを作成すると、ファイル ディスクリプタがハンドルとして返されます。mmap() を使用して、ファイル ディスクリプタをプロセスのメモリスペースにマッピングすると、共有メモリの内容にアクセスできます。マッピングを削除するには、munmap() を呼び出します。ファイル ディスクリプタは、UNIX ドメイン ソケット経由で他のプロセスと交換できます。関連付けられたファイル ディスクリプタがクローズされ、すべてのプロセスですべてのメモリマップが解除されると、割り当てられた共有メモリがシステムによって解放されます。

Android API レベル 27

この NDK では、Android 8.1 システム イメージ以降で実行されるネイティブ コードを開発するために以下の API が導入されています。

Neural Networks API

Neural Networks API(<android/neuralnetworks.h>)によって、デバイス上で機械学習処理を行うためのハードウェア アクセラレーションがアプリに提供されます。この API は、デバイス上でのモデル作成、コンパイル、および実行をサポートしています。Neural Networks API は通常、アプリによって直接使用されることはありません。代わりに、機械学習のライブラリ、フレームワーク、ツール(デベロッパーがモデルをトレーニングしたり、そのモデルを Android デバイスにデプロイしたりするのに使用するツール)から呼び出されることを想定して設計されています。詳細については、Neural Networks API のデベロッパー ガイドおよび API リファレンスをご覧ください。