ভেন্ডর নেটিভ ডেভেলপমেন্ট কিট (VNDK) ওভারভিউ

ভেন্ডর নেটিভ ডেভেলপমেন্ট কিট (VNDK) হল অন্যান্য লাইব্রেরি বা বাইনারি দ্বারা ব্যবহৃত লাইব্রেরির একটি সেট, বিক্রেতা বা পণ্য পার্টিশনে, dlopen-এর জন্য রানটাইমে।

অবচয়

ফ্রেমওয়ার্ক এবং বিক্রেতা কোডের মধ্যে API প্রদান করার জন্য Android 8.0-এ ভেন্ডর NDK চালু করা হয়েছিল। যদিও VNDK অনেক বছর ধরে সফলভাবে ব্যবহার করা হচ্ছে, এর কিছু ত্রুটি রয়েছে:
  • স্টোরেজ
    • একটি একক VNDK APEX সমস্ত VNDK লাইব্রেরি প্যাকেজ করে, সেগুলি ডিভাইস থেকে ব্যবহার করা হোক বা না হোক।
    • বিক্রেতা ছবির একাধিক সংস্করণ সমর্থন করার জন্য GSI-এ VNDK APEXes-এর একাধিক সংস্করণ রয়েছে।
  • আপডেটযোগ্যতা
    • প্ল্যাটফর্ম আপডেট থেকে আলাদাভাবে VNDK APEXes আপডেট করা কঠিন।
    • সিস্টেম ইমেজের মধ্যে VNDK প্যাকেজ থাকার সুবিধাগুলি হ্রাস করে ভেন্ডরের ছবিগুলি প্রায়শই হাওয়ায় (OTA) আপডেট করা হয়।
এই সমস্যাগুলির উপর ভিত্তি করে, আমরা Android 15 থেকে শুরু করে VNDK বর্জন করার সিদ্ধান্ত নিয়েছি।

VNDK অবচয় সংক্রান্ত বিশদ বিবরণ

সমস্ত VNDK লাইব্রেরি VNDK APEX-এ প্যাকেজ করা হয় এবং সিস্টেম (-ext) ছবিতে ইনস্টল করা হয়। VNDK অবমূল্যায়নের সাথে, প্রাক্তন VNDK লাইব্রেরিগুলি বিক্রেতা (বা পণ্য) ছবিতে ইনস্টল করা হয়, অন্যান্য বিক্রেতা-উপলব্ধ লাইব্রেরির মতোই। VNDK অবচয় সহ এই বৈশিষ্ট্যগুলি সরানো হয়েছে:
  • Android 15 এর জন্য VNDK APEX
  • সিস্টেমের বৈশিষ্ট্যগুলি যেগুলি লক্ষ্য VNDK-এর সংস্করণ নির্দেশ করে সেগুলি সরানো হয় যদি বিক্রেতা বা পণ্য পার্টিশনগুলি Android 15 এর জন্য তৈরি করা হয়:
    • ro.vndk.version
    • ro.product.vndk.version
  • VNDK অপ্টিমাইজেশানগুলি উপলব্ধ হবে না কারণ কোনও VNDK নেই:
    • Android Go ডিভাইসের জন্য TARGET_VNDK_USING_CORE_VARIANT
    • বিক্রেতা APEX-এর জন্য use_vndk_as_stable
  • বিক্রেতার স্ন্যাপশট, যা VNDK-এর উপর অত্যন্ত নির্ভরশীল

অবচয় থেকে ব্যতিক্রম

এই বৈশিষ্ট্যগুলি VNDK অবমূল্যায়নের সাথে পরিবর্তিত হবে না:
  • VNDK APEXes VNDK সংস্করণ 14 বা তার চেয়ে কম, যা বিদ্যমান বিক্রেতার ছবিগুলিকে সমর্থন করার জন্য প্রয়োজন৷
  • LL-NDK VNDK-এর অংশ নয়৷

কেন VNDK?

