Android NDK Native API

Halaman ini memberikan ringkasan tentang library yang disertakan dalam NDK, dengan link ke bagian referensi API NDK yang relevan, dan ke panduan tempatnya berada.

Menggunakan API native

Terdapat dua langkah untuk menggunakan library yang disediakan oleh NDK:

  1. Beri tahu sistem build untuk menautkan ke library.

    • Jika menggunakan ndk-build: Tambahkan library ke LOCAL_LDLIBS dalam Android.mk. Perlu diketahui bahwa Anda perlu menghapus lib di awal dan menggunakan -l. Misalnya, untuk menautkan ke libfoo dan libbar, Anda perlu menulis seperti berikut: makefile LOCAL_LDLIBS := -lfoo -lbar

      Untuk mengetahui informasi selengkapnya tentang LOCAL_LDLIBS, lihat dokumentasi Dokumen Android.mk.

    • Jika menggunakan CMake: Ikuti petunjuk dalam dokumentasi Studio tentang Menambahkan API NDK.

  2. #include (sertakan) header yang sesuai dari kode Anda.

C/C++ Inti

Library C

Header library C11 standar seperti <stdlib.h> dan <stdio.h> tersedia seperti biasa.

Perlu diketahui 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 mengetahui informasi selengkapnya tentang dukungan library C++, lihat Dukungan Library C++.

Logging

<android/log.h> berisi API untuk pencatatan log ke logcat.

Tersedia sejak API level 3.

Library: liblog

Referensi: Logging

Perekaman 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 buffer perekaman aktivitas 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 menautkannya ke libz.

Tersedia sejak API level 3.

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>) memuat 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 saja yang dapat mendukung penuh OpenGL ES versi baru, tetapi library ini terdapat di semua perangkat yang mendukung level API yang memperkenalkannya untuk kali pertama. Anda boleh menautkan ke library ini, tetapi aplikasi harus meminta string versi dan string ekstensi OpenGL ES untuk menentukan apakah perangkat saat ini mendukung fitur yang dibutuhkannya. Untuk mengetahui 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 Anda perlukan.

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 permukaan OpenGL ES.

EGL memungkinkan Anda melakukan operasi berikut dari kode native:

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

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 Anda.

Untuk melihat contoh kodenya, lihat project vulkan-basic-samples dan android-vulkan-tutorials di GitHub.

Library Vulkan terdapat di semua perangkat yang mendukung API level 24 atau yang lebih baru, tetapi pada waktu proses, aplikasi harus memeriksa apakah 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 Vulkan

Bitmap

Library libjnigraphics mengekspos API yang mengizinkan akses ke buffer piksel objek Bitmap Java. Alur kerjanya adalah sebagai berikut:

  1. Panggil AndroidBitmap_getInfo() untuk mengambil informasi tentang pengendali bitmap tertentu, misalnya lebar dan tinggi.

  2. Panggil AndroidBitmap_lockPixels() untuk mengunci buffer piksel dan mengambil penunjuk pada buffer tersebut. Dengan demikian, Anda dapat memastikan bahwa piksel tidak berubah hingga aplikasi memanggil AndroidBitmap_unlockPixels().

  3. Ubah buffer piksel sebagaimana mestinya untuk format piksel, lebar, dan karakteristik lainnya.

  4. Panggil AndroidBitmap_unlockPixels() untuk membuka kunci buffer.

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 baik. 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 asli tingkat 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 API OpenMAX AL 1.0.1 dari Khronos Group.

Header OpenMAX AL standar <OMXAL/OpenMAXAL.h> dan <OMXAL/OpenMAXAL_Platform.h> memuat deklarasi yang diperlukan untuk menjalankan output multimedia dari sisi 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 mengetahui informasi selengkapnya, lihat dokumentasi Referensi API NDK.

API mencakup:

Library: libandroid

Library: libnativewindow untuk fungsi Jendela Native yang lebih baru

Referensi lengkap: Referensi API Android NDK

API Buffer Hardware

Tersedia dua API native yang memungkinkan Anda membuat pipeline sendiri untuk pengelolaan buffer lintas proses.

API buffer hardware native <android/hardware_buffer.h> memungkinkan Anda mengalokasikan buffer secara langsung untuk membuat pipeline sendiri bagi pengelolaan buffer lintas proses. Anda dapat mengalokasikan AHardwareBuffer dan menggunakannya untuk mendapatkan jenis resource EGLClientBuffer melalui ekstensi eglGetNativeClientBufferANDROID. Anda dapat meneruskan buffer tersebut pada eglCreateImageKHR untuk membuat jenis resource EGLImage, yang dapat dikaitkan dengan tekstur melalui glEGLImageTargetTexture2DOES di perangkat yang didukung. Buffer ini dapat berguna untuk membuat tekstur yang kemungkinan akan digunakan bersama lintas proses.

API JNI buffer hardware native (<android/hardware_buffer_jni.h>) memungkinkan Anda mendapatkan objek HardwareBuffer, yang merupakan Parcelable sehingga dapat dipindahkan di antara dua proses yang berbeda. API ini memberi aplikasi Anda kemampuan yang serupa dengan SurfaceFlinger, seperti membuat antrean buffer antarproses 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 latensi 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 silakan 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/Neural Networks API) 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; namun, API ini dimaksudkan untuk dipanggil oleh library, framework, dan alat machine learning yang memungkinkan developer melatih modelnya dan menerapkannya di perangkat Android.

Tersedia sejak API level 27.

Library: libneuralnetworks

Panduan: Panduan Jaringan Neural

Referensi: Referensi API Jaringan Neural