নেটিভ API

এই পৃষ্ঠাটি NDK-এ অন্তর্ভুক্ত লাইব্রেরিগুলির একটি সংক্ষিপ্ত বিবরণ দেয়, যেখানে NDK API রেফারেন্সের প্রাসঙ্গিক অংশগুলির লিঙ্ক রয়েছে এবং সেগুলি কোথায় রয়েছে তার নির্দেশিকা।

নেটিভ এপিআই ব্যবহার করুন

NDK প্রদান করে এমন একটি লাইব্রেরি ব্যবহার করার দুটি ধাপ রয়েছে:

  1. বিল্ড সিস্টেমকে লাইব্রেরির বিরুদ্ধে লিঙ্ক করতে বলুন।

    • আপনি যদি ndk-build ব্যবহার করেন: আপনার Android.mk-LOCAL_LDLIBS এ লাইব্রেরি যোগ করুন। মনে রাখবেন যে আপনি অগ্রণী lib ছিনতাই করুন এবং পরিবর্তে -l বলুন। উদাহরণস্বরূপ, libfoo এবং libbar এর সাথে লিঙ্ক করতে, আপনি লিখবেন: makefile LOCAL_LDLIBS := -lfoo -lbar

      LOCAL_LDLIBS সম্পর্কে আরও জানতে, Android.mk ডক্স ডকুমেন্টেশন দেখুন।

    • আপনি যদি CMake ব্যবহার করেন : স্টুডিওর অ্যাড এনডিকে এপিআই ডকুমেন্টেশনে নির্দেশাবলী অনুসরণ করুন।

  2. # আপনার কোড থেকে উপযুক্ত শিরোনাম #include

মনে রাখবেন যে APIগুলি যেগুলি আপনার অ্যাপ্লিকেশনের minSdkVersion এর চেয়ে নতুন সেগুলি ডিফল্টরূপে কলযোগ্য হবে না এবং আপনাকে অবশ্যই dlopen() এবং dlsym() এর মাধ্যমে ব্যবহার করতে হবে। একটি সহজ পদ্ধতির জন্য, নতুন এপিআই ব্যবহার করা দেখুন।

কোর 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> এ logcat-এ লগ করার জন্য API রয়েছে।

API স্তর 3 থেকে উপলব্ধ।

লাইব্রেরি: liblog

রেফারেন্স: লগিং

ট্রেস

নেটিভ ট্রেসিং API <android/trace.h> জাভা প্রোগ্রামিং ভাষায় android.os.Trace ক্লাসের নেটিভ সমতুল্য প্রদান করে। এই API আপনাকে সিস্টেম ট্রেস বাফারে ট্রেস ইভেন্টগুলি লিখে আপনার কোডে কাজের নামযুক্ত ইউনিটগুলি ট্রেস করতে দেয়। তারপর আপনি সিস্ট্রেস টুল ব্যবহার করে ট্রেস ইভেন্টগুলি সংগ্রহ এবং বিশ্লেষণ করতে পারেন।

API স্তর 23 থেকে উপলব্ধ।

লাইব্রেরি: libandroid

গাইড: নেটিভ ট্রেসিং

zlib কম্প্রেশন

আপনি <zlib.h> অন্তর্ভুক্ত করে এবং libz বিপরীতে লিঙ্ক করে Zlib কম্প্রেশন লাইব্রেরি ব্যবহার করতে পারেন।

