تقدّم هذه الصفحة نظرة عامة على المكتبات المضمّنة في حزمة 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 الواردة في مستندات "استوديو Android".
#include
الرؤوس المناسبة من الرمز البرمجي.
يُرجى العِلم أنّ واجهات برمجة التطبيقات الأحدث من minSdkVersion
لتطبيقك لن تكون
قابلة للاستدعاء تلقائيًا، وعليك استخدامها بدلاً من ذلك من خلال
dlopen()
وdlsym()
.
لمعرفة طريقة أسهل، يُرجى الاطّلاع على استخدام واجهات برمجة التطبيقات الأحدث.
لغة C/C++ الأساسية
مكتبة C
تتوفّر رؤوس مكتبة C11 العادية، مثل <stdlib.h>
و<stdio.h>
،
كالمعتاد.
يُرجى العِلم أنّه على نظام Android، على عكس نظام التشغيل Linux، لا تتوفّر مكتبات 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. تتيح لك واجهة برمجة التطبيقات هذه
تتبُّع وحدات العمل المُسمّاة في الرمز البرمجي عن طريق كتابة أحداث التتبُّع في ملف تخزين مؤقت لتتبُّع النظام. يمكنك بعد ذلك جمع أحداث التتبّع وتحليلها باستخدام
أداة Systrace.
متاح منذ المستوى 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.
لا تتوافق الإصدارات الأحدث
من OpenGL ES إلا مع أجهزة Android التي تتضمّن وحدة معالجة الرسومات اللازمة، ولكن تتوفّر المكتبات على جميع الأجهزة التي تتوافق مع مستوى واجهة برمجة التطبيقات
الذي تم طرحها فيه. من الآمن الربط بالمكتبات،
ولكن على التطبيق الاستعلام عن سلسلة إصدار 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
Vulkan
Vulkan هي واجهة برمجة تطبيقات متعددة المنصات ذات تكلفة منخفضة لعرض الرسومات ثلاثية الأبعاد
بأداء عالٍ. Vulkan هو معيار مفتوح
تديره مجموعة Khronos. يحتوي ملف الرأس <vulkan/vulkan.h>
العادي
على التعريفات اللازمة لتنفيذ طلبات عرض Vulkan من ملف
الرمز البرمجي.
للحصول على نماذج الرموز البرمجية، يمكنك الاطّلاع على مشروعَي LunarG VulkanSamples و android-vulkan-tutorials على GitHub.
تتوفّر مكتبة Vulkan على جميع الأجهزة المتوافقة مع المستوى 24 من واجهة برمجة التطبيقات أو الإصدارات الأحدث،
ولكن على التطبيقات التحقّق من توفّر الأجهزة اللازمة لوحدة معالجة الرسومات أثناء التشغيل. لن تظهر أي أجهزة من
vkEnumeratePhysicalDevices
على الأجهزة التي لا تتوافق مع Vulkan.
متوفّرة منذ الإصدار 24 من واجهة برمجة التطبيقات.
المكتبة: libvulkan
دليل: دليل واجهة برمجة تطبيقات الرسومات Vulkan
الصور النقطية
تعرض مكتبة libjnigraphics
واجهة برمجة تطبيقات تسمح بالوصول إلى وحدات تخزين البكسل
لعناصر Java Bitmap
. في ما يلي سير العمل:
استخدِم
AndroidBitmap_getInfo()
لاسترداد معلومات عن معرّف ملف رسومات نقطية معيّن، مثل العرض والارتفاع.استخدِم
AndroidBitmap_lockPixels()
لقفل وحدة تخزين مؤقتة للبكسل واسترداد إشارة تشير إليها. ويضمن إجراء ذلك عدم تحرّك البكسلات إلى أن يُطلِق التطبيقAndroidBitmap_unlockPixels()
.عدِّل وحدة تخزين البكسل بما يناسب تنسيق البكسل وعرضه وغيرها من الخصائص.
اتصل على
AndroidBitmap_unlockPixels()
لفتح المساحة التخزينية المؤقتة.
متوفّرة منذ مستوى واجهة برمجة التطبيقات 8.
المكتبة: libjnigraphics
المرجع: مرجع واجهة برمجة التطبيقات Bitmap API
Sync API
متوفّرة منذ المستوى 26 من واجهة برمجة التطبيقات.
المكتبة: libsync
المرجع: مرجع Sync API
الكاميرا
تُجري واجهات برمجة التطبيقات الأصلية للكاميرا عمليات التقاط الصور ومعالجتها بدقة. على عكس واجهة برمجة التطبيقات camera2 API لتطبيقات Java، لا تتوافق واجهة برمجة التطبيقات الأصلية للكاميرا مع تطبيقات HAL 1.0 للكاميرا التي تم إيقافها نهائيًا (أي أنّ قائمة الكاميرات المتاحة في واجهة برمجة التطبيقات الكاميرا الأصلية لن تشمل أجهزة الكاميرا التي تتضمن مستوى الأجهزة القديم).
متوفّرة منذ الإصدار 24 من واجهة برمجة التطبيقات.
المكتبة: libcamera2ndk
المرجع: مرجع Camera API
الوسائط
libmediandk
توفّر واجهات برمجة التطبيقات Media واجهات برمجة تطبيقات أصلية منخفضة المستوى مشابهة لواجهات برمجة التطبيقات MediaExtractor
وMediaCodec
وغيرها من واجهات برمجة تطبيقات Java ذات الصلة.
المكتبة: libmediandk
المرجع: مرجع Media API
OpenMAX AL
تستند معالجة الوسائط المتعددة الأصلية في Android إلى واجهة برمجة التطبيقات Khronos 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
- النشاط الأصلي
- مخازن الأجهزة الأصلية
- النافذة الأصلية
- الذاكرة
- التواصل
- جهاز الاستشعار
- مساحة التخزين
- SurfaceTexture
المكتبة: libandroid
المكتبة: libnativewindow
للحصول على أحدث وظائف النوافذ الأصلية
المرجع الكامل: مرجع واجهة برمجة التطبيقات لـ Android NDK
واجهات برمجة تطبيقات Binder
تتيح لك واجهات برمجة التطبيقات Binder إنشاء قنوات اتصال بين العمليات. يمثّل هذا الإجراء التنفيذ على مستوى منخفض لميزة "التواصل البيني للعمليات" في Android. يُفضَّل استخدام المكوّنات ذات المستوى الأعلى كلما أمكن. ومع ذلك، تتوفّر هذه المكتبة لحالات الاستخدام المتقدّمة.
المكتبة: libbinder_ndk
المرجع: Binder
واجهات برمجة التطبيقات لوحدة تخزين مؤقت للأجهزة
تتوفّر واجهتَا برمجة تطبيقات أصليتان تتيحان لك إنشاء مسارات خاصة بك ل إدارة المخزن المؤقت على مستوى جميع العمليات.
تتيح لك واجهة برمجة التطبيقات الخاصة بوحدة تخزين مؤقت للأجهزة المضمّنة
<android/hardware_buffer.h>
تخصيص وحدات التخزين المؤقت مباشرةً لإنشاء مسارات خاصة بك لإدارة وحدات التخزين المؤقت على مستوى جميع العمليات.
يمكنك تخصيص AHardwareBuffer
واستخدامه للحصول على نوع موارد
EGLClientBuffer
من خلال إضافة eglGetNativeClientBufferANDROID
. يمكنك تمرير
هذا المخزن المؤقت إلى
eglCreateImageKHR
لإنشاء نوع مورد
EGLImage
، والذي يمكن ربطه بعد ذلك بنسيج من خلال
glEGLImageTargetTexture2DOES
على الأجهزة المتوافقة. يمكن أن يكون ذلك مفيدًا لإنشاء مواد يمكن مشاركتها في جميع العمليات.
تتيح لك واجهة برمجة التطبيقات JNI API (<android/hardware_buffer_jni.h>
) الخاصة بوحدة تخزين الأجهزة التلقائية
الحصول على عنصر HardwareBuffer
قابل للنقل، وبالتالي
يمكن نقله بين عمليتين مختلفتين. يمنحك ذلك قدرات مشابهة لتلك التي يوفّرها SurfaceFlinger، مثل إنشاء قائمة انتظار للمخازن المؤقتة بين العمليات بدون الوصول إلى IDE واجهات برمجة تطبيقات Android الداخلية.
الصوت
AAudio
AAudio هي واجهة برمجة التطبيقات المتوافقة حاليًا للصوت الأصلي. وقد حلّت هذه الواجهة محلّ OpenSL ES، وتوفر بدورها دعمًا أفضل لتطبيقات الصوت العالية الأداء التي تتطلّب بثًا صوتيًا بوقت استجابة منخفض.
متوفّرة منذ المستوى 26 من واجهة برمجة التطبيقات.
المكتبة: libaaudio
الدليل: دليل AAudio API
المرجع: مرجع واجهة برمجة التطبيقات AAudio API
OpenSL ES
OpenSL ES هي واجهة برمجة تطبيقات أخرى للصوت الأصلية متوافقة أيضًا، ولكن يُرجى الاطّلاع على ملاحظة الدليل أدناه.
متوفّرة منذ مستوى واجهة برمجة التطبيقات 9. أضاف المستوى 14 من واجهة برمجة التطبيقات إمكانية استخدام PCM.
المكتبة: libOpenSLES
دليل: دليل OpenSL ES لنظام التشغيل Android
Neural Networks API
توفّر Neural Networks API (NNAPI) للتطبيقات ميزة "تسريع الأجهزة" لعمليات تعلُّم الآلة التي تتم على الجهاز. تتيح واجهة برمجة التطبيقات إنشاء نماذج ومعالجتها وتنفيذها على الجهاز. لا تستخدم التطبيقات عادةً واجهة برمجة التطبيقات NNAPI مباشرةً، بل يتم استدعاء واجهة برمجة التطبيقات من خلال مكتبات تعلُّم الآلة وأطر العمل والأدوات التي تتيح للمطوّرين تدريب نماذجهم ونشرها على أجهزة Android.
متوفّرة منذ المستوى 27 من واجهة برمجة التطبيقات.
المكتبة: libneuralnetworks
الدليل: دليل الشبكات العصبية
المرجع: مرجع Neural Networks API