AOSP শুধুমাত্র ফ্রেমওয়ার্ক আপডেট করার অনুমতি দেয় যেখানে সিস্টেম পার্টিশনটিকে সর্বশেষ ফ্রেমওয়ার্ক সংস্করণে আপগ্রেড করা যেতে পারে যখন ভেন্ডর পার্টিশন অপরিবর্তিত থাকে। বিভিন্ন সময়ে নির্মিত হওয়া সত্ত্বেও, প্রতিটি পার্টিশনে বাইনারি একে অপরের সাথে কাজ করতে সক্ষম হতে হবে।

শুধুমাত্র ফ্রেমওয়ার্ক আপডেটে নিম্নলিখিত চ্যালেঞ্জগুলি অন্তর্ভুক্ত রয়েছে:

  • ফ্রেমওয়ার্ক মডিউল এবং বিক্রেতা মডিউলের মধ্যে নির্ভরতা । অ্যান্ড্রয়েড 8.0 এর আগে, বিক্রেতা এবং সিস্টেম পার্টিশনের মডিউল একে অপরের সাথে লিঙ্ক করতে পারে। যাইহোক, বিক্রেতা মডিউল থেকে নির্ভরতা ফ্রেমওয়ার্ক মডিউল উন্নয়নে অবাঞ্ছিত সীমাবদ্ধতা আরোপ করেছে।
  • AOSP লাইব্রেরিতে এক্সটেনশন । যখন সিস্টেম পার্টিশন একটি স্ট্যান্ডার্ড জেনেরিক সিস্টেম ইমেজ (GSI) দিয়ে প্রতিস্থাপিত হয় তখন অ্যান্ড্রয়েডের জন্য সমস্ত অ্যান্ড্রয়েড ডিভাইসকে CTS পাস করতে হবে। যাইহোক, যেহেতু বিক্রেতারা কর্মক্ষমতা বাড়ানোর জন্য বা তাদের HIDL বাস্তবায়নের জন্য অতিরিক্ত কার্যকারিতা যোগ করার জন্য AOSP লাইব্রেরিগুলিকে প্রসারিত করে, একটি স্ট্যান্ডার্ড GSI দিয়ে সিস্টেম পার্টিশনকে ফ্ল্যাশ করা একটি বিক্রেতার HIDL বাস্তবায়ন ভঙ্গ করতে পারে। এই ধরনের ভাঙ্গন প্রতিরোধের নির্দেশিকাগুলির জন্য, ভিএনডিকে এক্সটেনশনগুলি দেখুন।

এই চ্যালেঞ্জগুলি মোকাবেলা করার জন্য, Android-এ VNDK (এই বিভাগে বর্ণিত), HIDL , hwbinder, ডিভাইস ট্রি ওভারলে এবং সেপলিসি ওভারলে এর মতো বেশ কিছু বৈশিষ্ট্য রয়েছে।

VNDK-নির্দিষ্ট পদ

VNDK-সম্পর্কিত নথিগুলি নিম্নলিখিত পরিভাষা ব্যবহার করে:
  • মডিউলগুলি ভাগ করা লাইব্রেরি বা এক্সিকিউটেবলকে বোঝায়। মডিউলগুলি বিল্ড-টাইম নির্ভরতা তৈরি করে।
  • প্রক্রিয়াগুলি হল অপারেটিং সিস্টেমের কাজগুলি যা এক্সিকিউটেবল থেকে উদ্ভূত হয়। প্রক্রিয়াগুলি রান-টাইম নির্ভরতা তৈরি করে।
  • ফ্রেমওয়ার্ক -যোগ্য শর্তাবলী system পার্টিশনের সাথে সম্পর্কিত:
    • ফ্রেমওয়ার্ক এক্সিকিউটেবলগুলি /system/bin বা /system/xbin এ এক্সিকিউটেবলগুলিকে উল্লেখ করে।
    • ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরিগুলি /system/lib[64] এর অধীনে শেয়ার করা লাইব্রেরিগুলিকে বোঝায়।
    • ফ্রেমওয়ার্ক মডিউলগুলি ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি এবং ফ্রেমওয়ার্ক এক্সিকিউটেবল উভয়কেই উল্লেখ করে।
    • ফ্রেমওয়ার্ক প্রসেস হল ফ্রেমওয়ার্ক এক্সিকিউটেবল থেকে তৈরি প্রসেস, যেমন /system/bin/app_process
  • বিক্রেতা -যোগ্য পদগুলি vendor পার্টিশনের সাথে সম্পর্কিত:
    • ভেন্ডর এক্সিকিউটেবলগুলি /vendor/bin এক্সিকিউটেবলগুলিকে উল্লেখ করে
    • বিক্রেতা ভাগ করা লাইব্রেরিগুলি /vendor/lib[64] এর অধীনে ভাগ করা লাইব্রেরিগুলিকে বোঝায়।
    • বিক্রেতা মডিউলগুলি বিক্রেতা এক্সিকিউটেবল এবং বিক্রেতা শেয়ার করা লাইব্রেরি উভয়কেই উল্লেখ করে।
    • ভেন্ডর প্রসেস হল ভেন্ডর এক্সিকিউটেবল থেকে উদ্ভূত প্রসেস, যেমন /vendor/bin/android.hardware.camera.provider@2.4-service

