API Native Android NDK

Android NDK menyediakan sekumpulan header dan file library bersama native yang terus bertambah seiring dengan dirilisnya level API Android baru. Halaman ini menjelaskan header dan file tersebut, dan memetakannya ke level API Android tertentu.

Menggunakan API native

Ada dua langkah dasar untuk memungkinkan aplikasi Anda menggunakan library yang disediakan NDK:

  1. Sertakan dalam kode Anda header yang dikaitkan dengan library yang ingin digunakan.
  2. Beri tahu sistem build bahwa modul native Anda perlu ditautkan ke library pada waktu pemuatan.
    • Jika Anda menggunakan ndk-build: Tambahkan library native ke variabel LOCAL_LDLIBS dalam file Android.mk Anda. Misalnya, untuk menautkan ke /system/lib/libfoo.so, tambahkan baris berikut:
    •     LOCAL_LDLIBS := -lfoo
          

      Untuk menampilkan daftar beberapa library sekaligus, gunakan spasi sebagai pemisah. Untuk informasi selengkapnya tentang menggunakan variabel LOCAL_LDLIBS, buka Android.mk.

    • Jika Anda menggunakan CMake: Ikuti petunjuk di Menambahkan Kode C dan C++ ke Project.
Untuk semua level API, sistem build otomatis menautkan library C dan C++ standar. Anda tidak perlu menyertakannya secara eksplisit saat menetapkan LOCAL_LDLIBS.

NDK sering menyediakan header dan library baru untuk rilis Android baru. Untuk daftar API native yang diperkenalkan oleh versi rilis Android, lihat Tabel 1 di bawah ini. File ini berada di root penginstalan NDK Anda, pada sysroot/usr/include.

Tabel berikut menunjukkan hubungan antara level API yang didukung NDK dan rilis platform Android. Untuk informasi selengkapnya tentang level API Android, baca Apa itu Level API?

Tabel 1. Ringkasan dukungan API native utama yang diperkenalkan oleh versi Android.

API level yang didukung NDK Rilis Platform Android API Native Utama Mencakup
3 1.5 Library standar C (libc/libm) #include ...
C++ #include ...
Antarmuka Native Java #include <jni.h>
Android logging API #include <android/log.h>
Zlib #include <zlib.h>
Linker dinamis #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 bitmap 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>
Native aplication API Loop peristiwa:
#include <android/looper.h>

Peristiwa input:
#include <android/input.h>
#include <android/keycodes.h>

Peristiwa sensor:
#include <android/sensor.h>

Manajemen Jendela/Permukaan:
#include <android/rect.h>
#include <android/window.h>
#include <android/native_window.h>
#include <android/native_window_jni.h>

Aset:
#include <android/asset_manager.h>

Konfigurasi:
#include <android/configuration.h>

File OBB:
#include <android/storage_manager.h>

#include <android/obb.h>

Aktivitas native:
#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>
Native media 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 Native tracing API #include <android/trace.h>
24 7.0 - 7.1.1 Vulkan #include <vulkan/vulkan.h>
Native camera 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>
Native choreographer API #include <android/choreographer.h>
Native multinetwork API #include <android/multinetwork.h>
OpenGL ES 3.2 #include <GLES3/gl32.h>
#include <GLES3/gl3ext.h>
Media native API #include <media/NdkImage.h>
#include <media/NdkImageReader.h>
26 8.0 AAudio API #include <aaudio/AAudio.h>
Hardware buffer API #include <android/hardware_buffer.h>
#include <android/hardware_buffer_jni.h>>
Shared memory API #include <android/sharedmem.h>
27 8.1 Neural Networks API #include <android/NeuralNetworks.h>
Shared memory JNI API #include <android/hardware_buffer.h>
28 9.0 SurfaceTexture API #include <android/surface_texture.h>

Ringkasan API native

Android API level 3

Library C

