API های بومی

این صفحه یک نمای کلی از کتابخانه‌های موجود در NDK، با پیوندهایی به بخش‌های مربوطه مرجع NDK API، و راهنماهایی در جایی که آنها وجود دارند، ارائه می‌کند.

از 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 استودیو را دنبال کنید.

  2. #عناوین مناسب را از کد خود #include .

توجه داشته باشید که API هایی که جدیدتر از minSdkVersion برنامه شما هستند به طور پیش فرض قابل فراخوانی نیستند و در عوض باید از طریق dlopen() و dlsym() از آنها استفاده کنید. برای یک رویکرد آسان‌تر، به استفاده از APIهای جدیدتر مراجعه کنید.

هسته C/C++

کتابخانه C

هدرهای استاندارد کتابخانه C11 مانند <stdlib.h> و <stdio.h> طبق معمول در دسترس هستند.

توجه داشته باشید که در اندروید، برخلاف لینوکس، هیچ کتابخانه جداگانه libpthread یا librt وجود ندارد. این عملکرد مستقیماً در libc گنجانده شده است، که نیازی به پیوند صریح با آن نیست.

یک libm جداگانه برای توابع ریاضی وجود دارد (به پیروی از سنت معمول یونیکس)، اما مانند libc این به طور خودکار توسط سیستم های ساخت مرتبط می شود.

عملکرد پیوند دهنده پویا در <dlfcn.h> مانند dlopen(3) و dlsym(3) در دسترس است، اما شما باید صریحاً در مقابل libdl پیوند دهید.

کتابخانه: libc / libm / libdl

کتابخانه ++C

پشتیبانی C++17 در دسترس است. برای اطلاعات بیشتر در مورد پشتیبانی از کتابخانه ++C، به پشتیبانی از کتابخانه C++ مراجعه کنید.

ورود به سیستم

<android/log.h> حاوی APIهایی برای ورود به logcat است.

از سطح API 3 در دسترس است.

کتابخانه: liblog

مرجع: ورود به سیستم

ردیابی

Native tracing API <android/trace.h> معادل اصلی کلاس android.os.Trace در زبان برنامه نویسی جاوا را ارائه می دهد. این API به شما امکان می دهد واحدهای نامگذاری شده کار را در کد خود با نوشتن رویدادهای ردیابی در بافر ردیابی سیستم ردیابی کنید. سپس می توانید رویدادهای ردیابی را با استفاده از ابزار Systrace جمع آوری و تجزیه و تحلیل کنید.

از سطح API 23 در دسترس است.

کتابخانه: libandroid

راهنما: ردیابی بومی

فشرده سازی zlib

می توانید از کتابخانه فشرده سازی Zlib با قرار دادن <zlib.h> و پیوند دادن در برابر libz استفاده کنید.

NDK همیشه حاوی آخرین فایل‌های هدر zlib در زمان انتشار است، و libz.a موجود در NDK برای پیوند استاتیک همیشه همان نسخه است، اما libz.so برای پیوند پویا از دستگاه می‌آید و هر نسخه‌ای باشد. اتفاقاً روی آن دستگاه منتشر شد. به طور خاص، این بدان معنی است که هدرهایی که با آنها ساخته اید با نسخه zlib در دستگاه مطابقت ندارند، بنابراین هشدارهای معمول در مورد فرضیات در مورد جزئیات پیاده سازی در اینجا معتبر هستند. ما از هیچ مشکلی در رابطه با API عمومی آگاه نیستیم، اما به طور خاص طرح ساختار در طول زمان تغییر کرده است و احتمالاً به این تغییر ادامه خواهد داد. توجه داشته باشید که API جدید در نسخه‌های zlib بعدی بدیهی است که در نسخه‌های سیستم‌عاملی که قبل از API هستند در دسترس نخواهد بود. با استفاده از libz.a استاتیک به جای libz.so ، می توان از همه این مشکلات جلوگیری کرد (به قیمت افزایش اندازه APK).

از سطح API 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 پیوند دهید.

همه دستگاه های مبتنی بر اندروید از OpenGL ES 1.0 و 2.0 پشتیبانی می کنند.

فقط دستگاه‌های اندرویدی که دارای GPU لازم هستند، نسخه‌های بعدی OpenGL ES را به طور کامل پشتیبانی می‌کنند، اما کتابخانه‌ها در همه دستگاه‌هایی وجود دارند که از سطح API در جایی که معرفی شدند، پشتیبانی می‌کنند. پیوند دادن در برابر کتابخانه ها بی خطر است، اما یک برنامه باید رشته نسخه OpenGL ES و رشته برنامه افزودنی را جستجو کند تا مشخص کند که آیا دستگاه فعلی از ویژگی های مورد نیازش پشتیبانی می کند یا خیر. برای اطلاعات در مورد نحوه انجام این پرس و جو، به توضیحات glGetString() در مشخصات OpenGL مراجعه کنید.

علاوه بر این، باید یک تگ <uses-feature> را در فایل مانیفست خود قرار دهید تا نسخه OpenGL ES مورد نیاز خود را نشان دهد.

OpenGL ES 1.0 از سطح API 4 در دسترس است.

OpenGL ES 2.0 از سطح API 5 در دسترس است.

OpenGL ES 3.0 از سطح API 18 در دسترس است.

OpenGL ES 3.1 از سطح API 21 در دسترس است.

OpenGL ES 3.2 از سطح API 24 در دسترس است.

EGL

EGL یک رابط پلتفرم بومی را از طریق سربرگ‌های <EGL/egl.h> و <EGL/eglext.h> برای تخصیص و مدیریت زمینه‌ها و سطوح OpenGL ES فراهم می‌کند.

EGL به شما اجازه می دهد تا عملیات زیر را از کد بومی انجام دهید:

  • لیست تنظیمات EGL پشتیبانی شده.
  • سطوح OpenGL ES را اختصاص داده و آزاد کنید.
  • زمینه های OpenGL ES را ایجاد و نابود کنید.
  • سطوح را تعویض یا برگردانید.

API سطح 24 پشتیبانی از افزونه‌های EGL_KHR_mutable_render_buffer ، ANDROID_create_native_client_buffer ، و ANDROID_front_buffer_auto_refresh را اضافه کرد.

از سطح API 9 در دسترس است.

کتابخانه: libEGL

راهنما: رابط پلتفرم بومی EGL

ولکان

Vulkan یک API چند پلتفرمی کم هزینه برای رندر گرافیکی سه بعدی با کارایی بالا است. Vulkan یک استاندارد باز است که توسط گروه Khronos نگهداری می شود. فایل هدر استاندارد <vulkan/vulkan.h> حاوی اعلان‌های مورد نیاز برای اجرای فراخوان‌های رندر Vulkan از کد شما است.