VNDK ধারণা

একটি আদর্শ Android 8.0 এবং উচ্চতর বিশ্বে, ফ্রেমওয়ার্ক প্রক্রিয়াগুলি বিক্রেতার ভাগ করা লাইব্রেরিগুলিকে লোড করে না, সমস্ত বিক্রেতার প্রক্রিয়াগুলি শুধুমাত্র বিক্রেতার ভাগ করা লাইব্রেরিগুলিকে (এবং ফ্রেমওয়ার্ক ভাগ করা লাইব্রেরির একটি অংশ) লোড করে এবং ফ্রেমওয়ার্ক প্রক্রিয়া এবং বিক্রেতা প্রক্রিয়াগুলির মধ্যে যোগাযোগগুলি HIDL এবং হার্ডওয়্যার দ্বারা নিয়ন্ত্রিত হয়৷ বাইন্ডার

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

নিম্নলিখিত বিভাগগুলি বিশদভাবে বর্ণনা করে যে কীভাবে VNDK বিক্রেতা এবং একই-প্রক্রিয়া HALs (SP-HALs) এর জন্য ফ্রেমওয়ার্ক ভাগ করা লাইব্রেরি পরিচালনা করে।

ফ্রেমওয়ার্ক বিক্রেতার জন্য ভাগ করা লাইব্রেরি

এই বিভাগটি ভাগ করা লাইব্রেরির শ্রেণীবিভাগের মানদণ্ড বর্ণনা করে যা বিক্রেতা প্রক্রিয়াগুলিতে অ্যাক্সেসযোগ্য। একাধিক অ্যান্ড্রয়েড রিলিজ জুড়ে বিক্রেতা মডিউল সমর্থন করার জন্য দুটি পদ্ধতি রয়েছে:

  1. ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরির ABIs/API গুলিকে স্থিতিশীল করুন । নতুন ফ্রেমওয়ার্ক মডিউল এবং পুরানো বিক্রেতা মডিউল একই ভাগ করা লাইব্রেরি ব্যবহার করতে পারে মেমরি পদচিহ্ন এবং স্টোরেজ আকার কমাতে। একটি অনন্য শেয়ার্ড লাইব্রেরি বেশ কয়েকটি ডবল-লোডিং সমস্যা এড়ায়। যাইহোক, স্থিতিশীল ABIs/APIs বজায় রাখার জন্য ডেভেলপমেন্ট খরচ বেশি এবং প্রতিটি ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি দ্বারা রপ্তানি করা সমস্ত ABIs/API গুলিকে স্থিতিশীল করা অবাস্তব।
  2. পুরানো ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি কপি করুন । বাইন্ডার, সকেট, পাইপ, ভাগ করা মেমরি, ভাগ করা ফাইল এবং সিস্টেম বৈশিষ্ট্য সহ (তবে সীমাবদ্ধ নয়) ফ্রেমওয়ার্ক মডিউল এবং বিক্রেতা মডিউলগুলির মধ্যে যোগাযোগের সমস্ত প্রক্রিয়া হিসাবে সংজ্ঞায়িত সাইড চ্যানেলগুলির বিরুদ্ধে শক্তিশালী সীমাবদ্ধতার সাথে আসে। কমিউনিকেশন প্রোটোকল হিমায়িত এবং স্থিতিশীল না হলে (যেমন hwbinder এর মাধ্যমে HIDL) কোনো যোগাযোগ থাকবে না। শেয়ার্ড লাইব্রেরি ডাবল-লোড করার ফলে সমস্যাও হতে পারে; উদাহরণস্বরূপ, যদি নতুন লাইব্রেরি দ্বারা তৈরি একটি বস্তু পুরানো লাইব্রেরি থেকে ফাংশনে পাস করা হয়, তাহলে একটি ত্রুটি ঘটতে পারে কারণ এই লাইব্রেরিগুলি বস্তুটিকে ভিন্নভাবে ব্যাখ্যা করতে পারে।

