واجهات برمجة التطبيقات الأصلية

تقدّم هذه الصفحة نظرة عامة على المكتبات المضمّنة في NDK، مع روابط تؤدي إلى الأجزاء ذات الصلة من مرجع NDK API، فضلاً عن الأدلة التي تحدّد أماكن وجودها.

استخدام واجهات برمجة التطبيقات الأصلية

هناك خطوتان لاستخدام المكتبة التي يوفرها NDK:

  1. اطلب من نظام الإصدار الربط بالمكتبة.

    • إذا كنت تستخدم ndk-build: أضِف المكتبة إلى LOCAL_LDLIBS في Android.mk. يُرجى ملاحظة أنك تزيل البادئة lib وتقول -l بدلاً منها. على سبيل المثال، للربط بـ libfoo وlibbar، ستكتب: makefile LOCAL_LDLIBS := -lfoo -lbar

      لمزيد من المعلومات حول LOCAL_LDLIBS، يمكنك الاطّلاع على مستندات مستندات Android.mk.

    • في حال استخدام أداة CMake: اتّبِع التعليمات الواردة في مستندات إضافة واجهات NDK APIs في "استوديو YouTube".

  2. #include العناوين المناسبة من الرمز الخاص بك.

C/C++ الأساسي

مكتبة C

تتوفّر عناوين مكتبة C11 العادية، مثل <stdlib.h> و<stdio.h>، كالمعتاد.

يُرجى العِلم أنّه على عكس نظام التشغيل Android، لا تتوفّر مكتبات libpthread أو librt منفصلة. يتم تضمين هذه الوظيفة مباشرةً في libc، ولا يجب الربط بها صراحةً.

هناك سمة libm منفصلة للدوال الرياضية (وفقًا لتقاليد Unix المعتادة)، ولكن مثل libc، يتم الربط تلقائيًا من خلال أنظمة الإنشاء.

تتوفّر وظيفة الرابط الديناميكي في <dlfcn.h> مثل dlopen(3) وdlsym(3)، ولكن يجب الربط صراحةً في libdl.

المكتبة: libc / libm / libdl

مكتبة C++

يتوفر دعم C++17. للحصول على مزيد من المعلومات حول دعم مكتبة C++ ، يُرجى مراجعة دعم مكتبة C++.

التسجيل

يحتوي <android/log.h> على واجهات برمجة تطبيقات لتسجيل الدخول إلى Logcat.

متوفّرة منذ المستوى 3 من واجهة برمجة التطبيقات.

المكتبة: liblog

المرجع: التسجيل

تتبُّع

توفّر واجهة برمجة التطبيقات <android/trace.h> للتتبّع الأصلي مكافئًا أصليًا للفئة android.os.Trace في لغة برمجة Java. تتيح لك واجهة برمجة التطبيقات هذه تتبُّع وحدات العمل المُسمّاة في الرمز البرمجي عن طريق كتابة أحداث التتبُّع في المخزن المؤقت لتتبُّع النظام. ويمكنك بعد ذلك جمع أحداث التتبُّع وتحليلها باستخدام أداة Systemrace.

متوفّرة منذ المستوى 23 من واجهة برمجة التطبيقات

المكتبة: libandroid

الدليل: تتبُّع الإعلانات المدمجة مع المحتوى

ضغط zlib

يمكنك استخدام مكتبة ضغط Zlib من خلال تضمين <zlib.h> والربط بـ libz.

يتضمّن NDK دائمًا أحدث ملفات عناوين zlib في وقت الإطلاق، ويكون libz.a المضمّن في NDK للروابط الثابتة هو دائمًا النسخة نفسها، إلا أنّ libz.so للربط الديناميكي يأتي من الجهاز، وأي إصدار تم إطلاقه على هذا الجهاز. ويعني هذا، على وجه الخصوص، أنّ العناوين التي تم إنشاؤها بناءً عليها لا تتطابق مع إصدار zlib على الجهاز، لذا تُعدّ التحذيرات المعتادة بشأن تفاصيل التنفيذ صالحة هنا بشكل خاص. لسنا على دراية بأي مشاكل في واجهة برمجة التطبيقات العامة، لكن تخطيط البنية على وجه الخصوص قد تغيّر بمرور الوقت ومن المحتمل أن نستمر في ذلك. تجدر الإشارة إلى أنّ واجهة برمجة التطبيقات الجديدة في إصدارات zlib اللاحقة لن تكون متاحة على إصدارات نظام التشغيل التي تسبق واجهة برمجة التطبيقات. من الممكن تجنُّب كل هذه المشاكل (على حساب زيادة حجم حزمة APK) من خلال استخدام libz.a الثابت بدلاً من libz.so دائمًا.