মুক্তির সময় NDK সর্বদা সর্বশেষ zlib হেডার ফাইলগুলিকে অন্তর্ভুক্ত করে এবং স্ট্যাটিক লিঙ্কিংয়ের জন্য NDK-তে অন্তর্ভুক্ত libz.a সর্বদা একই সংস্করণ, তবে গতিশীল লিঙ্কিংয়ের জন্য libz.so ডিভাইস থেকে আসে এবং যে সংস্করণই হোক না কেন যে ডিভাইসে প্রকাশ করা হয়েছে. বিশেষ করে, এর মানে হল যে আপনি যে হেডারগুলির বিরুদ্ধে তৈরি করেছেন তা ডিভাইসে zlib-এর সংস্করণের সাথে মেলে না, তাই বাস্তবায়নের বিবরণ সম্পর্কে অনুমান করার বিরুদ্ধে সাধারণ সতর্কতাগুলি এখানে বিশেষভাবে বৈধ। আমরা পাবলিক API এর সাথে কোন সমস্যা সম্পর্কে অবগত নই, তবে বিশেষ করে struct বিন্যাস সময়ের সাথে পরিবর্তিত হয়েছে এবং সম্ভবত তা চালিয়ে যেতে থাকবে। নোট করুন যে পরবর্তী zlib সংস্করণগুলিতে নতুন API স্পষ্টতই API-এর পূর্ববর্তী ওএস সংস্করণগুলিতে উপলব্ধ হবে না। libz.so এর পরিবর্তে সর্বদা স্ট্যাটিক libz.a ব্যবহার করে এই সমস্ত সমস্যাগুলি (বর্ধিত 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 সংস্করণ স্ট্রিং এবং এক্সটেনশন স্ট্রিংকে জিজ্ঞাসা করতে হবে যে বর্তমান ডিভাইসটি তার প্রয়োজনীয় বৈশিষ্ট্যগুলিকে সমর্থন করে কিনা। কিভাবে এই ক্যোয়ারীটি সম্পাদন করতে হয় সে সম্পর্কে তথ্যের জন্য, OpenGL স্পেসিফিকেশনে glGetString() এর বিবরণ দেখুন।

অতিরিক্তভাবে, OpenGL ES- এর যে সংস্করণটি আপনার প্রয়োজন তা নির্দেশ করার জন্য আপনাকে আপনার ম্যানিফেস্ট ফাইলে একটি <uses-feature> ট্যাগ রাখতে হবে।

OpenGL ES 1.0 API স্তর 4 থেকে উপলব্ধ।

OpenGL ES 2.0 API স্তর 5 থেকে উপলব্ধ।

OpenGL ES 3.0 API স্তর 18 থেকে উপলব্ধ।

API স্তর 21 থেকে OpenGL ES 3.1 উপলব্ধ।

API স্তর 24 থেকে OpenGL ES 3.2 উপলব্ধ।

ইজিএল

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 উচ্চ-কর্মক্ষমতা 3D গ্রাফিক্স রেন্ডারিংয়ের জন্য একটি নিম্ন-ওভারহেড, ক্রস-প্ল্যাটফর্ম API। ভলকান একটি উন্মুক্ত মান যা খরোনোস গ্রুপ দ্বারা পরিচালিত হয়। স্ট্যান্ডার্ড <vulkan/vulkan.h> হেডার ফাইলে আপনার কোড থেকে ভলকান রেন্ডারিং কল করার জন্য প্রয়োজনীয় ঘোষণা রয়েছে।

কোড নমুনার জন্য, GitHub-এ LunarG VulkanSamples এবং android-vulkan-টিউটোরিয়াল প্রকল্পগুলি দেখুন।

ভলকান লাইব্রেরি API স্তর 24 বা তার পরে সমর্থন করে এমন সমস্ত ডিভাইসে উপস্থিত রয়েছে, তবে অ্যাপ্লিকেশনগুলিকে অবশ্যই রানটাইমে পরীক্ষা করতে হবে যে প্রয়োজনীয় GPU হার্ডওয়্যার সমর্থন উপলব্ধ রয়েছে। Vulkan সমর্থন ছাড়া ডিভাইস vkEnumeratePhysicalDevices থেকে শূন্য ডিভাইস ফেরত দেবে।

API স্তর 24 থেকে উপলব্ধ।

লাইব্রেরি: libvulkan

গাইড: ভলকান গ্রাফিক্স এপিআই গাইড

বিটম্যাপ

libjnigraphics লাইব্রেরি API প্রকাশ করে যা জাভা Bitmap অবজেক্টের পিক্সেল বাফারগুলিতে অ্যাক্সেসের অনুমতি দেয়। কর্মপ্রবাহ নিম্নরূপ:

  1. প্রদত্ত বিটম্যাপ হ্যান্ডেল সম্পর্কে তথ্য যেমন প্রস্থ এবং উচ্চতা পুনরুদ্ধার করতে AndroidBitmap_getInfo() কল করুন।

  2. পিক্সেল বাফার লক করতে এবং এটিতে একটি পয়েন্টার পুনরুদ্ধার করতে AndroidBitmap_lockPixels() এ কল করুন৷ এটি করা নিশ্চিত করে যে অ্যাপটি AndroidBitmap_unlockPixels() কল না করা পর্যন্ত পিক্সেলগুলি সরবে না।

  3. পিক্সেল বিন্যাস, প্রস্থ এবং অন্যান্য বৈশিষ্ট্যের জন্য উপযুক্ত হিসাবে পিক্সেল বাফার পরিবর্তন করুন।

  4. বাফার আনলক করতে AndroidBitmap_unlockPixels() এ কল করুন।

API স্তর 8 থেকে উপলব্ধ।

লাইব্রেরি: libjnigraphics

রেফারেন্স: বিটম্যাপ API রেফারেন্স

সিঙ্ক API

API স্তর 26 থেকে উপলব্ধ।

লাইব্রেরি: libsync

রেফারেন্স: সিঙ্ক API রেফারেন্স

ক্যামেরা

নেটিভ ক্যামেরা APIগুলি সূক্ষ্ম-শস্যযুক্ত ফটো ক্যাপচার এবং প্রক্রিয়াকরণ সম্পাদন করে। Java camera2 API-এর বিপরীতে, নেটিভ ক্যামেরা এপিআই অবহেলিত ক্যামেরা HAL 1.0 বাস্তবায়নকে সমর্থন করে না (অর্থাৎ, নেটিভ ক্যামেরা API-তে উপলব্ধ ক্যামেরা তালিকা LEGACY হার্ডওয়্যার স্তরের ক্যামেরা ডিভাইসগুলিকে তালিকাভুক্ত করবে না)।

API স্তর 24 থেকে উপলব্ধ।

লাইব্রেরি: libcamera2ndk

রেফারেন্স: ক্যামেরা API রেফারেন্স

মিডিয়া

libmediandk

মিডিয়া APIs নিম্ন-স্তরের নেটিভ ইন্টারফেস সরবরাহ করে MediaExtractor , MediaCodec এবং অন্যান্য সম্পর্কিত জাভা API-এর মতো।

লাইব্রেরি: libmediandk

রেফারেন্স: মিডিয়া API রেফারেন্স

OpenMAX AL

অ্যান্ড্রয়েড নেটিভ মাল্টিমিডিয়া হ্যান্ডলিং খরোনোস গ্রুপ OpenMAX AL 1.0.1 API-এর উপর ভিত্তি করে।

স্ট্যান্ডার্ড OpenMAX AL হেডার <OMXAL/OpenMAXAL.h> এবং <OMXAL/OpenMAXAL_Platform.h> Android এর নেটিভ দিক থেকে মাল্টিমিডিয়া আউটপুট সম্পাদনের জন্য প্রয়োজনীয় ঘোষণা রয়েছে।

OpenMAX AL-এর NDK ডিস্ট্রিবিউশন অ্যান্ড্রয়েড-নির্দিষ্ট এক্সটেনশনও প্রদান করে। এই এক্সটেনশনগুলি সম্পর্কে তথ্যের জন্য, <OMXAL/OpenMAXAL_Android.h> এ মন্তব্যগুলি দেখুন।

API স্তর 14 থেকে উপলব্ধ।

লাইব্রেরি: libOpenMAXAL

অ্যান্ড্রয়েড নেটিভ অ্যাপ্লিকেশন API

আরও তথ্যের জন্য, Android NDK API রেফারেন্স ডকুমেন্টেশন দেখুন।

এপিআই অন্তর্ভুক্ত:

লাইব্রেরি: libandroid

লাইব্রেরি: সাম্প্রতিক নেটিভ উইন্ডো কার্যকারিতার জন্য libnativewindow

সম্পূর্ণ রেফারেন্স: Android NDK API রেফারেন্স

হার্ডওয়্যার বাফার API

দুটি নেটিভ API রয়েছে যা আপনাকে ক্রস-প্রসেস বাফার পরিচালনার জন্য আপনার নিজস্ব পাইপলাইন তৈরি করতে দেয়।

নেটিভ হার্ডওয়্যার বাফার API <android/hardware_buffer.h> আপনাকে ক্রস-প্রসেস বাফার পরিচালনার জন্য আপনার নিজস্ব পাইপলাইন তৈরি করতে সরাসরি বাফার বরাদ্দ করতে দেয়। আপনি একটি AHardwareBuffer বরাদ্দ করতে পারেন এবং eglGetNativeClientBufferANDROID এক্সটেনশনের মাধ্যমে একটি EGLClientBuffer রিসোর্স টাইপ পেতে এটি ব্যবহার করতে পারেন। আপনি একটি EGLImage রিসোর্স টাইপ তৈরি করতে eglCreateImageKHR এ সেই বাফারটি পাস করতে পারেন, যা সমর্থিত ডিভাইসগুলিতে glEGLImageTargetTexture2DOES এর মাধ্যমে একটি টেক্সচারে আবদ্ধ হতে পারে। এটি টেক্সচার তৈরি করার জন্য উপযোগী হতে পারে যা ক্রস-প্রক্রিয়া ভাগ করা যেতে পারে।

নেটিভ হার্ডওয়্যার বাফার JNI API ( <android/hardware_buffer_jni.h> ) আপনাকে একটি HardwareBuffer অবজেক্ট পেতে দেয়, যা একটি পার্সেলযোগ্য এবং এইভাবে দুটি ভিন্ন প্রক্রিয়ার মধ্যে পরিবহন করা যেতে পারে। এটি আপনার অ্যাপটিকে SurfaceFlinger- এর মতো একই ক্ষমতা দেয় যেমন অভ্যন্তরীণ Android API অ্যাক্সেস না করেই প্রক্রিয়াগুলির মধ্যে আপনার নিজস্ব বাফারের সারি তৈরি করা।

শ্রুতি

অডিও

AAudio হল বর্তমানে-সমর্থিত নেটিভ অডিও API। এটি OpenSL ES-কে প্রতিস্থাপন করেছে, এবং উচ্চ-পারফরম্যান্স অডিও অ্যাপগুলির জন্য আরও ভাল সমর্থন প্রদান করে যেগুলির জন্য কম লেটেন্সি অডিও প্রয়োজন।

API স্তর 26 থেকে উপলব্ধ।

লাইব্রেরি: libaaudio

গাইড: AAudio API গাইড

রেফারেন্স: AAudio API রেফারেন্স

OpenSL ES

OpenSL ES হল আরেকটি নেটিভ অডিও API যা সমর্থিত, কিন্তু নীচের গাইডে নোটটি দেখুন।

API স্তর 9 থেকে উপলব্ধ। API স্তর 14 PCM সমর্থন যোগ করেছে।

লাইব্রেরি: libOpenSLES

গাইড: অ্যান্ড্রয়েড গাইডের জন্য ওপেনএসএল ইএস

নিউরাল নেটওয়ার্ক API

নিউরাল নেটওয়ার্ক এপিআই (NNAPI) ডিভাইসে মেশিন লার্নিং অপারেশনের জন্য হার্ডওয়্যার ত্বরণ সহ অ্যাপগুলি প্রদান করে। API অন-ডিভাইস মডেল তৈরি, সংকলন এবং সম্পাদন সমর্থন করে। অ্যাপগুলি সাধারণত সরাসরি NNAPI ব্যবহার করে না; পরিবর্তে, API বলতে মেশিন লার্নিং লাইব্রেরি, ফ্রেমওয়ার্ক এবং টুল দ্বারা কল করা হয় যা ডেভেলপারদের তাদের মডেলগুলিকে প্রশিক্ষণ দিতে এবং Android ডিভাইসগুলিতে স্থাপন করতে দেয়।

API স্তর 27 থেকে উপলব্ধ।

লাইব্রেরি: libneuralnetworks

গাইড: নিউরাল নেটওয়ার্ক গাইড

রেফারেন্স: নিউরাল নেটওয়ার্ক এপিআই রেফারেন্স