برای نمونه کد، پروژه های LunarG VulkanSamples و android-vulkan-tutorials را در GitHub ببینید.

کتابخانه Vulkan در همه دستگاه‌هایی که API سطح 24 یا بالاتر را پشتیبانی می‌کنند وجود دارد، اما برنامه‌ها باید در زمان اجرا بررسی کنند که پشتیبانی سخت‌افزار GPU لازم در دسترس است. دستگاه‌های بدون پشتیبانی Vulkan، دستگاه‌های صفر را از vkEnumeratePhysicalDevices برمی‌گردانند.

از سطح API 24 در دسترس است.

کتابخانه: libvulkan

راهنما: راهنمای API گرافیکی Vulkan

نقشه های بیت

کتابخانه libjnigraphics API را نشان می دهد که امکان دسترسی به بافرهای پیکسلی اشیاء جاوا Bitmap را فراهم می کند. گردش کار به شرح زیر است:

  1. AndroidBitmap_getInfo() را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.

  2. AndroidBitmap_lockPixels() را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین می‌کند که پیکسل‌ها حرکت نمی‌کنند تا زمانی که برنامه AndroidBitmap_unlockPixels() را فراخوانی کند.

  3. بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.

  4. برای باز کردن قفل بافر با AndroidBitmap_unlockPixels() تماس بگیرید.

از سطح API 8 در دسترس است.

کتابخانه: libjnigraphics

مرجع: مرجع Bitmap API

همگام سازی API

از سطح API 26 در دسترس است.

کتابخانه: libsync

مرجع: همگام سازی مرجع API

دوربین

API های دوربین اصلی، عکس برداری و پردازش دقیقی را انجام می دهند. برخلاف Java camera2 API، API دوربین اصلی از پیاده‌سازی دوربین منسوخ HAL 1.0 پشتیبانی نمی‌کند (یعنی لیست دوربین موجود در API دوربین اصلی، دستگاه‌های دوربینی را که سطح سخت‌افزار LEGACY دارند فهرست نمی‌کند).

از سطح API 24 در دسترس است.

کتابخانه: libcamera2ndk

مرجع: مرجع API دوربین

رسانه ها

libmediandk

API های Media رابط های بومی سطح پایین مشابه MediaExtractor ، MediaCodec و دیگر API های جاوا مرتبط را ارائه می دهند.

کتابخانه: libmediandk

مرجع: مرجع API رسانه

OpenMAX AL

مدیریت چند رسانه ای بومی اندروید بر اساس API OpenMAX AL 1.0.1 گروه Khronos است.

سرصفحه‌های استاندارد OpenMAX AL <OMXAL/OpenMAXAL.h> و <OMXAL/OpenMAXAL_Platform.h> حاوی اعلان‌های لازم برای اجرای خروجی چندرسانه‌ای از سمت اصلی Android هستند.

توزیع NDK OpenMAX AL همچنین پسوندهای مخصوص اندروید را ارائه می دهد. برای کسب اطلاعات در مورد این برنامه‌های افزودنی، به نظرات در <OMXAL/OpenMAXAL_Android.h> مراجعه کنید.

از سطح API 14 در دسترس است.

کتابخانه: libOpenMAXAL

APIهای برنامه بومی اندروید

برای اطلاعات بیشتر، به مستندات مرجع Android NDK API مراجعه کنید.

API ها عبارتند از:

کتابخانه: libandroid

کتابخانه: libnativewindow برای عملکردهای جدیدتر Native Window

مرجع کامل: مرجع Android NDK API

APIهای بافر سخت افزار

دو API بومی وجود دارد که به شما امکان می دهد خطوط لوله خود را برای مدیریت بافر متقابل فرآیند ایجاد کنید.

API بافر سخت‌افزار بومی <android/hardware_buffer.h> به شما امکان می‌دهد مستقیماً بافرها را برای ایجاد خطوط لوله خود برای مدیریت بافر بین فرآیندی اختصاص دهید. می توانید یک AHardwareBuffer اختصاص دهید و از آن برای به دست آوردن یک نوع منبع EGLClientBuffer از طریق پسوند eglGetNativeClientBufferANDROID استفاده کنید. می‌توانید آن بافر را به eglCreateImageKHR منتقل کنید تا یک نوع منبع EGLImage ایجاد کنید، که ممکن است از طریق glEGLImageTargetTexture2DOES در دستگاه‌های پشتیبانی‌شده به یک بافت متصل شود. این می تواند برای ایجاد بافت هایی که ممکن است در فرآیندهای متقابل به اشتراک گذاشته شوند مفید باشد.

بافر سخت‌افزاری JNI API ( <android/hardware_buffer_jni.h> ) به شما امکان می‌دهد یک شی HardwareBuffer را بدست آورید که یک Parcelable است و بنابراین ممکن است بین دو فرآیند مختلف منتقل شود. این به برنامه شما قابلیت‌های مشابهی با SurfaceFlinger می‌دهد، مانند ایجاد صف بافرهای خود بین فرآیندها بدون دسترسی به APIهای داخلی Android.

صوتی

AAaudio

AAudio API صوتی بومی پشتیبانی شده در حال حاضر است. جایگزین OpenSL ES شد و از برنامه‌های صوتی با کارایی بالا که به صدای با تأخیر پایین نیاز دارند، پشتیبانی بهتری ارائه می‌دهد.

از سطح API 26 در دسترس است.

کتابخانه: libaaudio

راهنما: راهنمای AAudio API

مرجع: مرجع AAudio API

OpenSL ES

OpenSL ES یکی دیگر از API های صوتی بومی است که از آن نیز پشتیبانی می شود، اما به یادداشت در راهنمای زیر مراجعه کنید.

از سطح API 9 در دسترس است. سطح API 14 پشتیبانی PCM را اضافه کرد.

کتابخانه: libOpenSLES

راهنما: راهنمای OpenSL ES برای اندروید

API شبکه های عصبی

API شبکه‌های عصبی (NNAPI) برنامه‌ها را با شتاب سخت‌افزاری برای عملیات یادگیری ماشین روی دستگاه فراهم می‌کند. API از ایجاد، کامپایل و اجرا مدل روی دستگاه پشتیبانی می کند. برنامه ها معمولاً مستقیماً از NNAPI استفاده نمی کنند. در عوض، API قرار است با کتابخانه‌ها، چارچوب‌ها و ابزارهای یادگیری ماشینی فراخوانی شود که به توسعه‌دهندگان اجازه می‌دهد مدل‌های خود را آموزش دهند و آن‌ها را در دستگاه‌های اندرویدی مستقر کنند.

از سطح API 27 در دسترس است.

کتابخانه: libneuralnetworks

راهنما: راهنمای شبکه های عصبی

مرجع: مرجع API شبکه های عصبی