Header library C standar tersedia melalui nama biasanya, seperti <stdlib.h> dan <stdio.h>. Perhatikan bahwa Android, tidak seperti Linux, tidak memisahkan library pthread dan rt. Fungsionalitas tersebut disertakan dalam libc. Library math tetap terpisah di libm, tetapi otomatis ditambahkan oleh compiler.

Library linker dinamis

Anda dapat mengakses fungsionalitas dlopen(3) dan dlsym(3) linker dinamis Android. Anda juga harus menautkan ke libdl. Contoh:
    LOCAL_LDLIBS := -ldl
    

Library C++

Dukungan C++17 tersedia. Untuk informasi lebih lanjut tentang dukungan library C++, lihat Dukungan Library C++.

Dukungan log khusus Android

<android/log.h> memuat berbagai fungsi yang dapat digunakan aplikasi untuk mengirim pesan log ke logcat dari kode native. Untuk informasi lebih lanjut tentang definisi ini, lihat dokumentasi pembuatan log. Biasanya Anda perlu menulis makro wrapper sendiri untuk mengakses fungsi ini. Jika Anda ingin membuat log, tautkan ke liblog. Contoh:
    LOCAL_LDLIBS := -llog
    

Library kompresi ZLib

Anda dapat menggunakan library kompresi Zlib dengan menyertakan zlib.h dan zconf.h. Anda juga harus menautkan modul native ke /system/lib/libz.so dengan menyertakan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lz
    

Android API level 4

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 1.6 dan yang lebih tinggi.

Library OpenGL ES 1.x

Header OpenGL ES standar <GLES/gl.h> dan <GLES/glext.h> memuat deklarasi yang diperlukan untuk menjalankan panggilan rendering OpenGL ES 1.x dari kode native.

Untuk menggunakan header ini, tautkan modul native Anda ke /system/lib/libGLESv1_CM.so dengan menyertakan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lGLESv1_CM
    

Semua perangkat berbasis Android mendukung OpenGL ES 1.0, karena Android menyediakan perender software berkemampuan Open GL 1.0 yang dapat digunakan di perangkat yang tidak memiliki GPU.

Hanya perangkat Android yang memiliki GPU yang diperlukan yang mendukung OpenGL ES 1.1 sepenuhnya. Aplikasi dapat mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang diperlukannya. Untuk informasi tentang cara melakukan kueri ini, lihat deskripsi glGetString() dalam spesifikasi OpenGL.

Selain itu, Anda harus menempatkan tag <uses-feature> dalam file manifes untuk menunjukkan versi OpenGL ES mana yang diperlukan aplikasi Anda.

EGL API hanya tersedia mulai API level 9. Namun, Anda dapat menggunakan VM untuk menjalankan beberapa operasi yang akan Anda peroleh dari API tersebut. Operasi ini meliputi pembuatan dan pembalikan permukaan. Untuk contoh cara menggunakan GLSurfaceView, lihat Memperkenalkan GLSurfaceView.

Aplikasi contoh san-angeles menyediakan contoh cara melakukan operasi ini, yang merender setiap bingkai dalam kode native. Contoh ini adalah port Android kecil dari program demo San Angeles Observation yang luar biasa.

Android API level 5

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 2.0 dan yang lebih tinggi.

Library OpenGL ES 2.0:

Header OpenGL ES 2.0 standar <GLES2/gl2.h> dan <GLES2/gl2ext.h> berisi deklarasi yang diperlukan untuk menjalankan panggilan rendering OpenGL ES 2.0 dari kode native. Panggilan rendering ini memberikan kemampuan untuk menggunakan bahasa GLSL guna menetapkan dan menggunakan shader fragment dan vertex.

Untuk menggunakan OpenGL ES 2.0, tautkan modul native Anda ke /system/lib/libGLESv2.so dengan menyertakan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lGLESv2
    

Tidak semua perangkat mendukung OpenGL ES 2.0. Aplikasi dapat mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang diperlukannya. Untuk informasi tentang cara melakukan kueri ini, lihat deskripsi glGetString() dalam spesifikasi OpenGL.

