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 ニューラル ネットワーク API #include <android/NeuralNetworks.h>
共有メモリ JNI API #include <android/hardware_buffer.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 が導入されています。

ニューラル ネットワーク API

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