،

این صفحه یک نمای کلی از کتابخانه‌های موجود در NDK، با پیوندهایی به بخش‌های مربوطه مرجع NDK API، و راهنماهایی در جایی که آنها وجود دارند، ارائه می‌کند.

از 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 استودیو را دنبال کنید.

  2. #عناوین مناسب را از کد خود #include .

توجه داشته باشید که API هایی که جدیدتر از minSdkVersion برنامه شما هستند به طور پیش فرض قابل فراخوانی نیستند و در عوض باید از طریق dlopen() و dlsym() از آنها استفاده کنید. برای یک رویکرد آسان‌تر، به استفاده از APIهای جدیدتر مراجعه کنید.

هسته C/C++

کتابخانه C

هدرهای استاندارد کتابخانه C11 مانند <stdlib.h> و <stdio.h> طبق معمول در دسترس هستند.

توجه داشته باشید که در اندروید، برخلاف لینوکس، هیچ کتابخانه جداگانه libpthread یا librt وجود ندارد. این عملکرد مستقیماً در libc گنجانده شده است، که نیازی به پیوند صریح با آن نیست.

یک libm جداگانه برای توابع ریاضی وجود دارد (به پیروی از سنت معمول یونیکس)، اما مانند libc این به طور خودکار توسط سیستم های ساخت مرتبط می شود.

عملکرد پیوند دهنده پویا در <dlfcn.h> مانند dlopen(3) و dlsym(3) در دسترس است، اما شما باید صریحاً در مقابل libdl پیوند دهید.

کتابخانه: libc / libm / libdl

کتابخانه ++C

پشتیبانی C++17 در دسترس است. برای اطلاعات بیشتر در مورد پشتیبانی از کتابخانه ++C، به پشتیبانی از کتابخانه C++ مراجعه کنید.

ورود به سیستم

<android/log.h> حاوی APIهایی برای ورود به logcat است.

از سطح API 3 در دسترس است.

کتابخانه: liblog

مرجع: ورود به سیستم

ردیابی

Native tracing API <android/trace.h> معادل اصلی کلاس android.os.Trace در زبان برنامه نویسی جاوا را ارائه می دهد. این API به شما امکان می دهد واحدهای نامگذاری شده کار را در کد خود با نوشتن رویدادهای ردیابی در بافر ردیابی سیستم ردیابی کنید. سپس می توانید رویدادهای ردیابی را با استفاده از ابزار Systrace جمع آوری و تجزیه و تحلیل کنید.

از سطح API 23 در دسترس است.

کتابخانه: libandroid

راهنما: ردیابی بومی

فشرده سازی zlib

می توانید از کتابخانه فشرده سازی Zlib با قرار دادن <zlib.h> و پیوند دادن در برابر libz استفاده کنید.

NDK همیشه حاوی آخرین فایل‌های هدر zlib در زمان انتشار است، و libz.a موجود در NDK برای پیوند استاتیک همیشه همان نسخه است، اما libz.so برای پیوند پویا از دستگاه می‌آید و هر نسخه‌ای باشد. اتفاقاً روی آن دستگاه منتشر شد. به طور خاص، این بدان معنی است که هدرهایی که با آنها ساخته اید با نسخه zlib در دستگاه مطابقت ندارند، بنابراین هشدارهای معمول در مورد فرضیات در مورد جزئیات پیاده سازی در اینجا معتبر هستند. ما از هیچ مشکلی در رابطه با API عمومی آگاه نیستیم، اما به طور خاص طرح ساختار در طول زمان تغییر کرده است و احتمالاً به این تغییر ادامه خواهد داد. توجه داشته باشید که API جدید در نسخه‌های zlib بعدی بدیهی است که در نسخه‌های سیستم‌عاملی که قبل از API هستند در دسترس نخواهد بود. با استفاده از libz.a استاتیک به جای libz.so ، می توان از همه این مشکلات جلوگیری کرد (به قیمت افزایش اندازه APK).

از سطح API 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 پیوند دهید.

همه دستگاه های مبتنی بر اندروید از OpenGL ES 1.0 و 2.0 پشتیبانی می کنند.

فقط دستگاه‌های اندرویدی که دارای GPU لازم هستند، نسخه‌های بعدی OpenGL ES را به طور کامل پشتیبانی می‌کنند، اما کتابخانه‌ها در همه دستگاه‌هایی وجود دارند که از سطح API در جایی که معرفی شدند، پشتیبانی می‌کنند. پیوند دادن در برابر کتابخانه ها بی خطر است، اما یک برنامه باید رشته نسخه OpenGL ES و رشته برنامه افزودنی را جستجو کند تا مشخص کند که آیا دستگاه فعلی از ویژگی های مورد نیازش پشتیبانی می کند یا خیر. برای اطلاعات در مورد نحوه انجام این پرس و جو، به توضیحات glGetString() در مشخصات OpenGL مراجعه کنید.

علاوه بر این، باید یک تگ <uses-feature> را در فایل مانیفست خود قرار دهید تا نسخه OpenGL ES مورد نیاز خود را نشان دهد.

OpenGL ES 1.0 از سطح API 4 در دسترس است.

OpenGL ES 2.0 از سطح API 5 در دسترس است.

OpenGL ES 3.0 از سطح API 18 در دسترس است.

OpenGL ES 3.1 از سطح API 21 در دسترس است.

OpenGL ES 3.2 از سطح API 24 در دسترس است.

EGL

EGL یک رابط پلتفرم بومی را از طریق سربرگ‌های <EGL/egl.h> و <EGL/eglext.h> برای تخصیص و مدیریت زمینه‌ها و سطوح OpenGL ES فراهم می‌کند.

EGL به شما اجازه می دهد تا عملیات زیر را از کد بومی انجام دهید:

  • لیست تنظیمات EGL پشتیبانی شده.
  • سطوح OpenGL ES را اختصاص داده و آزاد کنید.
  • زمینه های OpenGL ES را ایجاد و نابود کنید.
  • سطوح را تعویض یا برگردانید.

API سطح 24 پشتیبانی از افزونه‌های EGL_KHR_mutable_render_buffer ، ANDROID_create_native_client_buffer ، و ANDROID_front_buffer_auto_refresh را اضافه کرد.

از سطح API 9 در دسترس است.

کتابخانه: libEGL

راهنما: رابط پلتفرم بومی EGL

ولکان

Vulkan یک API چند پلتفرمی کم هزینه برای رندر گرافیکی سه بعدی با کارایی بالا است. Vulkan یک استاندارد باز است که توسط گروه Khronos نگهداری می شود. فایل هدر استاندارد <vulkan/vulkan.h> حاوی اعلان‌های مورد نیاز برای اجرای فراخوان‌های رندر Vulkan از کد شما است.