متوفّرة بدايةً من المستوى 3 لواجهة برمجة التطبيقات (ولكن اطّلِع على الملاحظة أعلاه).

المكتبة: libz

الرسومات

OpenGL ES 1.0 - 3.2

تحتوي العناوين العادية OpenGL ES 1.x (<GLES/gl.h> و<GLES/glext.h>) والرؤوس 2.0 (<GLES2/gl2.h> و<GLES2/gl2ext.h>) والرؤوس 3.0 (<GLES3/gl3.h> و<GLES3/gl3ext.h>) والرؤوس 3.1 (<GLES3/gl31.h> و<GLES3/gl3ext.h>) والرؤوس 3.2 (<GLES3/gl32.h> و <GLES3/gl3ext.h>) على التعريفات اللازمة لـ OpenGL ES.

لاستخدام OpenGL ES 1.x، اربط الوحدة الأصلية بالإصدار libGLESv1_CM.

لاستخدام OpenGL ES 2.0، اربط الوحدة الأصلية بالإصدار libGLESv2.

لاستخدام OpenGL ES 3.x، اربط الوحدة الأصلية بالإصدار libGLESv3.

تتوافق جميع الأجهزة التي تعمل بنظام التشغيل Android مع OpenGL ES 1.0 و2.0.

إنّ أجهزة Android فقط التي تتضمّن وحدة معالجة الرسومات اللازمة لا تتوافق بشكل كامل مع الإصدارات الأحدث من OpenGL ES، إلا أنّ المكتبات متوفّرة على جميع الأجهزة التي تتوافق مع مستوى واجهة برمجة التطبيقات الذي عُرضت فيه. يمكنك الربط بالمكتبات بأمان، ولكن يجب على التطبيق الاستعلام عن سلسلة الإصدار وسلسلة الإضافة OpenGL ES لتحديد ما إذا كان الجهاز الحالي يتوافق مع الميزات التي يحتاجها. للحصول على معلومات عن كيفية إجراء طلب البحث هذا، راجِع وصف glGetString() في مواصفات OpenGL.

بالإضافة إلى ذلك، يجب وضع علامة <uses-feature> في ملف البيان للإشارة إلى إصدار OpenGL ES المطلوب.

يتوفّر OpenGL ES 1.0 بدءًا من المستوى 4 لواجهة برمجة التطبيقات.

يتوفّر OpenGL ES 2.0 بدءًا من المستوى 5 من واجهة برمجة التطبيقات.

يتوفّر OpenGL ES 3.0 منذ الإصدار 18 من واجهة برمجة التطبيقات.

يتوفّر OpenGL ES 3.1 بدءًا من المستوى 21 من واجهة برمجة التطبيقات.

يتوفّر OpenGL ES 3.2 بدءًا من المستوى 24 لواجهة برمجة التطبيقات.

EGL

توفّر EGL واجهة نظام أساسي أصلية من خلال عنوانَي <EGL/egl.h> و<EGL/eglext.h> لتخصيص وإدارة سياقات وشاشات OpenGL ES.

تتيح لك أداة EGL تنفيذ العمليات التالية من خلال رمز برمجي أصلي:

  • إدراج إعدادات EGL المتوافقة
  • تخصيص مساحات عرض OpenGL ES وإفلاتها
  • إنشاء سياقات OpenGL ES وإتلافها
  • تبديل الأسطح أو قلبها

أتاح المستوى 24 من واجهة برمجة التطبيقات استخدام الإضافات EGL_KHR_mutable_render_buffer وANDROID_create_native_client_buffer وANDROID_front_buffer_auto_refresh.

متوفّرة منذ المستوى 9 من واجهة برمجة التطبيقات.

المكتبة: libEGL

الدليل: واجهة EGL Native Platform

فولكان

