Halaman ini memberikan ringkasan tentang library yang disertakan dalam NDK, dengan link ke bagian referensi API NDK yang relevan, serta ke panduan tempatnya berada.
Menggunakan API native
Ada dua langkah untuk menggunakan library yang disediakan oleh NDK:
Beri tahu sistem build untuk menautkan library.
Jika Anda menggunakan ndk-build: Tambahkan library ke
LOCAL_LDLIBS
dalam Android.mk. Perlu diperhatikan bahwa Anda perlu menghapuslib
di awal dan menggunakan-l
. Misalnya, untuk menautkan kelibfoo
danlibbar
, Anda harus menulis:makefile LOCAL_LDLIBS := -lfoo -lbar
Untuk informasi selengkapnya tentang
LOCAL_LDLIBS
, lihat dokumentasi dokumen Android.mk.Jika Anda menggunakan CMake: Ikuti petunjuk dalam dokumentasi Studio tentang Menambahkan API NDK.
#include
(sertakan) header yang sesuai dari kode Anda.
Perlu diperhatikan bahwa API yang lebih baru daripada minSdkVersion
aplikasi Anda tidak akan
dapat dipanggil secara default, dan Anda harus menggunakannya melalui
dlopen()
dan dlsym()
.
Untuk pendekatan yang lebih mudah, lihat Menggunakan API yang lebih baru.
C/C++ Inti
Library C
Header library C11 standar seperti <stdlib.h>
dan <stdio.h>
tersedia seperti biasa.
Perlu diperhatikan bahwa tidak seperti Linux, tidak ada library libpthread
atau librt
yang terpisah di Android. Fungsionalitas tersebut disertakan langsung dalam libc
, yang tidak perlu ditautkan secara eksplisit.
Ada libm
yang terpisah untuk fungsi matematika (mengikuti tradisi Unix biasanya), tetapi seperti libc
, library ini ditautkan secara otomatis oleh sistem build.
Fungsionalitas linker dinamis di <dlfcn.h>
seperti dlopen(3) dan dlsym(3) tersedia, tetapi Anda harus menautkan secara eksplisit terhadap libdl
.
Library: libc
/libm
/libdl
Library C++
Dukungan C++17 tersedia. Untuk informasi selengkapnya tentang dukungan library C++, lihat Dukungan Library C++.
Logging
<android/log.h>
berisi API untuk logging ke logcat.
Tersedia sejak API level 3.
Library: liblog
Referensi: Logging
Rekaman aktivitas
API perekaman aktivitas native <android/trace.h>
memberikan padanan native
class android.os.Trace
dalam bahasa pemrograman Java. API ini memungkinkan Anda merekam aktivitas unit bernama dari pekerjaan dalam kode Anda, dengan menuliskan peristiwa perekaman aktivitas ke buffering pelacakan sistem. Anda kemudian dapat mengumpulkan dan menganalisis peristiwa perekaman aktivitas menggunakan alat Systrace.
Tersedia sejak API level 23.
Library: libandroid
Panduan: Perekaman Aktivitas Native
Kompresi zlib
Anda dapat menggunakan Library kompresi zlib
dengan menyertakan <zlib.h>
dan menautkan ke libz
.
NDK selalu menyertakan file header zlib terbaru pada saat rilis,
dan libz.a
yang disertakan dalam NDK untuk penautan statis selalu
versi yang sama, tetapi libz.so
untuk penautan dinamis berasal dari perangkat,
dan versi apa pun yang dirilis di perangkat tersebut. Secara khusus,
hal ini berarti header yang Anda bangun tidak cocok dengan versi
zlib pada perangkat, sehingga peringatan biasa terhadap asumsi tentang
detail implementasi sangat valid di sini. Kami tidak mengetahui adanya
masalah terkait API publik, tetapi tata letak struct secara khusus telah berubah dari waktu ke waktu
dan mungkin akan terus berubah. Perlu diperhatikan bahwa API baru dalam versi zlib berikutnya
jelas tidak akan tersedia pada versi OS sebelum API tersebut. Semua
masalah ini dapat dihindari (dengan mengorbankan ukuran APK yang meningkat) dengan
selalu menggunakan libz.a
statis, bukan libz.so
.
Tersedia sejak level API 3 (tetapi lihat catatan di atas).
Library: libz
Grafis
OpenGL ES 1.0 - 3.2
Header OpenGL ES 1.x standar (<GLES/gl.h>
dan <GLES/glext.h>
), header 2.0 (<GLES2/gl2.h>
dan <GLES2/gl2ext.h>
), header 3.0 (<GLES3/gl3.h>
dan <GLES3/gl3ext.h>
), header 3.1 (<GLES3/gl31.h>
dan <GLES3/gl3ext.h>
), dan header 3.2 (<GLES3/gl32.h>
dan <GLES3/gl3ext.h>
) berisi deklarasi yang dibutuhkan untuk OpenGL ES.
Untuk menggunakan OpenGL ES 1.x, tautkan modul native Anda ke libGLESv1_CM
.
Untuk menggunakan OpenGL ES 2.0, tautkan modul native Anda ke libGLESv2
.
Untuk menggunakan OpenGL ES 3.x, tautkan modul native Anda ke libGLESv3
.
Semua perangkat berbasis Android mendukung OpenGL ES 1.0 dan 2.0.
Hanya perangkat Android dengan GPU yang diperlukan yang dapat sepenuhnya mendukung
OpenGL ES versi baru, tetapi library ini terdapat di semua perangkat yang mendukung API
level yang memperkenalkannya. Anda dapat menautkan ke library ini, tetapi aplikasi harus mengkueri string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang dibutuhkannya atau tidak. Untuk
informasi tentang cara melakukan kueri ini, lihat deskripsi
glGetString()
dalam spesifikasi OpenGL.
Selain itu, Anda harus memberikan
tag <uses-feature>
dalam
file manifes untuk menunjukkan versi
OpenGL ES yang diperlukan.
OpenGL ES 1.0 tersedia sejak API level 4.
OpenGL ES 2.0 tersedia sejak API level 5.
OpenGL ES 3.0 tersedia sejak API level 18.
OpenGL ES 3.1 tersedia sejak API level 21.
OpenGL ES 3.2 tersedia sejak API level 24.
EGL
EGL menyediakan antarmuka platform native melalui header <EGL/egl.h>
dan <EGL/eglext.h>
untuk mengalokasikan serta mengelola konteks dan platform OpenGL ES.
EGL memungkinkan Anda melakukan operasi berikut dari kode native:
- Menampilkan daftar konfigurasi EGL yang didukung.
- Mengalokasikan dan merilis platform OpenGL ES.
- Membuat dan menghapus konteks OpenGL ES.
- Menukar atau membalik platform.
API level 24 menambahkan dukungan untuk
ekstensi
EGL_KHR_mutable_render_buffer
,
ANDROID_create_native_client_buffer
,
dan
ANDROID_front_buffer_auto_refresh
.
Tersedia sejak API level 9.
Library: libEGL
Panduan: Antarmuka Platform Native EGL
Vulkan
Vulkan adalah API lintas platform dengan overhead rendah untuk rendering grafis 3D berperforma
tinggi. Vulkan merupakan standar terbuka yang dikelola oleh Khronos Group. File header <vulkan/vulkan.h>
standar
berisi deklarasi yang diperlukan untuk melakukan panggilan rendering Vulkan dari
kode.
Untuk mengetahui contoh kode, lihat project VulkanSamples dan android-vulkan-tutorials LunarG di GitHub.
Library Vulkan ada di semua perangkat yang mendukung level API 24 atau yang lebih baru,
tetapi pada runtime, aplikasi harus memastikan bahwa dukungan hardware GPU yang diperlukan
tersedia. Perangkat yang tidak memiliki dukungan Vulkan akan menampilkan nol perangkat dari vkEnumeratePhysicalDevices
.
Tersedia sejak API level 24.
Library: libvulkan
Panduan: Panduan API grafis Vulkan
Bitmap
Library libjnigraphics
mengekspos API yang mengizinkan akses ke buffering piksel objek Bitmap
Java. Alur kerjanya adalah sebagai berikut:
Panggil
AndroidBitmap_getInfo()
untuk mengambil informasi tentang handle bitmap tertentu, misalnya lebar dan tinggi.Panggil
AndroidBitmap_lockPixels()
untuk mengunci buffering piksel dan mengambil pointer pada buffering tersebut. Dengan demikian, Anda dapat memastikan bahwa piksel tidak berubah hingga aplikasi memanggilAndroidBitmap_unlockPixels()
.Ubah buffering piksel sebagaimana mestinya untuk format piksel, lebar, dan karakteristik lainnya.
Panggil
AndroidBitmap_unlockPixels()
untuk membuka buffering.
Tersedia sejak API level 8.
Library: libjnigraphics
Referensi: Referensi API bitmap
API Sinkronisasi
Tersedia sejak API level 26.
Library: libsync
Referensi: Referensi API sinkronisasi
Kamera
API kamera native melakukan pengambilan dan pemrosesan foto yang lebih mendetail. Tidak seperti API camera2 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 LAMA).
Tersedia sejak API level 24.
Library: libcamera2ndk
Referensi: Referensi API kamera
Media
libmediandk
API Media menyediakan antarmuka native level rendah yang serupa dengan MediaExtractor
, MediaCodec
, dan API Java terkait lainnya.
Library: libmediandk
Referensi: Referensi API media
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>
berisi deklarasi yang diperlukan untuk menjalankan output multimedia dari sistem native Android.
Distribusi NDK untuk OpenMAX AL juga menyediakan ekstensi khusus Android.
Untuk mengetahui informasi tentang ekstensi ini, lihat komentar dalam <OMXAL/OpenMAXAL_Android.h>
.
Tersedia sejak API level 14.
Library: libOpenMAXAL
API aplikasi native Android
Untuk informasi selengkapnya, lihat dokumentasi Referensi API Android NDK.
API mencakup:
- Aset
- Koreografer
- Konfigurasi
- Input
- Looper
- Aktivitas Native
- Buffering Hardware Native
- Jendela Native
- Memori
- Jaringan
- Sensor
- Penyimpanan
- SurfaceTexture
Library: libandroid
Library: libnativewindow
untuk fungsi Jendela Native yang lebih baru
Referensi lengkap: Referensi API Android NDK
API Buffering Hardware
Ada dua API native yang memungkinkan Anda membuat pipeline sendiri untuk pengelolaan buffering proses silang.
Native hardware buffer API
<android/hardware_buffer.h>
memungkinkan Anda mengalokasikan buffer secara langsung guna membuat pipeline sendiri untuk pengelolaan buffer lintas proses.
Anda dapat mengalokasikan AHardwareBuffer
dan menggunakannya untuk mendapatkan jenis resource EGLClientBuffer
melalui ekstensi eglGetNativeClientBufferANDROID
. Anda dapat meneruskan buffer tersebut ke eglCreateImageKHR
untuk membuat jenis resource EGLImage
, yang dapat dikaitkan dengan tekstur melalui glEGLImageTargetTexture2DOES
di perangkat yang didukung. Buffering ini dapat berguna untuk membuat tekstur yang mungkin dibagikan lintas proses.
Native hardware buffer API (<android/hardware_buffer_jni.h>
) memungkinkan Anda
mendapatkan objek HardwareBuffer
,
yang merupakan Parcelable sehingga
dapat dipindahkan di antara dua proses berbeda. API ini memberi aplikasi Anda kemampuan yang serupa dengan SurfaceFlinger, seperti membuat antrean buffering antar-proses Anda sendiri tanpa mengakses API Android internal.
Audio
AAudio
AAudio adalah API audio native yang saat ini didukung. API ini menggantikan OpenSL ES, dan memberikan dukungan yang lebih baik untuk aplikasi audio berperforma tinggi yang memerlukan audio berlatensi rendah.
Tersedia sejak API level 26.
Library: libaaudio
Panduan: Panduan API AAudio
Referensi: Referensi API AAudio
OpenSL ES
OpenSL ES adalah API audio native lain yang juga didukung, tetapi harap lihat catatan dalam Panduan di bagian bawah.
Tersedia sejak API level 9. API level 14 menambahkan dukungan PCM.
Library: libOpenSLES
Panduan: Panduan OpenSL ES untuk Android
Neural Networks API
Neural Networks API (NNAPI) menyediakan akselerasi hardware bagi aplikasi untuk operasi machine learning di perangkat. API ini mendukung pembuatan, kompilasi, dan eksekusi model di perangkat. Aplikasi biasanya tidak menggunakan NNAPI secara langsung; tetapi API ini dimaksudkan untuk dipanggil oleh library, framework, dan alat machine learning yang memungkinkan developer melatih dan men-deploy modelnya di perangkat Android.
Tersedia sejak API level 27.
Library: libneuralnetworks
Panduan: Panduan Jaringan Neural
Referensi: Referensi Neural Networks API