برای نمونه کد، پروژه های LunarG VulkanSamples و android-vulkan-tutorials را در GitHub ببینید.

کتابخانه Vulkan در همه دستگاه‌هایی که API سطح 24 یا بالاتر را پشتیبانی می‌کنند وجود دارد، اما برنامه‌ها باید در زمان اجرا بررسی کنند که پشتیبانی سخت‌افزار GPU لازم در دسترس است. دستگاه‌های بدون پشتیبانی Vulkan، دستگاه‌های صفر را از vkEnumeratePhysicalDevices برمی‌گردانند.

از سطح API 24 در دسترس است.

کتابخانه: libvulkan

راهنما: راهنمای API گرافیکی Vulkan

نقشه های بیت

کتابخانه libjnigraphics API را نشان می دهد که امکان دسترسی به بافرهای پیکسلی اشیاء جاوا Bitmap را فراهم می کند. گردش کار به شرح زیر است:

  1. AndroidBitmap_getInfo() را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.

  2. AndroidBitmap_lockPixels() را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین می‌کند که پیکسل‌ها حرکت نمی‌کنند تا زمانی که برنامه AndroidBitmap_unlockPixels() را فراخوانی کند.

  3. بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.

  4. برای باز کردن قفل بافر با AndroidBitmap_unlockPixels() تماس بگیرید.

از سطح API 8 در دسترس است.

کتابخانه: libjnigraphics

مرجع: مرجع Bitmap API

همگام سازی API

از سطح API 26 در دسترس است.

کتابخانه: libsync

مرجع: همگام سازی مرجع API

دوربین

API های دوربین اصلی، عکس برداری و پردازش دقیقی را انجام می دهند. برخلاف Java camera2 API، API دوربین اصلی از پیاده‌سازی دوربین منسوخ HAL 1.0 پشتیبانی نمی‌کند (یعنی لیست دوربین موجود در API دوربین اصلی، دستگاه‌های دوربینی را که سطح سخت‌افزار LEGACY دارند فهرست نمی‌کند).

از سطح API 24 در دسترس است.

کتابخانه: libcamera2ndk

مرجع: مرجع API دوربین

رسانه ها

libmediandk

API های Media رابط های بومی سطح پایین مشابه MediaExtractor ، MediaCodec و دیگر API های جاوا مرتبط را ارائه می دهند.

کتابخانه: libmediandk

مرجع: مرجع API رسانه

OpenMAX AL

مدیریت چند رسانه ای بومی اندروید بر اساس API OpenMAX AL 1.0.1 گروه Khronos است.

سرصفحه‌های استاندارد OpenMAX AL <OMXAL/OpenMAXAL.h> و <OMXAL/OpenMAXAL_Platform.h> حاوی اعلان‌های لازم برای اجرای خروجی چندرسانه‌ای از سمت اصلی Android هستند.

توزیع NDK OpenMAX AL همچنین پسوندهای مخصوص اندروید را ارائه می دهد. برای کسب اطلاعات در مورد این برنامه‌های افزودنی، به نظرات در <OMXAL/OpenMAXAL_Android.h> مراجعه کنید.

از سطح API 14 در دسترس است.

کتابخانه: libOpenMAXAL

APIهای برنامه بومی اندروید

برای اطلاعات بیشتر، به مستندات مرجع Android NDK API مراجعه کنید.

API ها عبارتند از:

کتابخانه: libandroid

کتابخانه: libnativewindow برای عملکردهای جدیدتر Native Window

مرجع کامل: مرجع Android NDK API

APIهای بافر سخت افزار

دو API بومی وجود دارد که به شما امکان می دهد خطوط لوله خود را برای مدیریت بافر متقابل فرآیند ایجاد کنید.

API بافر سخت‌افزار بومی <android/hardware_buffer.h> به شما امکان می‌دهد مستقیماً بافرها را برای ایجاد خطوط لوله خود برای مدیریت بافر بین فرآیندی اختصاص دهید. می توانید یک AHardwareBuffer اختصاص دهید و از آن برای به دست آوردن یک نوع منبع EGLClientBuffer از طریق پسوند eglGetNativeClientBufferANDROID استفاده کنید. می‌توانید آن بافر را به eglCreateImageKHR منتقل کنید تا یک نوع منبع EGLImage ایجاد کنید، که ممکن است از طریق glEGLImageTargetTexture2DOES در دستگاه‌های پشتیبانی‌شده به یک بافت متصل شود. این می تواند برای ایجاد بافت هایی که ممکن است در فرآیندهای متقابل به اشتراک گذاشته شوند مفید باشد.

بافر سخت‌افزاری JNI API ( <android/hardware_buffer_jni.h> ) به شما امکان می‌دهد یک شی HardwareBuffer را بدست آورید که یک Parcelable است و بنابراین ممکن است بین دو فرآیند مختلف منتقل شود. این به برنامه شما قابلیت‌های مشابهی با SurfaceFlinger می‌دهد، مانند ایجاد صف بافرهای خود بین فرآیندها بدون دسترسی به APIهای داخلی Android.

صوتی

AAaudio

AAudio API صوتی بومی پشتیبانی شده در حال حاضر است. جایگزین OpenSL ES شد و از برنامه‌های صوتی با کارایی بالا که به صدای با تأخیر پایین نیاز دارند، پشتیبانی بهتری ارائه می‌دهد.

از سطح API 26 در دسترس است.

کتابخانه: libaaudio

راهنما: راهنمای AAudio API

مرجع: مرجع AAudio API

OpenSL ES

OpenSL ES یکی دیگر از API های صوتی بومی است که از آن نیز پشتیبانی می شود، اما به یادداشت در راهنمای زیر مراجعه کنید.

از سطح API 9 در دسترس است. سطح API 14 پشتیبانی PCM را اضافه کرد.

کتابخانه: libOpenSLES

راهنما: راهنمای OpenSL ES برای اندروید

API شبکه های عصبی

API شبکه‌های عصبی (NNAPI) برنامه‌ها را با شتاب سخت‌افزاری برای عملیات یادگیری ماشین روی دستگاه فراهم می‌کند. API از ایجاد، کامپایل و اجرا مدل روی دستگاه پشتیبانی می کند. برنامه ها معمولاً مستقیماً از NNAPI استفاده نمی کنند. در عوض، API قرار است با کتابخانه‌ها، چارچوب‌ها و ابزارهای یادگیری ماشینی فراخوانی شود که به توسعه‌دهندگان اجازه می‌دهد مدل‌های خود را آموزش دهند و آن‌ها را در دستگاه‌های اندرویدی مستقر کنند.

از سطح API 27 در دسترس است.

کتابخانه: libneuralnetworks

راهنما: راهنمای شبکه های عصبی

مرجع: مرجع API شبکه های عصبی