Selain itu, Anda harus menempatkan tag <uses-feature> dalam file manifes untuk menunjukkan versi OpenGL ES mana yang diperlukan aplikasi Anda. Untuk informasi lebih lanjut tentang setelan OpenGL ES untuk <uses-feature>, lihat OpenGL ES.

Aplikasi contoh hello-gl2 memberikan contoh dasar tentang cara menggunakan OpenGL ES 2.0 dengan NDK.

EGL API hanya tersedia mulai API level 9. Namun, Anda dapat menggunakan VM untuk menjalankan beberapa operasi yang akan Anda peroleh dari API tersebut. Operasi ini meliputi pembuatan dan pembalikan permukaan. Untuk contoh cara menggunakan GLSurfaceView, lihat Memperkenalkan GLSurfaceView.

Android API level 8

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 2.2 dan yang lebih tinggi.

jnigraphics

Library jnigraphics memperlihatkan antarmuka berbasis C yang memungkinkan kode native untuk mengakses buffer piksel objek bitmap Java secara andal. Alur kerja untuk menggunakan jnigraphics adalah sebagai berikut:

  1. Gunakan AndroidBitmap_getInfo() untuk mengambil informasi tentang pengendali bitmap tertentu dari JNI, misalnya lebar dan tinggi.
  2. Gunakan AndroidBitmap_lockPixels() untuk mengunci buffer piksel dan mengambil pointer ke sana. Dengan begitu, piksel tidak akan bergerak hingga aplikasi memanggil AndroidBitmap_unlockPixels().
  3. Dalam kode native, modifikasi buffer piksel sebagaimana mestinya untuk format pikselnya, lebar, dan karakteristik lainnya.
  4. Panggil AndroidBitmap_unlockPixels() untuk membuka kunci buffer.

Untuk menggunakan jnigraphics, sertakan header <bitmap.h> dalam kode sumber Anda, dan tautkan ke jnigraphics dengan memasukkan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS += -ljnigraphics
    

Detail tambahan tentang fitur ini dapat ditemukan dalam komentar file <android/bitmap.h>.

Android API level 9

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 2.3 dan yang lebih tinggi.

EGL

EGL menyediakan antarmuka platform native untuk mengalokasikan dan mengelola permukaan OpenGLES. Untuk informasi lebih lanjut tentang fitur-fiturnya, lihat Antarmuka Platform Native EGL.

EGL memungkinkan Anda melakukan operasi berikut dari kode native:

  • Menampilkan daftar konfigurasi EGL yang didukung.
  • Mengalokasikan dan merilis permukaan OpenGL ES.
  • Menukar atau membalik permukaan.

Header berikut menyediakan fungsi EGL:

  • <EGL/egl.h>: definisi EGL API utama.
  • <EGL/eglext.h>: definisi terkait ekstensi EGL.

Untuk menautkan ke library EGL sistem, tambahkan baris berikut ke file Android.mk Anda:

    LOCAL_LDLIBS += -lEGL
    

OpenSL ES

Penanganan audio native Android didasarkan pada OpenSL ES 1.0.1 API dari Khronos Group.

Header OpenSL ES standar <SLES/OpenSLES.h> dan <SLES/OpenSLES_Platform.h> memuat deklarasi yang diperlukan untuk menjalankan input dan output audio dari sistem native Android. Distribusi NDK untuk OpenSL ES juga menyediakan ekstensi khusus Android. Untuk informasi tentang ekstensi ini, lihat komentar di <SLES/OpenSLES_Android.h> dan <SLES/OpenSLES_AndroidConfiguration.h>.

Library sistem libOpenSLES.so mengimplementasikan fungsi audio native publik. Tautkan ke library tersebut dengan menambahkan baris berikut ke file Android.mk Anda:

    LOCAL_LDLIBS += -lOpenSLES
    

Untuk informasi lebih lanjut tentang OpenSL ES API, lihat OpenSL ES untuk Android.

API aplikasi native Android

Mulai API level 9, Anda dapat menulis seluruh aplikasi Android dengan kode native, tanpa menggunakan Java.

