این صفحه یک نمای کلی از کتابخانههای موجود در NDK، با پیوندهایی به بخشهای مربوطه مرجع NDK API، و راهنماهایی در جایی که آنها وجود دارند، ارائه میکند.
از API های بومی استفاده کنید
دو مرحله برای استفاده از کتابخانه ای که NDK ارائه می دهد وجود دارد:
به سیستم ساخت بگویید که در مقابل کتابخانه پیوند برقرار کند.
اگر از ndk-build استفاده می کنید: کتابخانه را به
LOCAL_LDLIBS
در Android.mk خود اضافه کنید. توجه داشته باشید کهlib
پیشرو را بردارید و به جای آن بگویید-l
. به عنوان مثال، برای پیوند در برابرlibfoo
وlibbar
، مینویسید:makefile LOCAL_LDLIBS := -lfoo -lbar
برای اطلاعات بیشتر درباره
LOCAL_LDLIBS
، به مستندات اسناد Android.mk مراجعه کنید.اگر از CMake استفاده میکنید: دستورالعملهای موجود در مستندات افزودن NDK APIs استودیو را دنبال کنید.
#عناوین مناسب را از کد خود
#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
را فراهم می کند. گردش کار به شرح زیر است:
AndroidBitmap_getInfo()
را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.AndroidBitmap_lockPixels()
را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین میکند که پیکسلها حرکت نمیکنند تا زمانی که برنامهAndroidBitmap_unlockPixels()
را فراخوانی کند.بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.
برای باز کردن قفل بافر با
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 ها عبارتند از:
- دارایی
- طراح رقص
- پیکربندی
- ورودی
- لوپر
- فعالیت بومی
- بافرهای سخت افزاری بومی
- پنجره بومی
- حافظه
- شبکه سازی
- سنسور
- ذخیره سازی
- SurfaceTexture
کتابخانه: 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 ارائه می دهد وجود دارد:
به سیستم ساخت بگویید که در مقابل کتابخانه پیوند برقرار کند.
اگر از ndk-build استفاده می کنید: کتابخانه را به
LOCAL_LDLIBS
در Android.mk خود اضافه کنید. توجه داشته باشید کهlib
پیشرو را بردارید و به جای آن بگویید-l
. به عنوان مثال، برای پیوند در برابرlibfoo
وlibbar
، مینویسید:makefile LOCAL_LDLIBS := -lfoo -lbar
برای اطلاعات بیشتر درباره
LOCAL_LDLIBS
، به مستندات اسناد Android.mk مراجعه کنید.اگر از CMake استفاده میکنید: دستورالعملهای موجود در مستندات افزودن NDK APIs استودیو را دنبال کنید.
#عناوین مناسب را از کد خود
#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
را فراهم می کند. گردش کار به شرح زیر است:
AndroidBitmap_getInfo()
را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.AndroidBitmap_lockPixels()
را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین میکند که پیکسلها حرکت نمیکنند تا زمانی که برنامهAndroidBitmap_unlockPixels()
را فراخوانی کند.بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.
برای باز کردن قفل بافر با
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 ها عبارتند از:
- دارایی
- طراح رقص
- پیکربندی
- ورودی
- لوپر
- فعالیت بومی
- بافرهای سخت افزاری بومی
- پنجره بومی
- حافظه
- شبکه سازی
- سنسور
- ذخیره سازی
- SurfaceTexture
کتابخانه: 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 ارائه می دهد وجود دارد:
به سیستم ساخت بگویید که در مقابل کتابخانه پیوند برقرار کند.
اگر از ndk-build استفاده می کنید: کتابخانه را به
LOCAL_LDLIBS
در Android.mk خود اضافه کنید. توجه داشته باشید کهlib
پیشرو را بردارید و به جای آن بگویید-l
. به عنوان مثال، برای پیوند در برابرlibfoo
وlibbar
، مینویسید:makefile LOCAL_LDLIBS := -lfoo -lbar
برای اطلاعات بیشتر درباره
LOCAL_LDLIBS
، به مستندات اسناد Android.mk مراجعه کنید.اگر از CMake استفاده میکنید: دستورالعملهای موجود در مستندات افزودن NDK APIs استودیو را دنبال کنید.
#عناوین مناسب را از کد خود
#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
را فراهم می کند. گردش کار به شرح زیر است:
AndroidBitmap_getInfo()
را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.AndroidBitmap_lockPixels()
را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین میکند که پیکسلها حرکت نمیکنند تا زمانی که برنامهAndroidBitmap_unlockPixels()
را فراخوانی کند.بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.
برای باز کردن قفل بافر با
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 ها عبارتند از:
- دارایی
- طراح رقص
- پیکربندی
- ورودی
- لوپر
- فعالیت بومی
- بافرهای سخت افزاری بومی
- پنجره بومی
- حافظه
- شبکه سازی
- سنسور
- ذخیره سازی
- SurfaceTexture
کتابخانه: 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 ارائه می دهد وجود دارد:
به سیستم ساخت بگویید که در مقابل کتابخانه پیوند برقرار کند.
اگر از ndk-build استفاده می کنید: کتابخانه را به
LOCAL_LDLIBS
در Android.mk خود اضافه کنید. توجه داشته باشید کهlib
پیشرو را بردارید و به جای آن بگویید-l
. به عنوان مثال، برای پیوند در برابرlibfoo
وlibbar
، مینویسید:makefile LOCAL_LDLIBS := -lfoo -lbar
برای اطلاعات بیشتر درباره
LOCAL_LDLIBS
، به مستندات اسناد Android.mk مراجعه کنید.اگر از CMake استفاده میکنید: دستورالعملهای موجود در مستندات افزودن NDK APIs استودیو را دنبال کنید.
#عناوین مناسب را از کد خود
#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
را فراهم می کند. گردش کار به شرح زیر است:
AndroidBitmap_getInfo()
را برای بازیابی اطلاعات، مانند عرض و ارتفاع، در مورد یک دسته بیت مپ خاص فراخوانی کنید.AndroidBitmap_lockPixels()
را فراخوانی کنید تا بافر پیکسل قفل شود و یک اشاره گر به آن بازیابی شود. انجام این کار تضمین میکند که پیکسلها حرکت نمیکنند تا زمانی که برنامهAndroidBitmap_unlockPixels()
را فراخوانی کند.بافر پیکسل را متناسب با قالب پیکسل، عرض و سایر مشخصات آن تغییر دهید.
برای باز کردن قفل بافر با
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 ها عبارتند از:
- دارایی
- طراح رقص
- پیکربندی
- ورودی
- لوپر
- فعالیت بومی
- بافرهای سخت افزاری بومی
- پنجره بومی
- حافظه
- شبکه سازی
- سنسور
- ذخیره سازی
- SurfaceTexture
کتابخانه: 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 شبکه های عصبی