Yerel API'ler

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:

  1. 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ştaki lib karakterini kaldırıp bunun yerine -l dediğinizi unutmayın. Örneğin, libfoo ve libbar 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.

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

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

  2. 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, uygulama AndroidBitmap_unlockPixels() işlevini çağırana kadar piksellerin taşınmamasını sağlar.

  3. Piksel arabelleğini, piksel biçimine, genişliğine ve diğer özelliklerine uygun şekilde değiştirin.

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

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ı