Catatan: Menulis aplikasi dalam kode native tidak dengan sendirinya cukup untuk menjalankan aplikasi tersebut di VM. Selain itu, aplikasi Anda tetap harus mengakses sebagian besar fitur platform Android melalui JNI.

Rilis ini menyediakan header native berikut:

Untuk informasi lebih lanjut tentang header ini, lihat dokumentasi Referensi API NDK, serta komentar dalam headernya. Selain itu, untuk informasi lebih lanjut tentang topik yang lebih besar mengenai penulisan aplikasi native, lihat Aktivitas dan Aplikasi Native.

Jika Anda menyertakan satu atau beberapa header tersebut, Anda juga harus menautkan ke library libandroid.so. Untuk menautkan ke libandroid.so, sertakan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS += -landroid
    

Android API level 14

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 4.0 dan yang lebih tinggi.

OpenMAX AL

Penanganan multimedia native Android didasarkan pada OpenMAX AL 1.0.1 API dari Khronos Group.

Header OpenMAX AL standar <OMXAL/OpenMAXAL.h> dan <OMXAL/OpenMAXAL_Platform.h> memuat deklarasi yang diperlukan untuk menjalankan output multimedia dari sistem native Android.

Distribusi NDK untuk OpenMAX AL juga menyediakan ekstensi khusus Android. Untuk informasi tentang ekstensi ini, lihat komentar di <OMXAL/OpenMAXAL_Android.h>.

Library sistem libOpenMAXAL.so mengimplementasikan fungsi multimedia native publik. Untuk menautkan ke library ini, sertakan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS += -lOpenMAXAL
    

Untuk informasi lebih lanjut tentang topik ini, lihat $NDK/docs/openmaxal/index.html, di mana $NDK adalah direktori utama dari penginstalan NDK Anda.

OpenSL ES

Dukungan OpenSL ES untuk Android API level ini menambahkan dukungan PCM. Untuk informasi lebih lanjut tentang dukungan OpenSL ES di NDK, lihat OpenSL ES.

Android API level 18

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 4.3 dan yang lebih tinggi.

OpenGL ES 3.0

Header OpenGL ES 3.0 standar <GLES3/gl3.h> dan <GLES3/gl3ext.h> memuat deklarasi yang diperlukan untuk menjalankan panggilan rendering OpenGL ES 3.0 dari kode native. Panggilan rendering ini memberikan kemampuan untuk menggunakan bahasa GLSL guna menetapkan dan menggunakan shader fragment dan vertex.

Untuk menggunakan OpenGL ES 3.0, tautkan modul native Anda ke /system/lib/libGLESv3.so dengan memasukkan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lGLESv3
    

Tidak semua perangkat mendukung OpenGL ES 3.0. Aplikasi dapat mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang diperlukannya. Untuk informasi tentang cara melakukan kueri ini, lihat deskripsi glGetString() dalam spesifikasi OpenGL.

Selain itu, Anda harus menempatkan tag <uses-feature> dalam file manifes untuk menunjukkan versi OpenGL ES mana yang diperlukan aplikasi Anda. Untuk informasi lebih lanjut tentang setelan OpenGL ES untuk <uses-feature>, lihat OpenGL ES.

Aplikasi contoh gles3jni memberikan contoh dasar tentang cara menggunakan OpenGL ES 3.0 dengan NDK.

Android API level 21

NDK menyediakan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 4.3 dan yang lebih tinggi.

OpenGL ES 3.1

Header OpenGL ES 3.1 standar <GLES3/gl31.h> dan <GLES3/gl3ext.h> memuat deklarasi yang diperlukan untuk menjalankan panggilan rendering OpenGL ES 3.1 dari kode native. Panggilan rendering ini memberikan kemampuan untuk menggunakan bahasa GLSL guna menetapkan dan menggunakan shader fragment dan vertex.

Untuk menggunakan OpenGL ES 3.1, tautkan modul native Anda ke /system/lib/libGLESv3.so dengan memasukkan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lGLESv3
    