،

این صفحه یک نمای کلی از کتابخانه‌های موجود در NDK، با پیوندهایی به بخش‌های مربوطه مرجع NDK API، و راهنماهایی در جایی که آنها وجود دارند، ارائه می‌کند.

از 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 استودیو را دنبال کنید.

  2. #عناوین مناسب را از کد خود #include .

توجه داشته باشید که API هایی که جدیدتر از minSdkVersion برنامه شما هستند به طور پیش فرض قابل فراخوانی نیستند و در عوض باید از طریق dlopen() و dlsym() از آنها استفاده کنید. برای یک رویکرد آسان‌تر، به استفاده از APIهای جدیدتر مراجعه کنید.

هسته C/C++

کتابخانه C

هدرهای استاندارد کتابخانه C11 مانند <stdlib.h> و <stdio.h> طبق معمول در دسترس هستند.

توجه داشته باشید که در اندروید، برخلاف لینوکس، هیچ کتابخانه جداگانه libpthread یا librt وجود ندارد. این عملکرد مستقیماً در libc گنجانده شده است، که نیازی به پیوند صریح با آن نیست.

یک libm جداگانه برای توابع ریاضی وجود دارد (به پیروی از سنت معمول یونیکس)، اما مانند libc این به طور خودکار توسط سیستم های ساخت مرتبط می شود.

عملکرد پیوند دهنده پویا در <dlfcn.h> مانند dlopen(3) و dlsym(3) در دسترس است، اما شما باید صریحاً در مقابل libdl پیوند دهید.

کتابخانه: libc / libm / libdl

کتابخانه ++C

پشتیبانی C++17 در دسترس است. برای اطلاعات بیشتر در مورد پشتیبانی از کتابخانه ++C، به پشتیبانی از کتابخانه C++ مراجعه کنید.

ورود به سیستم

<android/log.h> حاوی APIهایی برای ورود به logcat است.

از سطح API 3 در دسترس است.

کتابخانه: liblog

مرجع: ورود به سیستم

ردیابی

Native tracing API <android/trace.h> معادل اصلی کلاس android.os.Trace در زبان برنامه نویسی جاوا را ارائه می دهد. این API به شما امکان می دهد واحدهای نامگذاری شده کار را در کد خود با نوشتن رویدادهای ردیابی در بافر ردیابی سیستم ردیابی کنید. سپس می توانید رویدادهای ردیابی را با استفاده از ابزار Systrace جمع آوری و تجزیه و تحلیل کنید.

از سطح API 23 در دسترس است.

کتابخانه: libandroid

راهنما: ردیابی بومی

فشرده سازی zlib

می توانید از کتابخانه فشرده سازی Zlib با قرار دادن <zlib.h> و پیوند دادن در برابر libz استفاده کنید.

NDK همیشه حاوی آخرین فایل‌های هدر zlib در زمان انتشار است، و libz.a موجود در NDK برای پیوند استاتیک همیشه همان نسخه است، اما libz.so برای پیوند پویا از دستگاه می‌آید و هر نسخه‌ای باشد. اتفاقاً روی آن دستگاه منتشر شد. به طور خاص، این بدان معنی است که هدرهایی که با آنها ساخته اید با نسخه zlib در دستگاه مطابقت ندارند، بنابراین هشدارهای معمول در مورد فرضیات در مورد جزئیات پیاده سازی در اینجا معتبر هستند. ما از هیچ مشکلی در رابطه با API عمومی آگاه نیستیم، اما به طور خاص طرح ساختار در طول زمان تغییر کرده است و احتمالاً به این تغییر ادامه خواهد داد. توجه داشته باشید که API جدید در نسخه‌های zlib بعدی بدیهی است که در نسخه‌های سیستم‌عاملی که قبل از API هستند در دسترس نخواهد بود. با استفاده از libz.a استاتیک به جای libz.so ، می توان از همه این مشکلات جلوگیری کرد (به قیمت افزایش اندازه APK).

از سطح API 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 پیوند دهید.

همه دستگاه های مبتنی بر اندروید از OpenGL ES 1.0 و 2.0 پشتیبانی می کنند.

فقط دستگاه‌های اندرویدی که دارای GPU لازم هستند، نسخه‌های بعدی OpenGL ES را به طور کامل پشتیبانی می‌کنند، اما کتابخانه‌ها در همه دستگاه‌هایی وجود دارند که از سطح API در جایی که معرفی شدند، پشتیبانی می‌کنند. پیوند دادن در برابر کتابخانه ها بی خطر است، اما یک برنامه باید رشته نسخه OpenGL ES و رشته برنامه افزودنی را جستجو کند تا مشخص کند که آیا دستگاه فعلی از ویژگی های مورد نیازش پشتیبانی می کند یا خیر. برای اطلاعات در مورد نحوه انجام این پرس و جو، به توضیحات glGetString() در مشخصات OpenGL مراجعه کنید.

علاوه بر این، باید یک تگ <uses-feature> را در فایل مانیفست خود قرار دهید تا نسخه OpenGL ES مورد نیاز خود را نشان دهد.

OpenGL ES 1.0 از سطح API 4 در دسترس است.

OpenGL ES 2.0 از سطح API 5 در دسترس است.

OpenGL ES 3.0 از سطح API 18 در دسترس است.

OpenGL ES 3.1 از سطح API 21 در دسترس است.

OpenGL ES 3.2 از سطح API 24 در دسترس است.

EGL

EGL یک رابط پلتفرم بومی را از طریق سربرگ‌های <EGL/egl.h> و <EGL/eglext.h> برای تخصیص و مدیریت زمینه‌ها و سطوح OpenGL ES فراهم می‌کند.

EGL به شما اجازه می دهد تا عملیات زیر را از کد بومی انجام دهید:

  • لیست تنظیمات EGL پشتیبانی شده.
  • سطوح OpenGL ES را اختصاص داده و آزاد کنید.
  • زمینه های OpenGL ES را ایجاد و نابود کنید.
  • سطوح را تعویض یا برگردانید.

API سطح 24 پشتیبانی از افزونه‌های EGL_KHR_mutable_render_buffer ، ANDROID_create_native_client_buffer ، و ANDROID_front_buffer_auto_refresh را اضافه کرد.

از سطح API 9 در دسترس است.

کتابخانه: libEGL

راهنما: رابط پلتفرم بومی EGL

ولکان

Vulkan یک API چند پلتفرمی کم هزینه برای رندر گرافیکی سه بعدی با کارایی بالا است. Vulkan یک استاندارد باز است که توسط گروه Khronos نگهداری می شود. فایل هدر استاندارد <vulkan/vulkan.h> حاوی اعلان‌های مورد نیاز برای اجرای فراخوان‌های رندر Vulkan از کد شما است.

