Yerel API'ler

Bu sayfada NDK'ya dahil olan kitaplıklara genel bir bakış, NDK API referansının ilgili bölümlerinin bağlantıları ve bunların nerede bulunduğu kılavuzlar sunulmaktadır.

Yerel API'leri kullanma

NDK'nın sağladığı kitaplığı iki adımda kullanabilirsiniz:

  1. Derleme sistemine kitaplığa karşı bağlantı vermesini söyleyin.

    • ndk-build kullanıyorsanız: Kitaplığı, Android.mk dosyanızdaki LOCAL_LDLIBS klasörüne ekleyin. Baştaki lib öğesini çıkarıp -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 dokümanları dokümanlarına bakın.

    • CMake kullanıyorsanız: Studio'nun NDK API'leri ekleme belgelerindeki talimatları uygulayın.

  2. #include.

Ç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ı libpthread veya librt kitaplığı olmadığını unutmayın. Bu işlev, doğrudan libc içinde yer alır ve bunun açıkça bağlanması gerekmez.

Matematik işlevleri için ayrı bir libm vardır (normal Unix geleneğine göre) 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şlevi kullanılabilir ancak libdl ile 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 giriş yapmak 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 dilindeki 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ış çalışma birimlerini izleyebilmenizi sağlar. Daha sonra Systrace aracını kullanarak izleme etkinliklerini toplayıp analiz edebilirsiniz.

API düzeyi 23'ten itibaren kullanılabilir.

Kitaplık: libandroid

Kılavuz: Yerel İzleme

zlib sıkıştırma

<zlib.h> kodunu ekleyerek ve libz ile bağlantı oluşturarak Zlib sıkıştırma kitaplığını kullanabilirsiniz.

NDK, yayın sırasında her zaman 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 bu cihazda yayınlanmış olan sürüm olabilir. Özellikle bu durum, oluşturduğunuz başlıkların cihazdaki zlib sürümüyle eşleşmediği anlamına gelir. Bu nedenle, özellikle uygulama ayrıntılarıyla ilgili varsayımda bulunmaya karşı verilen olağan uyarılar burada geçerlidir. Genel API ile ilgili herhangi bir sorundan haberdar değiliz ancak özellikle struct düzeni zaman içinde değişti ve muhtemelen değişmeye devam edecek. Sonraki zlib sürümlerindeki yeni API'nin, API'den önceki OS sürümlerinde elbette kullanılamayacağını unutmayın. Her zaman libz.so yerine statik libz.a kullanarak tüm bu sorunlardan kaçınmak (APK boyutunun artması pahasına) mümkündür.

API düzeyi 3'ten itibaren kullanılabilir (ancak yukarıdaki nota bakın).

Kitaplık: libz

Görseller

OpenGL ES 1.0 - 3.2

Standart OpenGL ES 1.x üstbilgileri (<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 üst bilgileri (<GLES3/gl32.h> ve <GLES3/gl3ext.h>), OpenGL ES için gerekli bildirimleri içerir.

OpenGL ES 1.x kullanmak için yerel modülünüzü libGLESv1_CM hizmetine bağlayın.

OpenGL ES 2.0 kullanmak için yerel modülünüzü libGLESv2 hizmetine bağlayın.

OpenGL ES 3.x kullanmak için yerel modülünüzü libGLESv3 hizmetine 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 bulunur. Kitaplıklarla bağlantı kurmak güvenlidir, ancak mevcut cihazın ihtiyaç duyduğu özellikleri destekleyip desteklemediğini belirlemek için bir 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, 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 itibaren kullanılabilmektedir.

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.

EG

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ü sunar.

EGL, yerel koddan şu işlemleri gerçekleştirmenize olanak tanır:

  • 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 silin.
  • Yüzeyleri değiştirin veya çevirin.

API düzeyi 24 sayesinde 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

Vulkan, yüksek performanslı 3D grafik oluşturma için kullanılan düşük genel giderli, platformlar arası bir API'dir. Vulkan, Khronos Grubu tarafından yönetilen bir açık standarttır. Standart <vulkan/vulkan.h> üst bilgi 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 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'ten 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şlemler

libjnigraphics kitaplığı, Java Bitmap nesnelerinin piksel arabelleklerine erişime izin veren API'yi gösterir. İş akışı aşağıdaki gibidir:

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

  2. Piksel arabelleğini kilitlemek ve buna işaretçi almak için AndroidBitmap_lockPixels() yöntemini çağırın. Bunu yapmak, uygulama AndroidBitmap_unlockPixels() çağırana 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'si

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 çekme ve işleme işlemleri gerçekleştirir. Java Camera2 API'sinin aksine yerel kamera API'si, kullanımdan kaldırılan kamera HAL 1.0 uygulamalarını desteklemez (yani yerel kamera API'sindeki mevcut kamera listesinde ESKİ donanım seviyesindeki kamera cihazları listelenmez).

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'sini temel alır.

Standart OpenMAX AL başlıkları <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'nin NDK dağıtımı da Android'e özel uzantılar sağlar. Bu uzantılar hakkında bilgi edinmek için <OMXAL/OpenMAXAL_Android.h> sayfasındaki 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şlevleri için libnativewindow

Tam referans: Android NDK API referansı

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 yerel API vardır.

Yerel 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 doğrudan arabellek tahsis etmenize olanak tanır. AHardwareBuffer tahsis edebilir ve eglGetNativeClientBufferANDROID uzantısı üzerinden EGLClientBuffer kaynak türü elde etmek için kullanabilirsiniz. Bu arabelleği eglCreateImageKHR'e ileterek EGLImage kaynak türü oluşturabilirsiniz. Kaynak türü, desteklenen cihazlarda glEGLImageTargetTexture2DOES aracılığıyla bir dokuya bağlanabilir. Bu, çapraz işlemlerde paylaşılabilecek dokular oluşturmak için yararlı olabilir.

Yerel donanım arabelleği JNI API (<android/hardware_buffer_jni.h>), Parcelable olan ve böylece iki farklı işlem arasında aktarılabilen bir HardwareBuffer nesnesi elde etmenizi sağlar. Bu, uygulamanıza dahili Android API'lerine erişmeden işlemler arasında kendi arabellek sıranızı oluşturma gibi SurfaceFlinger için benzer beceriler sağlar.

Ses

Ses

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 sağlar.

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'deki 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), uygulamalara cihaz üzerinde makine öğrenimi işlemleri için donanım hızlandırma sunar. 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ğitip Android cihazlarda dağıtmasını sağlayan makine öğrenimi kitaplıkları, çerçeveler ve araçlar tarafından çağrılması amaçlanmıştır.

API düzeyi 27'den itibaren kullanılabilir.

Kitaplık: libneuralnetworks

Kılavuz: Nöral Ağlar kılavuzu

Referans: Neural Networks API referansı