Tidak semua perangkat mendukung OpenGL ES 3.1. Aplikasi dapat mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang diperlukannya. Untuk informasi tentang cara melakukan kueri ini, lihat deskripsi glGetString() dalam spesifikasi OpenGL.

Selain itu, Anda harus menempatkan tag <uses-feature> dalam file manifes untuk menunjukkan versi OpenGL ES mana yang diperlukan aplikasi Anda. Untuk informasi lebih lanjut tentang setelan OpenGL ES untuk <uses-feature>, lihat OpenGL ES.

Aplikasi contoh gles3jni memberikan contoh dasar tentang cara menggunakan OpenGL ES 3.1 dengan NDK.

Catatan: Emulator Android tidak mendukung emulasi hardware OpenGL ES 3.1. Untuk menjalankan dan menguji kode yang menggunakan API ini diperlukan perangkat fisik dengan hardware yang dapat mendukung OpenGL ES 3.1.

Android API level 23

NDK memperkenalkan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 6.0 dan yang lebih tinggi.

Pelacakan

API pelacakan native (<android/trace.h>) menyediakan padanan native dari metode android.os.trace dalam bahasa pemrograman Java. Dengan API ini, Anda dapat melacak unit kerja bernama dalam kode native dengan menulis peristiwa pelacakan ke buffer pelacakan sistem. Selanjutnya, Anda dapat mengumpulkan dan menganalisis peristiwa pelacakan menggunakan fitur Systrace. Untuk informasi lebih lanjut tentang penggunaan API ini, lihat Penelusuran Native.

Android API level 24

NDK memperkenalkan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 7.0 dan yang lebih tinggi.

Vulkan

Vulkan adalah API lintas platform dengan overhead rendah untuk rendering 3D berperforma tinggi. Vulkan adalah standar terbuka yang dikelola oleh Khronos Group. File header standar <vulkan/vulkan.h> memuat deklarasi yang diperlukan untuk menjalankan panggilan rendering Vulkan dari kode native Anda.

Untuk mempelajari lebih lanjut tentang penggunaan Vulkan dalam aplikasi Android, lihat dokumentasi API. Untuk contoh kode, lihat project vulkan-basic-samples dan android-vulkan-tutorials di GitHub.

Kamera

API kamera native menyediakan padanan native dari class android.hardware.camera2 dalam bahasa pemrograman Java. Dengan API kamera native, Anda dapat melakukan pengambilan dan pemrosesan foto yang sangat detail dalam kode native. Tidak seperti camera2 API di Java, API kamera native tidak mendukung implementasi camera HAL 1.0 yang tidak digunakan lagi (dengan kata lain, daftar kamera yang tersedia dalam API kamera native tidak akan mencantumkan perangkat kamera yang memiliki level hardware LEGACY).

Koreografer

API koreografer native (<android/choreographer.h>) adalah padanan native dari class android.view.Choreographer di Java. API koreografer native memberi Anda kemampuan untuk mengoordinasikan waktu animasi, input, dan gambar dalam kode native Anda. API ini berguna untuk pengaturan kecepatan bingkai dengan memberikan sinkronisasi melalui vsync. Untuk contoh cara menggunakan API koreografer, lihat direktori choreographer-30fps pada contoh project Teapots di GitHub.

Multijaringan

API multijaringan native (<android/multinetwork.h>) memberikan akses kode native ke fungsionalitas yang sama dengan API multijaringan Java yang ditambahkan pada Android 5.0.

EGL

Dukungan EGL untuk Android API level 24 menambahkan dukungan untuk ekstensi berikut:

Untuk informasi selengkapnya tentang dukungan EGL di NDK, buka EGL.

OpenGL ES 3.2

Header OpenGL ES 3.2 standar <GLES3/gl32.h> dan <GLES3/gl3ext.h> berisi deklarasi yang diperlukan untuk menjalankan panggilan rendering OpenGL ES 3.2 dari kode native.

Untuk menggunakan OpenGL ES 3.2, tautkan modul native Anda ke /system/lib/libGLESv3.so dengan memasukkan baris berikut dalam file Android.mk Anda:

    LOCAL_LDLIBS := -lGLESv3
    