برای نمونه کد، پروژه های LunarG VulkanSamples و android-vulkan-tutorials را در GitHub ببینید.

کتابخانه Vulkan در همه دستگاه‌هایی که API سطح 24 یا بالاتر را پشتیبانی می‌کنند وجود دارد، اما برنامه‌ها باید در زمان اجرا بررسی کنند که پشتیبانی سخت‌افزار GPU لازم در دسترس است. دستگاه‌های بدون پشتیبانی Vulkan، دستگاه‌های صفر را از vkEnumeratePhysicalDevices برمی‌گردانند.

از سطح API 24 در دسترس است.

کتابخانه: libvulkan

راهنما: راهنمای API گرافیکی Vulkan

نقشه های بیت

کتابخانه libjnigraphics API را نشان می دهد که امکان دسترسی به بافرهای پیکسلی اشیاء جاوا Bitmap را فراهم می کند. گردش کار به شرح زیر است:

  1. AndroidBitmap_getInfo() را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.

  2. AndroidBitmap_lockPixels() را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین می‌کند که پیکسل‌ها حرکت نمی‌کنند تا زمانی که برنامه AndroidBitmap_unlockPixels() را فراخوانی کند.

  3. بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.

  4. برای باز کردن قفل بافر با AndroidBitmap_unlockPixels() تماس بگیرید.

از سطح API 8 در دسترس است.

کتابخانه: libjnigraphics

مرجع: مرجع Bitmap API

همگام سازی API

از سطح API 26 در دسترس است.

کتابخانه: libsync

مرجع: همگام سازی مرجع API

دوربین

API های دوربین اصلی، عکس برداری و پردازش دقیقی را انجام می دهند. برخلاف Java camera2 API، API دوربین اصلی از پیاده‌سازی دوربین منسوخ HAL 1.0 پشتیبانی نمی‌کند (یعنی لیست دوربین موجود در API دوربین اصلی، دستگاه‌های دوربینی را که سطح سخت‌افزار LEGACY دارند فهرست نمی‌کند).

از سطح API 24 در دسترس است.

کتابخانه: libcamera2ndk

مرجع: مرجع API دوربین

رسانه ها

libmediandk

API های Media رابط های بومی سطح پایین مشابه MediaExtractor ، MediaCodec و دیگر API های جاوا مرتبط را ارائه می دهند.

کتابخانه: libmediandk

مرجع: مرجع API رسانه

OpenMAX AL

مدیریت چند رسانه ای بومی اندروید بر اساس API OpenMAX AL 1.0.1 گروه Khronos است.

سرصفحه‌های استاندارد OpenMAX AL <OMXAL/OpenMAXAL.h> و <OMXAL/OpenMAXAL_Platform.h> حاوی اعلان‌های لازم برای اجرای خروجی چندرسانه‌ای از سمت اصلی Android هستند.

توزیع NDK OpenMAX AL همچنین پسوندهای مخصوص اندروید را ارائه می دهد. برای کسب اطلاعات در مورد این برنامه‌های افزودنی، به نظرات در <OMXAL/OpenMAXAL_Android.h> مراجعه کنید.

از سطح API 14 در دسترس است.

کتابخانه: libOpenMAXAL

APIهای برنامه بومی اندروید

برای اطلاعات بیشتر، به مستندات مرجع Android NDK API مراجعه کنید.

API ها عبارتند از:

کتابخانه: libandroid

کتابخانه: libnativewindow برای عملکردهای جدیدتر Native Window

مرجع کامل: مرجع Android NDK API

APIهای بافر سخت افزار

دو API بومی وجود دارد که به شما امکان می دهد خطوط لوله خود را برای مدیریت بافر متقابل فرآیند ایجاد کنید.

API بافر سخت‌افزار بومی <android/hardware_buffer.h> به شما امکان می‌دهد مستقیماً بافرها را برای ایجاد خطوط لوله خود برای مدیریت بافر بین فرآیندی اختصاص دهید. می توانید یک AHardwareBuffer اختصاص دهید و از آن برای به دست آوردن یک نوع منبع EGLClientBuffer از طریق پسوند eglGetNativeClientBufferANDROID استفاده کنید. می‌توانید آن بافر را به eglCreateImageKHR منتقل کنید تا یک نوع منبع EGLImage ایجاد کنید، که ممکن است از طریق glEGLImageTargetTexture2DOES در دستگاه‌های پشتیبانی‌شده به یک بافت متصل شود. این می تواند برای ایجاد بافت هایی که ممکن است در فرآیندهای متقابل به اشتراک گذاشته شوند مفید باشد.

بافر سخت‌افزاری JNI API ( <android/hardware_buffer_jni.h> ) به شما امکان می‌دهد یک شی HardwareBuffer را بدست آورید که یک Parcelable است و بنابراین ممکن است بین دو فرآیند مختلف منتقل شود. این به برنامه شما قابلیت‌های مشابهی با SurfaceFlinger می‌دهد، مانند ایجاد صف بافرهای خود بین فرآیندها بدون دسترسی به APIهای داخلی Android.

صوتی

AAaudio

AAudio API صوتی بومی پشتیبانی شده در حال حاضر است. جایگزین OpenSL ES شد و از برنامه‌های صوتی با کارایی بالا که به صدای با تأخیر پایین نیاز دارند، پشتیبانی بهتری ارائه می‌دهد.

از سطح API 26 در دسترس است.

کتابخانه: libaaudio

راهنما: راهنمای AAudio API

مرجع: مرجع AAudio API

OpenSL ES

OpenSL ES یکی دیگر از API های صوتی بومی است که از آن نیز پشتیبانی می شود، اما به یادداشت در راهنمای زیر مراجعه کنید.

از سطح API 9 در دسترس است. سطح API 14 پشتیبانی PCM را اضافه کرد.

کتابخانه: libOpenSLES

راهنما: راهنمای OpenSL ES برای اندروید

API شبکه های عصبی

API شبکه‌های عصبی (NNAPI) برنامه‌ها را با شتاب سخت‌افزاری برای عملیات یادگیری ماشین روی دستگاه فراهم می‌کند. API از ایجاد، کامپایل و اجرا مدل روی دستگاه پشتیبانی می کند. برنامه ها معمولاً مستقیماً از NNAPI استفاده نمی کنند. در عوض، API قرار است با کتابخانه‌ها، چارچوب‌ها و ابزارهای یادگیری ماشینی فراخوانی شود که به توسعه‌دهندگان اجازه می‌دهد مدل‌های خود را آموزش دهند و آن‌ها را در دستگاه‌های اندرویدی مستقر کنند.

از سطح API 27 در دسترس است.

کتابخانه: libneuralnetworks

راهنما: راهنمای شبکه های عصبی

مرجع: مرجع API شبکه های عصبی