Vulkan هي واجهة برمجة تطبيقات متعددة الأنظمة الأساسية ومنخفضة التكلفة لعرض الرسومات ثلاثية الأبعاد عالية الأداء. Vulkan هو معيار مفتوح تحافظ عليه مجموعة Khronos Group. يحتوي ملف العنوان <vulkan/vulkan.h> العادي على البيانات المطلوبة لإجراء طلبات عرض Vulkan من الرمز الخاص بك.

للحصول على نماذج التعليمات البرمجية، يُرجى الاطّلاع على مشروعَي VulkanSamples وandroid-vulkan-tutorials على GitHub.

تتوفر مكتبة Vulkan على جميع الأجهزة التي تتوافق مع المستوى 24 من واجهة برمجة التطبيقات أو الإصدارات الأحدث، ولكن يجب أن تتحقق التطبيقات في وقت التشغيل من توفر الدعم اللازم لأجهزة وحدة معالجة الرسومات. ولن تعرض الأجهزة التي لا تتوافق مع Vulkan أي أجهزة من نوع vkEnumeratePhysicalDevices.

متوفّرة منذ المستوى 24 من واجهة برمجة التطبيقات

المكتبة: libvulkan

الدليل: دليل واجهة برمجة التطبيقات لرسومات Vulkan

صور نقطية

تعرض مكتبة libjnigraphics واجهة برمجة التطبيقات التي تسمح بالوصول إلى المخازن المؤقتة لوحدات البكسل لكائنات Bitmap من Java. تكون سير العمل كما يلي:

  1. يمكنك استدعاء AndroidBitmap_getInfo() لاسترداد معلومات، مثل العرض والارتفاع، حول مقبض صورة نقطية معين.

  2. عليك استدعاء AndroidBitmap_lockPixels() لقفل المخزن المؤقت لوحدات البكسل واسترداد مؤشر إليه. يضمن ذلك عدم تحريك وحدات البكسل إلى أن يستدعي التطبيق AndroidBitmap_unlockPixels().

  3. عدِّل المخزن المؤقت لوحدات البكسل بما يتناسب مع تنسيق البكسل وعرضه وخصائصه الأخرى.

  4. الاتصال بـ AndroidBitmap_unlockPixels() لفتح المخزن المؤقت.

متوفّرة منذ المستوى 8 من واجهة برمجة التطبيقات.

المكتبة: libjnigraphics

المرجع: مرجع واجهة برمجة التطبيقات Bitmap API

واجهة برمجة التطبيقات للمزامنة

متوفّرة منذ المستوى 26 من واجهة برمجة التطبيقات

المكتبة: libsync

المرجع: مرجع Sync API

الكاميرا

تعمل واجهات برمجة التطبيقات للكاميرا الأصلية على التقاط الصور ومعالجتها بدقة أكبر. على عكس واجهة برمجة تطبيقات الكاميرا 2 من Java، لا تتيح واجهة برمجة تطبيقات الكاميرا الأصلية تنفيذ عمليات التنفيذ المتوقفة نهائيًا الخاصة بـ HAL 1.0 للكاميرا (أي أنّ قائمة الكاميرات المتاحة في واجهة برمجة تطبيقات الكاميرا الأصلية لن تعرض قائمة بأجهزة الكاميرات التي لديها مستوى الجهاز LEGACY).

متوفّرة منذ المستوى 24 من واجهة برمجة التطبيقات

المكتبة: libcamera2ndk

المرجع: مرجع واجهة برمجة التطبيقات للكاميرا

الوسائط

libmediandk

توفّر Media APIs واجهات برمجة تطبيقات ذات مستوى منخفض ومشابهة لـ MediaExtractor وMediaCodec وواجهات برمجة تطبيقات Java الأخرى ذات الصلة.

المكتبة: libmediandk

المرجع: مرجع Media API

برنامج OpenMAX AL

تعتمد معالجة الوسائط المتعددة الأصلية في نظام التشغيل Android على واجهة برمجة التطبيقات Kuronos Group OpenMAX AL 1.0.1.

تحتوي عناوين OpenMAX AL القياسية <OMXAL/OpenMAXAL.h> و<OMXAL/OpenMAXAL_Platform.h> على التعريفات اللازمة لتنفيذ إخراج الوسائط المتعددة من الجانب الأصلي لنظام Android.

يوفّر توزيع NDK من OpenMAX AL أيضًا إضافات خاصة بنظام التشغيل Android. لمزيد من المعلومات عن هذه الإضافات، يُرجى الاطّلاع على التعليقات في <OMXAL/OpenMAXAL_Android.h>.

