Yerel API'ler

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:

  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 öğesine ekleyin. Baştaki lib harfini çıkarıp bunun yerine -l dendiğini unutmayın. Örneğin, libfoo ve libbar 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.

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

  1. Belirli bir bit eşlem tutma yeriyle ilgili genişlik ve yükseklik gibi bilgileri almak için AndroidBitmap_getInfo() komutunu çağırın.

  2. Piksel arabelleğini kilitlemek ve buna bir işaretçi almak için AndroidBitmap_lockPixels() yöntemini çağırın. Bu işlem, uygulama AndroidBitmap_unlockPixels() çağrısı yapana kadar piksellerin hareket etmemesini 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.

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:

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ı