،

این صفحه یک نمای کلی از کتابخانه‌های موجود در NDK، با پیوندهایی به بخش‌های مربوطه مرجع NDK API، و راهنماهایی در جایی که آنها وجود دارند، ارائه می‌کند.

از 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 استودیو را دنبال کنید.

  2. #عناوین مناسب را از کد خود #include .

توجه داشته باشید که API هایی که جدیدتر از minSdkVersion برنامه شما هستند به طور پیش فرض قابل فراخوانی نیستند و در عوض باید از طریق dlopen() و dlsym() از آنها استفاده کنید. برای یک رویکرد آسان‌تر، به استفاده از APIهای جدیدتر مراجعه کنید.

هسته C/C++

کتابخانه C

هدرهای استاندارد کتابخانه C11 مانند <stdlib.h> و <stdio.h> طبق معمول در دسترس هستند.

توجه داشته باشید که در اندروید، برخلاف لینوکس، هیچ کتابخانه جداگانه libpthread یا librt وجود ندارد. این عملکرد مستقیماً در libc گنجانده شده است، که نیازی به پیوند صریح با آن نیست.

یک libm جداگانه برای توابع ریاضی وجود دارد (به پیروی از سنت معمول یونیکس)، اما مانند libc این به طور خودکار توسط سیستم های ساخت مرتبط می شود.

عملکرد پیوند دهنده پویا در <dlfcn.h> مانند dlopen(3) و dlsym(3) در دسترس است، اما شما باید صریحاً در مقابل libdl پیوند دهید.

کتابخانه: libc / libm / libdl

کتابخانه ++C

پشتیبانی C++17 در دسترس است. برای اطلاعات بیشتر در مورد پشتیبانی از کتابخانه ++C، به پشتیبانی از کتابخانه C++ مراجعه کنید.

ورود به سیستم

<android/log.h> حاوی APIهایی برای ورود به logcat است.

از سطح API 3 در دسترس است.

کتابخانه: liblog

مرجع: ورود به سیستم

ردیابی

Native tracing API <android/trace.h> معادل اصلی کلاس android.os.Trace در زبان برنامه نویسی جاوا را ارائه می دهد. این API به شما امکان می دهد واحدهای نامگذاری شده کار را در کد خود با نوشتن رویدادهای ردیابی در بافر ردیابی سیستم ردیابی کنید. سپس می توانید رویدادهای ردیابی را با استفاده از ابزار Systrace جمع آوری و تجزیه و تحلیل کنید.

از سطح API 23 در دسترس است.

کتابخانه: libandroid

راهنما: ردیابی بومی

فشرده سازی zlib

می توانید از کتابخانه فشرده سازی Zlib با قرار دادن <zlib.h> و پیوند دادن در برابر libz استفاده کنید.

NDK همیشه حاوی آخرین فایل‌های هدر zlib در زمان انتشار است، و libz.a موجود در NDK برای پیوند استاتیک همیشه همان نسخه است، اما libz.so برای پیوند پویا از دستگاه می‌آید و هر نسخه‌ای باشد. اتفاقاً روی آن دستگاه منتشر شد. به طور خاص، این بدان معنی است که هدرهایی که با آنها ساخته اید با نسخه zlib در دستگاه مطابقت ندارند، بنابراین هشدارهای معمول در مورد فرضیات در مورد جزئیات پیاده سازی در اینجا معتبر هستند. ما از هیچ مشکلی در رابطه با API عمومی آگاه نیستیم، اما به طور خاص طرح ساختار در طول زمان تغییر کرده است و احتمالاً به این تغییر ادامه خواهد داد. توجه داشته باشید که API جدید در نسخه‌های zlib بعدی بدیهی است که در نسخه‌های سیستم‌عاملی که قبل از API هستند در دسترس نخواهد بود. با استفاده از libz.a استاتیک به جای libz.so ، می توان از همه این مشکلات جلوگیری کرد (به قیمت افزایش اندازه APK).

از سطح API 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 پیوند دهید.

همه دستگاه های مبتنی بر اندروید از OpenGL ES 1.0 و 2.0 پشتیبانی می کنند.

فقط دستگاه‌های اندرویدی که دارای GPU لازم هستند، نسخه‌های بعدی OpenGL ES را به طور کامل پشتیبانی می‌کنند، اما کتابخانه‌ها در همه دستگاه‌هایی وجود دارند که از سطح API در جایی که معرفی شدند، پشتیبانی می‌کنند. پیوند دادن در برابر کتابخانه ها بی خطر است، اما یک برنامه باید رشته نسخه OpenGL ES و رشته برنامه افزودنی را جستجو کند تا مشخص کند که آیا دستگاه فعلی از ویژگی های مورد نیازش پشتیبانی می کند یا خیر. برای اطلاعات در مورد نحوه انجام این پرس و جو، به توضیحات glGetString() در مشخصات OpenGL مراجعه کنید.

علاوه بر این، باید یک تگ <uses-feature> را در فایل مانیفست خود قرار دهید تا نسخه OpenGL ES مورد نیاز خود را نشان دهد.

OpenGL ES 1.0 از سطح API 4 در دسترس است.

OpenGL ES 2.0 از سطح API 5 در دسترس است.

OpenGL ES 3.0 از سطح API 18 در دسترس است.

OpenGL ES 3.1 از سطح API 21 در دسترس است.

OpenGL ES 3.2 از سطح API 24 در دسترس است.

EGL

EGL یک رابط پلتفرم بومی را از طریق سربرگ‌های <EGL/egl.h> و <EGL/eglext.h> برای تخصیص و مدیریت زمینه‌ها و سطوح OpenGL ES فراهم می‌کند.

EGL به شما اجازه می دهد تا عملیات زیر را از کد بومی انجام دهید:

  • لیست تنظیمات EGL پشتیبانی شده.
  • سطوح OpenGL ES را اختصاص داده و آزاد کنید.
  • زمینه های OpenGL ES را ایجاد و نابود کنید.
  • سطوح را تعویض یا برگردانید.

API سطح 24 پشتیبانی از افزونه‌های EGL_KHR_mutable_render_buffer ، ANDROID_create_native_client_buffer ، و ANDROID_front_buffer_auto_refresh را اضافه کرد.

از سطح API 9 در دسترس است.

کتابخانه: libEGL

راهنما: رابط پلتفرم بومی EGL

ولکان

Vulkan یک API چند پلتفرمی کم هزینه برای رندر گرافیکی سه بعدی با کارایی بالا است. Vulkan یک استاندارد باز است که توسط گروه Khronos نگهداری می شود. فایل هدر استاندارد <vulkan/vulkan.h> حاوی اعلان‌های مورد نیاز برای اجرای فراخوان‌های رندر Vulkan از کد شما است.

