Bu sayfada, NDK'ya dahil olan kitaplıklara genel bir bakış, NDK API referansının ilgili bölümlerine ait bağlantılar ve bu kitaplıkların bulunduğu kılavuzlar yer almaktadır.
Yerel API'leri kullanın
NDK'nın sağladığı kitaplık iki adımda kullanılabilir:
Derleme sistemine kitaplığa karşı bağlantı oluşturmasını söyleyin.
ndk-build kullanıyorsanız: Kitaplığı Android.mk dosyanızdaki
LOCAL_LDLIBS
öğesine ekleyin. Baştakilib
harfini çıkarıp bunun yerine-l
dendiğini unutmayın. Örneğin,libfoo
velibbar
hesapları için bağlantı oluşturmak üzere şöyle yazarsınız:makefile LOCAL_LDLIBS := -lfoo -lbar
LOCAL_LDLIBS
hakkında daha fazla bilgi için Android.mk dokümanları dokümanlarına bakın.CMake kullanıyorsanız: Studio'nun NDK API'leri ekleme belgelerindeki 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 bunların yerine dlopen()
ve dlsym()
aracılığıyla kullanmanız gerektiğini unutmayın.
Daha kolay bir yaklaşım için Daha yeni API'leri kullanma konusuna bakın.
Çekirdek C/C++
C kitaplığı
<stdlib.h>
ve <stdio.h>
gibi standart C11 kitaplık başlıkları her zamanki gibi kullanılabilir.
Android'de, Linux'un aksine, ayrı bir libpthread
veya librt
kitaplığı olmadığını unutmayın. Bu işlev doğrudan libc
içinde yer alır. Açıkça bağlantı verilmesine gerek yoktur.
Matematik işlevleri için ayrı bir libm
vardır (normal Unix geleneğinden sonra), ancak libc
gibi bu da derleme sistemleri tarafından otomatik olarak bağlanır.
<dlfcn.h>
ürününde dlopen(3) ve dlsym(3) gibi dinamik bağlayıcı işlevleri kullanılabilir ancak libdl
sitesine açıkça bağlantı oluşturmanız gerekir.
Kitaplık: libc
/ libm
/ libdl
C++ kitaplığı
C++17 desteği mevcuttur. C++ kitaplığı desteği hakkında daha fazla bilgi için C++ kitaplığı desteği sayfasına bakın.
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.
Kitaplık: liblog
Referans: Logging
İz
Yerel izleme API'si <android/trace.h>
, Java programlama dilinde android.os.Trace
sınıfının yerel eşdeğerini sağlar. Bu API, izleme etkinliklerini sistem izleme arabelleğine yazarak kodunuzdaki adlandırılmış iş birimlerini izleyebilmenizi sağlar. Daha sonra, Systrace aracını kullanarak izleme etkinliklerini toplayabilir ve analiz edebilirsiniz.
API düzeyi 23'ten itibaren kullanılabilir.
Kitaplık: libandroid
Kılavuz: Yerel İzleme
zlib sıkıştırma
<zlib.h>
ekleyerek ve libz
ile bağlantı oluşturarak Zlib sıkıştırma kitaplığını kullanabilirsiniz.
NDK her zaman en son zlib başlık dosyalarını sürüm sırasında içerir ve statik bağlantı için NDK'ya dahil edilen libz.a
her zaman aynı sürümdür. Ancak dinamik bağlantı için libz.so
, cihazdan gelir ve ilgili cihazda yayınlanan sürüm olabilir. Özellikle bu, kullandığı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ı hakkında varsayımlarda bulunulmaya karşı her zamanki uyarılar özellikle burada geçerlidir. Herkese açık API ile ilgili bir sorun olduğunu bilmiyoruz ancak özellikle struct düzeni zaman içinde değişmiştir ve muhtemelen değişmeye devam edecektir. Sonraki zlib sürümlerinde yeni API'nin API'den önceki OS sürümlerinde kesinlikle kullanılamayacağını unutmayın. libz.so
yerine her zaman statik libz.a
kullanarak bu sorunların tümünü (APK boyutunun büyütülmesi pahasına) önleyebilirsiniz.
API düzeyi 3'ten itibaren kullanılabilir (ancak yukarıdaki nota bakın).
Kitaplık: 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 üst bilgileri (<GLES2/gl2.h>
ve <GLES2/gl2ext.h>
), 3,0 üst bilgileri (<GLES3/gl3.h>
ve <GLES3/gl3ext.h>
), 3.1 üst bilgileri (<GLES3/gl31.h>
ve <GLES3/gl3ext.h>
) ve 3.2 başlıkları (<GLES3/gl32.h>
ve <GLES3/gl3ext.h>
), OpenGL ES için gereken bildirimleri içerir.
OpenGL ES 1.x'i kullanmak için yerel modülünüzü libGLESv1_CM
ürününe bağlayın.
OpenGL ES 2.0'ı kullanmak için yerel modülünüzü libGLESv2
ürününe bağlayın.
OpenGL ES 3.x'i kullanmak için yerel modülünüzü libGLESv3
ürününe bağlayın.
Tüm Android tabanlı cihazlar OpenGL ES 1.0 ve 2.0'ı destekler.
Yalnızca gerekli GPU'ya sahip Android cihazlar, OpenGL ES'nin sonraki sürümlerini tam olarak destekler ancak kitaplıklar, kullanıma sunuldukları API düzeyini destekleyen tüm cihazlarda mevcuttur. Kitaplıklara bağlantı oluşturmak güvenlidir ancak mevcut cihazın ihtiyaç duyduğu özellikleri destekleyip desteklemediğini belirlemek için uygulamanın OpenGL ES sürüm dizesini ve uzantı dizesini sorgulaması gerekir. Bu sorgunun nasıl gerçekleştirileceği hakkında bilgi için OpenGL spesifikasyonundaki glGetString()
açıklamasına bakın.
Ayrıca, ihtiyaç duyduğunuz 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 seviyesi 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 platform arayüzü sağlar.
EGL, yerel koddan aşağıdaki işlemleri gerçekleştirmenizi sağlar:
- Desteklenen EGL yapılandırmalarını listeleyin.
- OpenGL ES yüzeylerini ayırın ve serbest bırakın.
- OpenGL ES bağlamlarını oluşturun ve kaldırın.
- Yüzleri değiştirin veya çevirin.
API düzeyi 24'te EGL_KHR_mutable_render_buffer
, ANDROID_create_native_client_buffer
ve ANDROID_front_buffer_auto_refresh
uzantıları için destek eklendi.
API düzeyi 9'dan itibaren kullanılabilir.
Kitaplık: libEGL
Kılavuz: EGL Yerel Platform Arayüzü
Vulkan Dili
Vulkan, yüksek performanslı 3D grafik oluşturma için düşük ek yük gerektiren, platformlar arası bir API'dir. Vulkan, Khronos Grubu tarafından sürdürülen açık bir standarttır. Standart <vulkan/vulkan.h>
başlık dosyası, kodunuzdan Vulkan oluşturma çağrıları gerçekleştirmek için gereken bildirimleri içerir.
Kod örnekleri için GitHub'daki LunarG VulkanSamples ve android-vulkan-tutorials projelerini inceleyin.
Vulkan kitaplığı, API düzeyi 24 veya sonraki sürümleri destekleyen tüm cihazlarda mevcuttur ancak uygulamalar, çalışma zamanında gerekli GPU donanımı desteğinin mevcut olup olmadığını kontrol etmelidir. Vulkan desteği olmayan cihazlar, vkEnumeratePhysicalDevices
üzerinden sıfır cihaz döndürür.
API düzeyi 24'ten itibaren kullanılabilir.
Kitaplık: libvulkan
Kılavuz: Vulkangraphic API kılavuzu
Bit eşlemleri
libjnigraphics
kitaplığı, Java Bitmap
nesnelerinin piksel arabelleklerine erişim sağlayan API'yi sunar. İş akışı aşağıdaki gibidir:
Belirli bir bit eşlem tutma yeriyle ilgili genişlik ve yükseklik gibi bilgileri almak için
AndroidBitmap_getInfo()
komutunu çağırın.Piksel arabelleğini kilitlemek ve buna bir işaretçi almak için
AndroidBitmap_lockPixels()
yöntemini çağırın. Bu işlem, uygulamaAndroidBitmap_unlockPixels()
çağrısı yapana kadar piksellerin hareket etmemesini 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.
Kitaplık: libjnigraphics
Referans: Bitmap API referansı
Senkronizasyon API'sı
API düzeyi 26'dan itibaren kullanılabilir.
Kitaplık: libsync
Referans: Sync API referansı
Kamera
Yerel kamera API'leri ayrıntılı fotoğraf çekimi ve işlemesi gerçekleştirir. Java Camera2 API'den farklı olarak yerel kamera API'si, kullanımdan kaldırılan kamera HAL 1.0 uygulamalarını desteklemez (yani yerel kamera API'sindeki kullanılabilir kamera listesi, LEGACY donanım düzeyine sahip kamera cihazlarını listelemez).
API düzeyi 24'ten itibaren kullanılabilir.
Kitaplık: libcamera2ndk
Referans: Kamera API referansı
Medya
Libmediandk
Media API'leri; MediaExtractor
, MediaCodec
ve diğer ilgili Java API'lerine benzer alt düzey yerel arayüzler sağlar.
Kitaplık: libmediandk
Referans: Media API referansı
OpenMAX AL
Android yerel multimedya işleme, Khronos Group OpenMAX AL 1.0.1 API'sine dayanmaktadır.
Standart OpenMAX AL başlıkları <OMXAL/OpenMAXAL.h>
ve <OMXAL/OpenMAXAL_Platform.h>
, Android'in yerel tarafından multimedya çıkışını gerçekleştirmek için gerekli bildirimleri içerir.
OpenMAX AL'nin NDK dağıtımı, Android'e özgü uzantılar da sağlar.
Bu uzantılar hakkında bilgi için <OMXAL/OpenMAXAL_Android.h>
içindeki yorumlara bakın.
API düzeyi 14'ten itibaren kullanılabilir.
Kitaplık: 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
- Yapılandırma
- Giriş
- Looper
- Yerel Etkinlik
- Yerel Donanım Arabellekleri
- Yerel Pencere
- Bellek
- Ağ Oluşturma
- Sensör
- Depolama
- Yüzey Dokusu
Kitaplık: libandroid
Kitaplık: Daha yeni Yerel Pencere işlevi için libnativewindow
Tam referans: Android NDK API referansı
Donanım Arabelleği API'leri
Süreçler arası arabellek yönetimi için kendi ardışık düzenlerinizi oluşturmanıza olanak tanıyan iki yerel API vardır.
Yerel donanım arabellek API'si <android/hardware_buffer.h>
, çapraz işlemler arabellek yönetimi için kendi ardışık düzenlerinizi oluşturmak üzere doğrudan tampon paylaştırmanızı sağlar.
AHardwareBuffer
tahsis edebilir ve eglGetNativeClientBufferANDROID
uzantısı üzerinden bir EGLClientBuffer
kaynak türü elde etmek için bunu kullanabilirsiniz. Bu arabelleği eglCreateImageKHR
'e aktararak EGLImage
kaynak türü oluşturabilirsiniz. Bu kaynak türü daha sonra desteklenen cihazlarda glEGLImageTargetTexture2DOES
üzerinden bir dokuya bağlanabilir. Bu, işlemler arası paylaşılabilecek dokular oluşturmak için
faydalı olabilir.
Yerel donanım arabelleği JNI API'si (<android/hardware_buffer_jni.h>
), Parcelable olan ve iki farklı işlem arasında taşınabilen bir HardwareBuffer
nesnesi elde etmenizi sağlar. Bu, uygulamanıza SurfaceFlinger'a benzer yetenekler sağlar. Örneğin, dahili Android API'lerine erişmeden işlemler arasında kendi arabellek sıranızı oluşturabilirsiniz.
Ses
Sesli
AAudio şu anda desteklenen yerel ses API'sidir. OpenSL ES'nin yerini almıştır ve düşük gecikmeli ses gerektiren yüksek performanslı ses uygulamaları için daha iyi destek sunar.
API düzeyi 26'dan itibaren kullanılabilir.
Kitaplık: libaaudio
Kılavuz: AAudio API kılavuzu
Referans: AAudio API referansı
OpenSL İspanyolca
OpenSL ES, desteklenen başka bir yerel ses API'sidir ancak aşağıdaki Rehber'de yer alan nota bakın.
API düzeyi 9'dan itibaren kullanılabilir. API düzeyi 14'e PCM desteği eklendi.
Kitaplık: libOpenSLES
Rehber: Android için OpenSL ES kılavuzu
Sinir Ağları API'sı
Neural Networks API (NNAPI), cihaz üzerinde makine öğrenimi işlemleri için uygulamalara donanım hızlandırma sunar. API, cihaz üzerinde model oluşturma, derleme ve yürütme işlemlerini 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 kullanılması amaçlanmıştır.
API düzeyi 27'den itibaren kullanılabilir.
Kitaplık: libneuralnetworks
Kılavuz: Nöral Ağlar rehberi
Referans: Neural Networks API referansı