ভাগ করা লাইব্রেরির বৈশিষ্ট্যের উপর নির্ভর করে বিভিন্ন পদ্ধতি ব্যবহার করা হয়। ফলস্বরূপ, ফ্রেমওয়ার্ক ভাগ করা লাইব্রেরিগুলিকে তিনটি উপ-শ্রেণীতে শ্রেণীবদ্ধ করা হয়েছে:

  • LL-NDK লাইব্রেরিগুলি হল ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি যা স্থিতিশীল বলে পরিচিত৷ তাদের বিকাশকারীরা তাদের API/ABI স্থিতিশীলতা বজায় রাখতে প্রতিশ্রুতিবদ্ধ।
    • LL-NDK নিম্নলিখিত লাইব্রেরিগুলিকে অন্তর্ভুক্ত করে: libEGL.so , libGLESv1_CM.so , libGLESv2.so , libGLESv3.so , libandroid_net.so libnativewindow.so libc.so , libdl.so , liblog.so , libm.so , libneuralnetworks.so , libsync.so , libvndksupport.so , এবং libvulkan.so ,
  • যোগ্য VNDK লাইব্রেরি (VNDK) হল ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি যা দুবার কপি করা নিরাপদ। ফ্রেমওয়ার্ক মডিউল এবং ভেন্ডর মডিউল তাদের নিজস্ব কপির সাথে লিঙ্ক করতে পারে। একটি ফ্রেমওয়ার্ক ভাগ করা লাইব্রেরি একটি যোগ্য VNDK লাইব্রেরি হয়ে উঠতে পারে যদি এটি নিম্নলিখিত মানদণ্ডগুলিকে সন্তুষ্ট করে:
    • এটি ফ্রেমওয়ার্ক থেকে/থেকে IPC পাঠায়/গ্রহণ করে না।
    • এটি ART ভার্চুয়াল মেশিনের সাথে সম্পর্কিত নয়।
    • এটি অস্থির ফাইল বিন্যাস সহ ফাইল/পার্টিশন পড়া/লেখা যায় না।
    • এটির বিশেষ সফ্টওয়্যার লাইসেন্স নেই যার জন্য আইনি পর্যালোচনা প্রয়োজন৷
    • এর কোড মালিকের বিক্রেতা ব্যবহারে আপত্তি নেই।
  • ফ্রেমওয়ার্ক-অনলি লাইব্রেরি (FWK-ONLY) হল ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি যা উপরে উল্লিখিত বিভাগের অন্তর্গত নয়। এই লাইব্রেরি:
    • ফ্রেমওয়ার্ক অভ্যন্তরীণ বাস্তবায়ন বিবরণ বিবেচনা করা হয়.
    • বিক্রেতা মডিউল দ্বারা অ্যাক্সেস করা উচিত নয়।
    • অস্থির ABIs/API এবং কোন API/ABI সামঞ্জস্যের গ্যারান্টি নেই।
    • কপি করা হয় না।

একই-প্রক্রিয়া HAL (SP-HAL)