برای نمونه کد، پروژه های LunarG VulkanSamples و android-vulkan-tutorials را در GitHub ببینید.

کتابخانه Vulkan در همه دستگاه‌هایی که API سطح 24 یا بالاتر را پشتیبانی می‌کنند وجود دارد، اما برنامه‌ها باید در زمان اجرا بررسی کنند که پشتیبانی سخت‌افزار GPU لازم در دسترس است. دستگاه‌های بدون پشتیبانی Vulkan، دستگاه‌های صفر را از vkEnumeratePhysicalDevices برمی‌گردانند.

از سطح API 24 در دسترس است.

کتابخانه: libvulkan

راهنما: راهنمای API گرافیکی Vulkan

نقشه های بیت

کتابخانه libjnigraphics API را نشان می دهد که امکان دسترسی به بافرهای پیکسلی اشیاء جاوا Bitmap را فراهم می کند. گردش کار به شرح زیر است:

  1. AndroidBitmap_getInfo() را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.

  2. AndroidBitmap_lockPixels() را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین می‌کند که پیکسل‌ها حرکت نمی‌کنند تا زمانی که برنامه AndroidBitmap_unlockPixels() را فراخوانی کند.

  3. بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.

  4. برای باز کردن قفل بافر با AndroidBitmap_unlockPixels() تماس بگیرید.

از سطح API 8 در دسترس است.

کتابخانه: libjnigraphics

مرجع: مرجع Bitmap API

همگام سازی API

از سطح API 26 در دسترس است.

کتابخانه: libsync

مرجع: همگام سازی مرجع API

دوربین

API های دوربین اصلی، عکس برداری و پردازش دقیقی را انجام می دهند. برخلاف Java camera2 API، API دوربین اصلی از پیاده‌سازی دوربین منسوخ HAL 1.0 پشتیبانی نمی‌کند (یعنی لیست دوربین موجود در API دوربین اصلی، دستگاه‌های دوربینی را که سطح سخت‌افزار LEGACY دارند فهرست نمی‌کند).

از سطح API 24 در دسترس است.

کتابخانه: libcamera2ndk

مرجع: مرجع API دوربین

رسانه ها

libmediandk

API های Media رابط های بومی سطح پایین مشابه MediaExtractor ، MediaCodec و دیگر API های جاوا مرتبط را ارائه می دهند.

کتابخانه: libmediandk

مرجع: مرجع API رسانه

OpenMAX AL

مدیریت چند رسانه ای بومی اندروید بر اساس API OpenMAX AL 1.0.1 گروه Khronos است.

سرصفحه‌های استاندارد OpenMAX AL <OMXAL/OpenMAXAL.h> و <OMXAL/OpenMAXAL_Platform.h> حاوی اعلان‌های لازم برای اجرای خروجی چندرسانه‌ای از سمت اصلی Android هستند.

توزیع NDK OpenMAX AL همچنین پسوندهای مخصوص اندروید را ارائه می دهد. برای کسب اطلاعات در مورد این برنامه‌های افزودنی، به نظرات در <OMXAL/OpenMAXAL_Android.h> مراجعه کنید.

از سطح API 14 در دسترس است.

کتابخانه: libOpenMAXAL

APIهای برنامه بومی اندروید

برای اطلاعات بیشتر، به مستندات مرجع Android NDK API مراجعه کنید.

API ها عبارتند از:

کتابخانه: libandroid

کتابخانه: libnativewindow برای عملکردهای جدیدتر Native Window

مرجع کامل: مرجع Android NDK API

APIهای بافر سخت افزار

دو API بومی وجود دارد که به شما امکان می دهد خطوط لوله خود را برای مدیریت بافر متقابل فرآیند ایجاد کنید.

API بافر سخت‌افزار بومی <android/hardware_buffer.h> به شما امکان می‌دهد مستقیماً بافرها را برای ایجاد خطوط لوله خود برای مدیریت بافر بین فرآیندی اختصاص دهید. می توانید یک AHardwareBuffer اختصاص دهید و از آن برای به دست آوردن یک نوع منبع EGLClientBuffer از طریق پسوند eglGetNativeClientBufferANDROID استفاده کنید. می‌توانید آن بافر را به eglCreateImageKHR منتقل کنید تا یک نوع منبع EGLImage ایجاد کنید، که ممکن است از طریق glEGLImageTargetTexture2DOES در دستگاه‌های پشتیبانی‌شده به یک بافت متصل شود. این می تواند برای ایجاد بافت هایی که ممکن است در فرآیندهای متقابل به اشتراک گذاشته شوند مفید باشد.

بافر سخت‌افزاری JNI API ( <android/hardware_buffer_jni.h> ) به شما امکان می‌دهد یک شی HardwareBuffer را بدست آورید که یک Parcelable است و بنابراین ممکن است بین دو فرآیند مختلف منتقل شود. این به برنامه شما قابلیت‌های مشابهی با SurfaceFlinger می‌دهد، مانند ایجاد صف بافرهای خود بین فرآیندها بدون دسترسی به APIهای داخلی Android.

صوتی

AAaudio

AAudio API صوتی بومی پشتیبانی شده در حال حاضر است. جایگزین OpenSL ES شد و از برنامه‌های صوتی با کارایی بالا که به صدای با تأخیر پایین نیاز دارند، پشتیبانی بهتری ارائه می‌دهد.

از سطح API 26 در دسترس است.

کتابخانه: libaaudio

راهنما: راهنمای AAudio API

مرجع: مرجع AAudio API

OpenSL ES

OpenSL ES یکی دیگر از API های صوتی بومی است که از آن نیز پشتیبانی می شود، اما به یادداشت در راهنمای زیر مراجعه کنید.

از سطح API 9 در دسترس است. سطح API 14 پشتیبانی PCM را اضافه کرد.

کتابخانه: libOpenSLES

راهنما: راهنمای OpenSL ES برای اندروید

API شبکه های عصبی

API شبکه‌های عصبی (NNAPI) برنامه‌ها را با شتاب سخت‌افزاری برای عملیات یادگیری ماشین روی دستگاه فراهم می‌کند. API از ایجاد، کامپایل و اجرا مدل روی دستگاه پشتیبانی می کند. برنامه ها معمولاً مستقیماً از NNAPI استفاده نمی کنند. در عوض، API قرار است با کتابخانه‌ها، چارچوب‌ها و ابزارهای یادگیری ماشینی فراخوانی شود که به توسعه‌دهندگان اجازه می‌دهد مدل‌های خود را آموزش دهند و آن‌ها را در دستگاه‌های اندرویدی مستقر کنند.

از سطح API 27 در دسترس است.

کتابخانه: libneuralnetworks

راهنما: راهنمای شبکه های عصبی

مرجع: مرجع API شبکه های عصبی