تقدّم هذه الصفحة نظرة عامة على المكتبات المضمّنة في NDK، مع روابط تؤدي إلى الأجزاء ذات الصلة من مرجع NDK API، فضلاً عن الأدلة التي تحدّد أماكن وجودها.
استخدام واجهات برمجة التطبيقات الأصلية
هناك خطوتان لاستخدام المكتبة التي يوفرها NDK:
اطلب من نظام الإصدار الربط بالمكتبة.
إذا كنت تستخدم ndk-build: أضِف المكتبة إلى
LOCAL_LDLIBS
في Android.mk. يُرجى ملاحظة أنك تزيل البادئةlib
وتقول-l
بدلاً منها. على سبيل المثال، للربط بـlibfoo
وlibbar
، ستكتب:makefile LOCAL_LDLIBS := -lfoo -lbar
لمزيد من المعلومات حول
LOCAL_LDLIBS
، يمكنك الاطّلاع على مستندات مستندات Android.mk.في حال استخدام أداة CMake: اتّبِع التعليمات الواردة في مستندات إضافة واجهات NDK APIs في "استوديو YouTube".
#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. تكون سير العمل كما يلي:
يمكنك استدعاء
AndroidBitmap_getInfo()
لاسترداد معلومات، مثل العرض والارتفاع، حول مقبض صورة نقطية معين.عليك استدعاء
AndroidBitmap_lockPixels()
لقفل المخزن المؤقت لوحدات البكسل واسترداد مؤشر إليه. يضمن ذلك عدم تحريك وحدات البكسل إلى أن يستدعي التطبيقAndroidBitmap_unlockPixels()
.عدِّل المخزن المؤقت لوحدات البكسل بما يتناسب مع تنسيق البكسل وعرضه وخصائصه الأخرى.
الاتصال بـ
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.
تتضمن واجهات برمجة التطبيقات ما يلي:
- مادة العرض
- مصمِّمة الرقص
- الإعداد
- الإدخال
- Looper
- نشاط مدمج مع المحتوى
- المخازن المؤقتة للأجهزة الأصلية
- النافذة الأصلية
- الذاكرة
- التواصل
- أداة استشعار
- مساحة التخزين
- زخرفة السطح
المكتبة: 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
دليل: دليل الشبكات العصبونية
المرجع: مرجع واجهة برمجة تطبيقات الشبكات العصبونية