Bu sayfada, NDK'da bulunan kitaplıklara genel bir bakış sunulmakta ve NDK API referansının ilgili bölümlerine ve mevcut olan kılavuzlara bağlantılar verilmektedir.
Yerel API'leri kullanma
NDK'nın sağladığı bir kitaplığı kullanmak için iki adım vardır:
Derleme sistemine kitaplığa karşı bağlantı oluşturmasını söyleyin.
ndk-build kullanıyorsanız: Kitaplığı Android.mk dosyanızdaki
LOCAL_LDLIBS
bölümüne ekleyin. Baştakilib
karakterini kaldırıp bunun yerine-l
dediğinizi unutmayın. Örneğin,libfoo
velibbar
ile bağlantı oluşturmak için şunu yazarsınız:makefile LOCAL_LDLIBS := -lfoo -lbar
LOCAL_LDLIBS
hakkında daha fazla bilgi için Android.mk belgeleri dokümanlarına bakın.CMake kullanıyorsanız Studio'nun NDK API'lerini ekleme dokümanındaki talimatları uygulayın.
Kodunuzdaki uygun başlıkları
#include
.
Uygulamanızın minSdkVersion
sürümünden daha yeni olan API'lerin varsayılan olarak çağrılamayacağını ve bunun yerine bunları dlopen()
ve dlsym()
üzerinden kullanmanız gerektiğini unutmayın.
Daha kolay bir yaklaşım için Daha yeni API'leri kullanma başlıklı makaleyi inceleyin.
Temel C/C++
C kitaplığı
<stdlib.h>
ve <stdio.h>
gibi standart C11 kitaplık üstbilgileri her zamanki gibi kullanılabilir.
Android'de Linux'un aksine ayrı libpthread
veya librt
kitaplıkları olmadığını unutmayın. Bu işlev, açıkça bağlanması gerekmeyen libc
'ya doğrudan dahil edilir.
Matematik işlevleri için ayrı bir libm
vardır (normal Unix geleneğine uygun olarak). Ancak libc
gibi bu da derleme sistemleri tarafından otomatik olarak bağlanır.
<dlfcn.h>
'daki dlopen(3) ve dlsym(3) gibi dinamik bağlayıcı işlevleri kullanılabilir ancak libdl
'ya karşı açıkça bağlantı oluşturmanız gerekir.
Kitaplık: libc
/ libm
/ libdl
C++ kitaplığı
C++17 desteği mevcuttur. C++ kitaplık desteği hakkında daha fazla bilgi için C++ kitaplık desteği başlıklı makaleyi inceleyin.
Günlük kaydı
<android/log.h>
, logcat'e günlük kaydı için API'ler içerir.
API düzeyi 3'ten itibaren kullanılabilir.
Kütüphane: liblog
Referans: Günlüğe kaydetme
İz
Yerel izleme API'si <android/trace.h>
, Java programlama dilindeki android.os.Trace
sınıfının yerel eşdeğerini sağlar. Bu API, sistem izleme arabelleğine izleme etkinlikleri yazarak kodunuzdaki adlandırılmış iş birimlerini izlemenize olanak tanır. Daha sonra, Systrace aracını kullanarak izleme etkinliklerini toplayıp analiz edebilirsiniz.
API düzeyi 23'ten itibaren kullanılabilir.
Kütüphane: libandroid
Rehber: Yerel İzleme
zlib sıkıştırması
<zlib.h>
ekleyip libz
ile bağlantı oluşturarak Zlib sıkıştırma kitaplığını kullanabilirsiniz.
NDK, yayınlandığı sırada her zaman en son zlib başlık dosyalarını içerir.
NDK'da statik bağlantı için bulunan libz.a
her zaman aynı sürümdür ancak dinamik bağlantı için kullanılan libz.so
cihazdan gelir ve cihazda yayınlanan sürüm ne olursa olsun o sürüm olur. Bu özellikle, derleme yaptığınız başlıkların cihazdaki zlib sürümüyle eşleşmediği anlamına gelir. Bu nedenle, uygulama ayrıntılarıyla ilgili varsayımlarda bulunmaya karşı verilen normal uyarılar burada özellikle geçerlidir. Herkese açık API ile ilgili herhangi bir sorun olduğunu bilmiyoruz ancak özellikle yapı düzeni zaman içinde değişti ve muhtemelen değişmeye devam edecek. Daha sonraki zlib sürümlerindeki yeni API'nin, API'den önceki işletim sistemi sürümlerinde kullanılamayacağını unutmayın. libz.so
yerine her zaman statik libz.a
kullanılarak (APK boyutunun artması pahasına) tüm bu sorunlardan kaçınmak mümkündür.
API düzeyi 3'ten itibaren kullanılabilir (ancak yukarıdaki nota bakın).
Kütüphane: libz
Grafik
OpenGL ES 1.0 - 3.2
Standart OpenGL ES 1.x başlıkları (<GLES/gl.h>
ve <GLES/glext.h>
), 2.0 başlıkları (<GLES2/gl2.h>
ve <GLES2/gl2ext.h>
), 3.0 başlıkları (<GLES3/gl3.h>
ve <GLES3/gl3ext.h>
), 3.1 başlıkları (<GLES3/gl31.h>
ve <GLES3/gl3ext.h>
) ve 3.2 başlıkları (<GLES3/gl32.h>
ve <GLES3/gl3ext.h>
), OpenGL ES için gerekli bildirimleri içerir.
OpenGL ES 1.x'i kullanmak için yerel modülünüzü libGLESv1_CM
'ya bağlayın.
OpenGL ES 2.0'ı kullanmak için yerel modülünüzü libGLESv2
'ya bağlayın.
OpenGL ES 3.x'i kullanmak için yerel modülünüzü libGLESv3
'ya bağlayın.
Android tabanlı tüm cihazlar OpenGL ES 1.0 ve 2.0'ı destekler.
OpenGL ES'nin sonraki sürümleri yalnızca gerekli GPU'ya sahip Android cihazlarda tam olarak desteklenir ancak kitaplıklar, kullanıma sunuldukları API düzeyini destekleyen tüm cihazlarda bulunur. Kitaplıklarla bağlantı oluşturmak güvenlidir ancak bir uygulamanın, mevcut cihazın ihtiyaç duyduğu özellikleri destekleyip desteklemediğini belirlemek için OpenGL ES sürüm dizesini ve uzantı dizesini sorgulaması gerekir. Bu sorgunun nasıl yapılacağı hakkında bilgi edinmek için OpenGL spesifikasyonundaki glGetString()
açıklamasına bakın.
Ayrıca, gerekli OpenGL ES sürümünü belirtmek için manifest dosyanıza bir
<uses-feature>
etiketi eklemeniz gerekir.
OpenGL ES 1.0, API düzeyi 4'ten itibaren kullanılabilir.
OpenGL ES 2.0, API düzeyi 5'ten itibaren kullanılabilir.
OpenGL ES 3.0, API düzeyi 18'den itibaren kullanılabilir.
OpenGL ES 3.1, API düzeyi 21'den itibaren kullanılabilir.
OpenGL ES 3.2, API düzeyi 24'ten itibaren kullanılabilir.
EGL
EGL, OpenGL ES bağlamlarını ve yüzeylerini ayırmak ve yönetmek için <EGL/egl.h>
ve <EGL/eglext.h>
başlıkları aracılığıyla yerel bir platform arayüzü sağlar.
EGL, yerel koddan aşağıdaki işlemleri gerçekleştirmenize olanak tanır:
- Desteklenen EGL yapılandırmalarını listeler.
- OpenGL ES yüzeyleri ayırma ve boşaltma.
- OpenGL ES bağlamları oluşturma ve yok etme.
- Yüzeyleri değiştirin veya çevirin.
API düzeyi 24, EGL_KHR_mutable_render_buffer
, ANDROID_create_native_client_buffer
ve ANDROID_front_buffer_auto_refresh
uzantıları için destek ekledi.
API düzeyi 9'dan beri kullanılabilir.
Kütüphane: libEGL
Kılavuz: EGL Native Platform Interface
Vulkan
Vulkan, yüksek performanslı 3D grafik oluşturma için düşük ek yüke sahip, platformlar arası bir API'dir. Vulkan, Khronos Group tarafından desteklenen bir açık standarttır. Standart <vulkan/vulkan.h>
başlık dosyası, kodunuzdan Vulkan oluşturma çağrıları yapmak için gereken bildirimleri içerir.
Kod örnekleri için GitHub'daki LunarG VulkanSamples ve android-vulkan-tutorials projelerine bakın.
Vulkan kitaplığı, API düzeyi 24 veya sonraki sürümleri destekleyen tüm cihazlarda bulunur ancak uygulamaların, gerekli GPU donanım desteğinin mevcut olup olmadığını çalışma zamanında kontrol etmesi gerekir. Vulkan desteği olmayan cihazlar, vkEnumeratePhysicalDevices
'dan sıfır cihaz döndürür.
API düzeyi 24'ten itibaren kullanılabilir.
Kütüphane: libvulkan
Rehber: Vulkan grafik API'si rehberi
Bit eşlemler
libjnigraphics
kitaplığı, Java Bitmap
nesnelerinin piksel arabelleklerine erişime izin veren API'yi kullanıma sunar. İş akışı şu şekildedir:
Belirli bir bit eşlem tutacıyla ilgili genişlik ve yükseklik gibi bilgileri almak için
AndroidBitmap_getInfo()
işlevini çağırın.Piksel arabelleğini kilitlemek ve arabelleğe yönelik bir işaretçi almak için
AndroidBitmap_lockPixels()
işlevini çağırın. Bu işlem, uygulamaAndroidBitmap_unlockPixels()
işlevini çağırana kadar piksellerin taşınmamasını sağlar.Piksel arabelleğini, piksel biçimine, genişliğine ve diğer özelliklerine uygun şekilde değiştirin.
Arabelleğin kilidini açmak için
AndroidBitmap_unlockPixels()
numaralı telefonu arayın.
API düzeyi 8'den itibaren kullanılabilir.
Kütüphane: libjnigraphics
Referans: Bitmap API referansı
Sync API
API düzeyi 26'dan itibaren kullanılabilir.
Kütüphane: libsync
Referans: Sync API referansı
Kamera
Yerel kamera API'leri, ayrıntılı fotoğraf çekme ve işleme işlemleri gerçekleştirir. Java camera2 API'nin aksine, yerel kamera API'si kullanımdan kaldırılan camera HAL 1.0 uygulamalarını desteklemez (yani yerel kamera API'sindeki mevcut kamera listesinde, LEGACY donanım düzeyine sahip kamera cihazları listelenmez).
API düzeyi 24'ten itibaren kullanılabilir.
Kütüphane: libcamera2ndk
Referans: Camera API referansı
Medya
libmediandk
Medya API'leri, MediaExtractor
, MediaCodec
ve diğer ilgili Java API'lerine benzer düşük düzeyli yerel arayüzler sağlar.
Kütüphane: libmediandk
Referans: Media API referansı
OpenMAX AL
Android'de yerel multimedya işleme, Khronos Group OpenMAX AL 1.0.1 API'ye dayanır.
Standart OpenMAX AL üstbilgileri <OMXAL/OpenMAXAL.h>
ve <OMXAL/OpenMAXAL_Platform.h>
, Android'in yerel tarafında multimedya çıkışı gerçekleştirmek için gerekli olan bildirimleri içerir.
OpenMAX AL'nin NDK dağıtımı, Android'e özgü uzantılar da sağlar.
Bu uzantılar hakkında bilgi edinmek için <OMXAL/OpenMAXAL_Android.h>
bölümündeki yorumlara bakın.
API düzeyi 14'ten itibaren kullanılabilir.
Kütüphane: libOpenMAXAL
Android yerel uygulama API'leri
Daha fazla bilgi için Android NDK API referansı belgelerine bakın.
API'ler şunları içerir:
- Öğe
- Koreograf (Choreographer)
- Yapılandırma
- Giriş
- Looper
- Native Activity
- Yerel Donanım Arabellekleri
- Yerel Pencere
- Bellek
- Ağ Oluşturma
- Sensör
- Depolama
- SurfaceTexture
Kütüphane: libandroid
Kitaplık: Daha yeni yerel pencere işlevleri için libnativewindow
Tam referans: Android NDK API referansı
Binder API'leri
Binder API'leri, işlemler arasında iletişim kanalları oluşturmanıza olanak tanır. Bu, Android işlemler arası iletişimin düşük düzeyli uygulamasıdır. Mümkün olduğunda daha üst düzey bileşenleri tercih edin. Ancak bu kitaplık, gelişmiş kullanım alanları için kullanılabilir.
Kütüphane: libbinder_ndk
Referans: Binder
Donanım arabelleği API'leri
İşlemler arası arabellek yönetimi için kendi işlem hatlarınızı oluşturmanıza olanak tanıyan iki yerel API vardır.
Yerel donanım arabelleği API'si
<android/hardware_buffer.h>
işlemler arası arabellek yönetimi için kendi ardışık düzenlerinizi oluşturmak üzere arabellekleri doğrudan ayırmanıza olanak tanır.
AHardwareBuffer
ayırabilir ve eglGetNativeClientBufferANDROID
uzantısı aracılığıyla EGLClientBuffer
kaynak türünü elde etmek için kullanabilirsiniz. Desteklenen cihazlarda glEGLImageTargetTexture2DOES
aracılığıyla dokuya bağlanabilecek bir EGLImage
kaynak türü oluşturmak için bu arabelleği eglCreateImageKHR
işlevine iletebilirsiniz. Bu, işlemler arası paylaşılabilecek dokular oluşturmak için yararlı olabilir.
Yerel donanım arabelleği JNI API'si (<android/hardware_buffer_jni.h>
), HardwareBuffer
nesnesi almanıza olanak tanır. Bu nesne Parcelable olduğundan iki farklı işlem arasında taşınabilir. Bu, uygulamanıza SurfaceFlinger'a benzer özellikler kazandırır. Örneğin, dahili Android API'lerine erişmeden işlemler arasında kendi arabellek sıranızı oluşturabilirsiniz.
Ses
AAudio
AAudio, şu anda desteklenen yerel ses API'sidir. OpenSL ES'nin yerini alan AAudio, düşük gecikmeli ses gerektiren yüksek performanslı ses uygulamaları için daha iyi destek sağlar.
API düzeyi 26'dan itibaren kullanılabilir.
Kütüphane: libaaudio
Rehber: AAudio API rehberi
Referans: AAudio API referansı
OpenSL ES
OpenSL ES de desteklenen başka bir yerel ses API'sidir ancak aşağıdaki Kılavuz'daki nota bakın.
API düzeyi 9'dan beri kullanılabilir. API düzeyi 14'te PCM desteği eklendi.
Kütüphane: libOpenSLES
Rehber: Android için OpenSL ES rehberi
Neural Networks API
Neural Networks API (NNAPI), cihaz üzerinde makine öğrenimi işlemleri için uygulamalara donanım hızlandırma sağlar. API, cihaz üzerinde model oluşturma, derleme ve yürütmeyi destekler. Uygulamalar genellikle NNAPI'yi doğrudan kullanmaz. Bunun yerine, API'nin geliştiricilerin modellerini eğitmesine ve Android cihazlarda dağıtmasına olanak tanıyan makine öğrenimi kitaplıkları, çerçeveler ve araçlar tarafından çağrılması amaçlanır.
API düzeyi 27'den itibaren kullanılabilir.
Kütüphane: libneuralnetworks
Rehber: Nöral Ağlar Rehberi
Referans: Neural Networks API referansı