متوفّرة منذ المستوى 14 من واجهة برمجة التطبيقات

المكتبة: libOpenMAXAL

واجهات برمجة تطبيقات تطبيقات Android الأصلية

للمزيد من المعلومات، يُرجى الاطّلاع على مستندات مرجع واجهة برمجة تطبيقات Android NDK.

تتضمن واجهات برمجة التطبيقات ما يلي:

المكتبة: libandroid

المكتبة: libnativewindow للحصول على وظائف نافذة أصلية أحدث

المرجع الكامل: مرجع واجهة برمجة التطبيقات NDK Android

واجهات برمجة تطبيقات Hardware Buffer API

هناك واجهتا برمجة تطبيقات أصليتان تتيحان لك إنشاء مسارات التعلّم الخاصة بك لإدارة المخزن المؤقت عبر العمليات.

تتيح لك واجهة برمجة تطبيقات مخزن الأجهزة الأصلية <android/hardware_buffer.h> تخصيص مخازن مؤقتة بشكل مباشر لإنشاء مسارات التعلّم الخاصة بك من أجل إدارة المخزن المؤقت عبر العمليات المختلفة. يمكنك تخصيص AHardwareBuffer واستخدامه للحصول على نوع المورّد EGLClientBuffer من خلال الإضافة eglGetNativeClientBufferANDROID. ويمكنك ضبط هذا المورد الاحتياطي إلى eglCreateImageKHR لإنشاء نوع مورد EGLImage قد يتم ربطه بعد ذلك بزخرفة من خلال glEGLImageTargetTexture2DOES على الأجهزة المتوافقة. يمكن أن يكون هذا مفيدًا لإنشاء زخارف قد تتم مشاركتها عبر العمليات المتقاطعة.

تتيح لك واجهة برمجة تطبيقات JNI API للمخزن المؤقت للأجهزة الأصلية (<android/hardware_buffer_jni.h>) الحصول على كائن HardwareBuffer، وهو قابل للتقسيم، وبالتالي يمكن نقله بين عمليتَين مختلفتَين. يمنح ذلك تطبيقك إمكانات مماثلة لتطبيق SurfaceFlinger، مثل إنشاء قائمة انتظار خاصة بك من الموارد الاحتياطية بين العمليات بدون الوصول إلى واجهات برمجة تطبيقات Android الداخلية.

الصوت

صوت A Audio

A Audio هي واجهة برمجة تطبيقات الصوت الأصلي المتوافقة حاليًا. وقد حلَّ محل OpenSL ES، وتوفّر توافقًا أفضل مع تطبيقات الصوت عالية الأداء التي تتطلّب صوتًا بزمن انتقال بطيء.

متوفّرة منذ المستوى 26 من واجهة برمجة التطبيقات

المكتبة: libaaudio

الدليل: دليل AAudio API

المرجع: مرجع AAudio API

OpenSL ES

OpenSL ES هي واجهة برمجة تطبيقات صوت أصلية ومتوافقة أيضًا، ولكن يمكنك الاطّلاع على الملاحظة الواردة في الدليل أدناه.

متوفّرة منذ المستوى 9 من واجهة برمجة التطبيقات. أضاف المستوى 14 من واجهة برمجة التطبيقات دعم PCM.

المكتبة: libOpenSLES

الدليل: دليل OpenSL ES لنظام التشغيل Android

واجهة برمجة تطبيقات الشبكات العصبونية

توفّر واجهة برمجة التطبيقات Neial Networks API (NNAPI) التطبيقات إمكانية تسريع الأجهزة لعمليات تعلُّم الآلة على الجهاز فقط. تتيح واجهة برمجة التطبيقات إنشاء النماذج وتجميعها وتنفيذها على الجهاز فقط لا تستخدم التطبيقات عادةً NNAPI بشكل مباشر، بل يتم استدعاء واجهة برمجة التطبيقات بواسطة مكتبات تعلُّم الآلة وأطر العمل والأدوات التي تتيح للمطوّرين تدريب نماذجهم ونشرها على أجهزة Android.

متوفّرة منذ المستوى 27 من واجهة برمجة التطبيقات

المكتبة: libneuralnetworks

دليل: دليل الشبكات العصبونية

المرجع: مرجع واجهة برمجة تطبيقات الشبكات العصبونية