Bu sayfada, NDK API referansının ilgili bölümlerinin ve mevcut oldukları durumlarda kılavuzların bağlantılarıyla birlikte NDK'ya dahil edilen kitaplıklara genel bir bakış sunulmaktadır.
Yerel API'leri kullanma
NDK'nın sağladığı bir kitaplığı kullanmanın iki adımı vardır:
Derleme sistemine kitaplığa 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 yerine-l
yazdığınızı unutmayın. Örneğin,libfoo
velibbar
ile bağlantı oluşturmak için şunları yazarsınız:makefile LOCAL_LDLIBS := -lfoo -lbar
LOCAL_LDLIBS
hakkında daha fazla bilgi için Android.mk dokümanlarına göz atın.CMake kullanıyorsanız: Studio'nun NDK API'leri ekleme dokümanlarında yer alan talimatları uygulayın.
#include
kodunuzdaki uygun üstbilgileri.
Uygulamanızın minSdkVersion
sürümünden daha yeni API'lerin varsayılan olarak çağrılamayacağını ve bunun yerine dlopen()
ve dlsym()
aracılığıyla kullanılacağını 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'in aksine ayrı libpthread
veya librt
kitaplıklarının olmadığını unutmayın. Bu işlev doğrudan libc
içine dahil edilir. Bu işleve açıkça bağlantı verilmesi gerekmez.
Matematik işlevleri için ayrı bir libm
vardır (her zamanki Unix geleneğine uygun olarak), ancak libc
gibi bu da derleme sistemleri tarafından otomatik olarak bağlanır.
<dlfcn.h>
'te dlopen(3) ve dlsym(3) gibi dinamik bağlayıcı işlevleri kullanılabilir ancak libdl
'a 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 başlıklı makaleyi inceleyin.
Günlük kaydı
<android/log.h>
, logcat'e günlük kaydı oluşturmaya yönelik API'leri içerir.
API düzeyi 3'ten beri kullanılabilir.
Kitaplık: liblog
Referans: Günlük kaydı
İz
Yerel izleme API'si <android/trace.h>
, Java programlama dilindeki android.os.Trace
sınıfının doğal eşdeğerini sağlar. Bu API, sistem izleme arabelleğine izleme etkinlikleri yazarak kodunuzdaki adlandırılmış iş birimlerini izlemenize olanak tanır. Ardından Systrace aracını kullanarak izleme etkinliklerini toplayabilir ve analiz edebilirsiniz.
API düzeyi 23'ten beri kullanılabilir.
Kitaplık: libandroid
Kılavuz: Yerel izleme
zlib sıkıştırması
<zlib.h>
dosyasını ekleyerek ve libz
dosyasına bağlayarak Zlib sıkıştırma kitaplığını kullanabilirsiniz.
NDK, her zaman sürümün yayınlandığı tarihteki en son zlib başlık dosyalarını 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 o cihazda yayınlanan sürüm olur. Özellikle, bu, derlediğiniz 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 bulunmaya karşı verilen normal uyarılar özellikle burada geçerlidir. Herkese açık API ile ilgili herhangi bir sorun olduğunun farkında değiliz 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 OS sürümlerinde kullanılamayacağını unutmayın. libz.so
yerine her zaman statik libz.a
kullanarak tüm bu sorunlardan (APK boyutunun artması pahasına) kaçınabilirsiniz.
API düzeyi 3'ten beri kullanılabilir (ancak yukarıdaki notu inceleyin).
Kitaplık: libz
Grafik
OpenGL ES 1.0 - 3.2
Standart OpenGL ES 1.x üstbilgileri (<GLES/gl.h>
ve <GLES/glext.h>
), 2.0 üstbilgileri (<GLES2/gl2.h>
ve <GLES2/gl2ext.h>
), 3.0 üstbilgileri (<GLES3/gl3.h>
ve <GLES3/gl3ext.h>
), 3.1 üstbilgileri (<GLES3/gl31.h>
ve <GLES3/gl3ext.h>
) ve 3.2 üstbilgileri (<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
'e bağlayın.
OpenGL ES 2.0'ı kullanmak için yerel modülünüzü libGLESv2
öğesine bağlayın.
OpenGL ES 3.x'i kullanmak için yerel modülünüzü libGLESv3
'e bağlayın.
Android tabanlı tüm cihazlar OpenGL ES 1.0 ve 2.0'ı destekler.
OpenGL ES'in 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ıklara bağlantı oluşturmak güvenlidir ancak 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, ihtiyacınız olan 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 beri 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>
üstbilgileri 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ı listeleyin.
- OpenGL ES yüzeyleri ayırma ve serbest bırakma.
- OpenGL ES bağlamları oluşturun ve yok edin.
- Yüzeyleri 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ına destek eklendi.
API düzeyi 9'dan beri kullanılabilir.
Kitaplık: libEGL
Kılavuz: EGL Native Platform Interface
Vulkan
Vulkan, yüksek performanslı 3D grafik oluşturma için düşük maliyetli, platformlar arası bir API'dir. Vulkan, Khronos Group tarafından yönetilen bir açık 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 projelerine bakın.
Vulkan kitaplığı, API düzeyi 24 veya sonraki sürümleri destekleyen tüm cihazlarda bulunur ancak uygulamaların çalışma zamanında gerekli GPU donanım desteğinin mevcut olup olmadığını kontrol etmesi gerekir. Vulkan desteği olmayan cihazlar, vkEnumeratePhysicalDevices
kaynağından sıfır cihaz döndürür.
API düzeyi 24'ten beri kullanılabilir.
Kitaplık: libvulkan
Kılavuz: Vulkan grafik API kılavuzu
Bit eşlemeleri
libjnigraphics
kitaplığı, Java Bitmap
nesnelerinin piksel arabelleklerine erişime olanak tanıyan API'yi gösterir. İş akışı aşağıdaki gibidir:
Belirli bir bitmap tutamacıyla ilgili genişlik ve yükseklik gibi bilgileri almak için
AndroidBitmap_getInfo()
işlevini çağırın.Piksel arabelleğini kilitlemek ve ona işaretçi almak için
AndroidBitmap_lockPixels()
işlevini çağırın. Bu sayede, uygulamaAndroidBitmap_unlockPixels()
çağrısı yapana kadar pikseller hareket etmez.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()
'ü arayın.
API düzeyi 8'den beri kullanılabilir.
Kitaplık: libjnigraphics
Referans: Bitmap API referansı
Sync API
API düzeyi 26'dan itibaren kullanılabilir.
Kitaplık: libsync
Referans: Sync API referansı
Kamera
Yerleşik kamera API'leri, ayrıntılı fotoğraf çekimi ve işleme gerçekleştirir. Java camera2 API'sinden farklı olarak yerel kamera API'si, desteği sonlandırılmış 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 beri kullanılabilir.
Kitaplık: libcamera2ndk
Referans: Kamera API'si referansı
Medya
libmediandk
Media API'leri, MediaExtractor
, MediaCodec
ve ilgili diğer Java API'lerine benzer düşük düzey yerel arayüzler sağlar.
Kitaplık: libmediandk
Referans: Media API referansı
OpenMAX AL
Android doğal multimedya işleme, Khronos Group OpenMAX AL 1.0.1 API'yi temel alı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 bildirimleri içerir.
OpenMAX AL'ın NDK dağıtımı, Android'e özel uzantılar da sağlar.
Bu uzantılar hakkında bilgi edinmek için <OMXAL/OpenMAXAL_Android.h>
adresindeki yorumlara bakın.
API düzeyi 14'ten beri 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
- SurfaceTexture
Kitaplık: 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şiminin düşük düzeyde uygulanmasıdır. Mümkünse üst düzey bileşenleri tercih edin. Ancak bu kitaplık, ileri düzey kullanım alanları için kullanılabilir.
Kitaplık: libbinder_ndk
Referans: Binder
Donanım Arabelleği API'leri
İşlemler arası arabellek yönetimi için kendi ardışık düzenlerinizi oluşturmanıza olanak tanıyan iki doğal API vardır.
Yerleşik donanım arabellek 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ü elde etmek için kullanabilirsiniz. Bu arabelleği EGLImage
kaynak türü oluşturmak için eglCreateImageKHR
'a iletebilirsiniz. Bu kaynak türü, desteklenen cihazlarda glEGLImageTargetTexture2DOES
aracılığıyla bir dokuya bağlanabilir. Bu, işlemler arasında paylaşılabilen dokular oluşturmak için yararlı olabilir.
Yerel donanım arabelleği JNI API'si (<android/hardware_buffer_jni.h>
), Parcelable olan ve dolayısıyla iki farklı süreç arasında taşınabilen bir HardwareBuffer
nesnesi elde etmenize olanak tanır. Bu sayede uygulamanız, dahili Android API'lerine erişmeden işlemler arasında kendi arabellek kuyruğunuzu oluşturma gibi SurfaceFlinger'a benzer özelliklere sahip olur.
Ses
AAudio
AAudio, şu anda desteklenen yerel ses API'sidir. OpenSL ES'in yerini alan bu API, 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 ES
OpenSL ES, desteklenen başka bir yerel ses API'sidir ancak aşağıdaki kılavuzda yer alan notu inceleyin.
API düzeyi 9'dan beri kullanılabilir. API düzeyi 14'te PCM desteği eklendi.
Kitaplık: libOpenSLES
Kılavuz: Android için OpenSL ES kılavuzu
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şturmayı, derlemeyi ve yürütmeyi destekler. Uygulamalar genellikle NNAPI'yi doğrudan kullanmaz. Bunun yerine, API'nin geliştiricilerin modellerini eğitmesine ve Android cihazlara dağıtmasına olanak tanıyan makine öğrenimi kitaplıkları, çerçeveleri ve araçları tarafından çağrılması amaçlanmıştır.
API düzeyi 27'den beri kullanılabilir.
Kitaplık: libneuralnetworks
Kılavuz: Nöral Ağlar kılavuzu
Referans: Nöral Ağlar API referansı