API Native

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:

  1. 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 menghapus lib di awal dan menggunakan -l. Misalnya, untuk menautkan ke libfoo dan libbar, 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.

  2. #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:

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

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

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

  4. 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:

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