Yerel API'ler

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:

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

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

  1. Belirli bir bitmap tutamacı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 ona işaretçi almak için AndroidBitmap_lockPixels() işlevini çağırın. Bu sayede, uygulama AndroidBitmap_unlockPixels() çağrısı yapana kadar pikseller hareket etmez.

  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()'ü 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:

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ı