Tidak semua perangkat mendukung OpenGL ES 3.2. Aplikasi dapat mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang diperlukannya. Untuk informasi tentang cara melakukan kueri ini, lihat deskripsi glGetString() dalam spesifikasi OpenGL.

Selain itu, Anda harus menempatkan tag <uses-feature> dalam file manifes untuk menunjukkan versi OpenGL ES mana yang diperlukan aplikasi Anda. Untuk informasi lebih lanjut tentang setelan OpenGL ES untuk <uses-feature>, lihat OpenGL ES.

Android API level 26

NDK memperkenalkan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 8.0 dan yang lebih tinggi.

AAudio

NDK memperkenalkan AAudio API (<aaudio/AAudio.h>) untuk aplikasi audio berperforma tinggi yang memerlukan latensi rendah. Aplikasi yang menggunakan AAudio membaca dan menulis data ke aliran audio. AAudio dimaksudkan sebagai alternatif yang lebih mudah daripada menggunakan OpenSL ES. Untuk informasi lebih lanjut tentang menggunakan API ini, lihat panduan developer AAudio.

Buffer Hardware

NDK memperkenalkan dua API native yang memungkinkan Anda membuat pipeline sendiri untuk manajemen buffer lintas proses.

API buffer hardware native (<android/hardware_buffer.h>) memungkinkan Anda mengalokasikan buffer secara langsung untuk membuat pipeline Anda sendiri untuk manajemen buffer lintas proses. Anda dapat mengalokasikan struct AHardwareBuffer dan menggunakannya untuk memperoleh jenis resource EGLClientBuffer melalui ekstensi eglGetNativeClientBufferANDROID. Anda dapat meneruskan buffer tersebut ke eglCreateImageKHR untuk membuat jenis resource EGLImage, yang selanjutnya dapat diikat ke sebuah tekstur melalui glEGLImageTargetTexture2DOES pada perangkat yang didukung. Hal ini bisa bermanfaat saat membuat tekstur yang mungkin dibagikan lintas proses.

API JNI buffer hardware native (<android/hardware_buffer_jni.h>) memungkinkan Anda mendapatkan objek HardwareBuffer, yang merupakan Parcelable dan karenanya dapat dipindahkan antara dua proses berbeda. Hal ini memberi aplikasi Anda kemampuan yang mirip dengan SurfaceFlinger (seperti membuat antrean buffer antar-proses) tanpa perlu mengakses API Android internal.

Memori Bersama

API memori bersama (<android/sharedmem.h>) adalah wrapper yang melingkupi memori bersama native Android. API ini bisa digunakan untuk komunikasi antarproses. Setelah membuat memori bersama, deskriptor file ditampilkan sebagai pengendali. Anda dapat mengakses konten dalam memori bersama setelah memetakan deskriptor file ke ruang memori proses menggunakan mmap(). Untuk menghapus pemetaan, panggil munmap(). Deskriptor file dapat ditukar dengan proses lain melalui soket domain UNIX. Sistem melepas memori bersama yang dialokasikan setelah deskriptor file yang terkait ditutup dan semua peta memori tidak dipetakan dalam semua proses.

Android API level 27

NDK memperkenalkan API berikut untuk mengembangkan kode native yang berjalan pada gambar sistem Android 8.1 dan yang lebih tinggi.

Neural Networks API

Neural Networks API (<android/neuralnetworks.h>) menyediakan akselerasi hardware bagi aplikasi untuk operasi machine learning pada perangkat. API ini mendukung pembuatan, kompilasi, dan eksekusi model di perangkat. Biasanya aplikasi tidak menggunakan NNAPI secara langsung; justru API dimaksudkan untuk dipanggil oleh library, framework, dan fitur machine learning yang memungkinkan developer melatih modelnya dan menerapkannya di perangkat Android. Untuk mempelajari lebih lanjut, lihat panduan developer Neural Networks API dan referensi API.