একই-প্রসেস HAL ( SP-HAL ) হল পূর্বনির্ধারিত HAL-এর একটি সেট যা ভেন্ডর শেয়ার্ড লাইব্রেরি হিসাবে প্রয়োগ করা হয় এবং ফ্রেমওয়ার্ক প্রসেসে লোড করা হয়। SP-HALs একটি লিঙ্কার নেমস্পেস দ্বারা বিচ্ছিন্ন হয় (লাইব্রেরি এবং চিহ্নগুলিকে নিয়ন্ত্রণ করে যা ভাগ করা লাইব্রেরিতে দৃশ্যমান)। SP-HALs শুধুমাত্র LL-NDK এবং VNDK-SP-এর উপর নির্ভর করতে হবে।

VNDK-SP হল যোগ্য VNDK লাইব্রেরির একটি পূর্বনির্ধারিত উপসেট। VNDK-SP লাইব্রেরিগুলি যত্ন সহকারে পর্যালোচনা করা হয় যাতে VNDK-SP লাইব্রেরিগুলিকে ফ্রেমওয়ার্ক প্রক্রিয়ার মধ্যে ডবল-লোড করা সমস্যা সৃষ্টি না করে। SP-HALs এবং VNDK-SP উভয়ই Google দ্বারা সংজ্ঞায়িত।

নিম্নলিখিত গ্রন্থাগারগুলি SP-HALs অনুমোদিত:

  • libGLESv1_CM_${driver}.so
  • libGLESv2_${driver}.so
  • libGLESv3_${driver}.so
  • libEGL_${driver}.so
  • vulkan.${driver}.so
  • android.hardware.renderscript@1.0-impl.so
  • android.hardware.graphics.mapper@2.0-impl.so

VNDK-SP লাইব্রেরিগুলি তাদের Android.bp ফাইলগুলিতে vndk: { support_system_process: true } নির্দিষ্ট করে৷ যদি vndk: {private:true} ও নির্দিষ্ট করা হয়, তাহলে এই লাইব্রেরিগুলিকে VNDK-SP-Private বলা হয় এবং সেগুলি SP-HALS-এর কাছে অদৃশ্য।

নিম্নলিখিতগুলি RS ব্যতিক্রম সহ ফ্রেমওয়ার্ক-শুধু লাইব্রেরি (FWK-ONLY-RS) :

  • libft2.so (রেন্ডারস্ক্রিপ্ট)
  • libmediandk.so (রেন্ডারস্ক্রিপ্ট)

VNDK সংস্করণ

VNDK ভাগ করা লাইব্রেরিগুলি সংস্করণ করা হয়েছে:

  • ro.vndk.version সিস্টেম প্রপার্টি স্বয়ংক্রিয়ভাবে /vendor/default.prop এ যোগ করা হয়।
  • VNDK এবং VNDK-SP ভাগ করা লাইব্রেরিগুলি একটি VNDK apex com.android.vndk.v${ro.vndk.version} হিসাবে ইনস্টল করা হয়েছে এবং /apex/com.android.vndk.v${ro.vndk.version} এ মাউন্ট করা হয়েছে।

ro.vndk.version এর মান নিচের অ্যালগরিদম দ্বারা বেছে নেওয়া হয়েছে:

  • যদি BOARD_VNDK_VERSION current সমান না হয়, তাহলে BOARD_VNDK_VERSION ব্যবহার করুন।
  • যদি BOARD_VNDK_VERSION current সমান হয়:
    • PLATFORM_VERSION_CODENAME REL হলে, PLATFORM_SDK_VERSION ব্যবহার করুন (যেমন 28 )।
    • অন্যথায়, PLATFORM_VERSION_CODENAME ব্যবহার করুন (যেমন P )।

ভেন্ডর টেস্ট স্যুট (VTS)

Android Vendor Test Suite (VTS) একটি অ-খালি ro.vndk.version সম্পত্তির নির্দেশ দেয়৷ সদ্য লঞ্চ হওয়া ডিভাইস এবং আপগ্রেড ডিভাইস উভয়কেই অবশ্যই ro.vndk.version সংজ্ঞায়িত করতে হবে। কিছু VNDK পরীক্ষার ক্ষেত্রে (যেমন VtsVndkFilesTest এবং VtsVndkDependencyTest ) মিলে যাওয়া উপযুক্ত VNDK লাইব্রেরি ডেটা সেটগুলি লোড করতে ro.vndk.version বৈশিষ্ট্যের উপর নির্ভর করে।