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

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

ভেন্ডর নেটিভ ডেভেলপমেন্ট কিট (VNDK) হল লাইব্রেরির একটি সেট যা শুধুমাত্র বিক্রেতাদের জন্য তাদের HALs বাস্তবায়নের জন্য। VNDK সিস্টেম. system.img এ পাঠানো হয় এবং রানটাইমে বিক্রেতা কোডের সাথে গতিশীলভাবে সংযুক্ত থাকে।

কেন VNDK?

অ্যান্ড্রয়েড 8.0 এবং উচ্চতর ফ্রেমওয়ার্ক-কেবল আপডেটগুলি সক্ষম করে যেখানে সিস্টেম পার্টিশনটি সর্বশেষ সংস্করণে আপগ্রেড করা যেতে পারে যখন বিক্রেতা পার্টিশনগুলি অপরিবর্তিত থাকে। এটি বোঝায় যে বিভিন্ন সময়ে নির্মিত বাইনারিগুলি একে অপরের সাথে কাজ করতে সক্ষম হতে হবে; VNDK Android রিলিজ জুড়ে API/ABI পরিবর্তনগুলি কভার করে।

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

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

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

VNDK সম্পদ

এই বিভাগে নিম্নলিখিত VNDK সংস্থানগুলি অন্তর্ভুক্ত রয়েছে:

  • VNDK ধারণা (নীচে) ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরি, একই-প্রক্রিয়া HALs (SP-HALs), এবং VNDK পরিভাষা বর্ণনা করে।
  • VNDK এক্সটেনশনগুলি বিক্রেতা-নির্দিষ্ট পরিবর্তনগুলিকে বিভাগে শ্রেণীবদ্ধ করে। উদাহরণস্বরূপ, বর্ধিত কার্যকারিতা সহ লাইব্রেরি যেখানে বিক্রেতা মডিউল নির্ভর করে সেগুলি অবশ্যই বিক্রেতা পার্টিশনে অনুলিপি করা উচিত, তবে ABI-অসঙ্গত পরিবর্তনগুলি নিষিদ্ধ।
  • VNDK বিল্ড সিস্টেম সাপোর্ট বিল্ড সিস্টেম কনফিগারেশন এবং মডিউল সংজ্ঞা সিনট্যাক্স বর্ণনা করে যা VNDK এর সাথে সম্পর্কিত।
  • VNDK ডেফিনিশন টুল আপনার সোর্স ট্রিকে Android 8.0 এবং উচ্চতর সংস্করণে স্থানান্তর করতে সাহায্য করে।
  • লিঙ্কার নেমস্পেস শেয়ার্ড লাইব্রেরি লিঙ্কেজের উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে।
  • ডিরেক্টরি, নিয়ম এবং সিপলিসি অ্যান্ড্রয়েড 8.0 এবং উচ্চতর, VNDK নিয়ম এবং সংশ্লিষ্ট সিপলিসি চলমান ডিভাইসগুলির জন্য ডিরেক্টরি কাঠামোকে সংজ্ঞায়িত করে।
  • VNDK ডিজাইন উপস্থাপনাটি Android 8.0 এবং উচ্চতর সংস্করণে ব্যবহৃত মৌলিক VDNK ধারণাগুলিকে চিত্রিত করে৷

VNDK ধারণা

একটি আদর্শ অ্যান্ড্রয়েড 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 , libc.so , libdl.so , liblog.so , libm.so libneuralnetworks.so libnativewindow.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 লাইব্রেরিগুলি তাদের vndk: { support_system_process: true } নির্দিষ্ট করে৷ যদি vendor_available: false ও নির্দিষ্ট করা হয়, তাহলে এই লাইব্রেরিগুলিকে VNDK-SP-Private বলা হয় এবং সেগুলি SP-HALS- এর কাছে অদৃশ্য।

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

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

VNDK পরিভাষা

  • মডিউলগুলি ভাগ করা লাইব্রেরি বা এক্সিকিউটেবলগুলিকে বোঝায়।
  • প্রক্রিয়াগুলি হল অপারেটিং সিস্টেমের কাজগুলি যা এক্সিকিউটেবল থেকে উদ্ভূত হয়।
  • ফ্রেমওয়ার্ক -যোগ্য পদগুলি সিস্টেম পার্টিশন সম্পর্কিত ধারণাগুলিকে নির্দেশ করে।
  • বিক্রেতা -যোগ্য পদগুলি বিক্রেতা পার্টিশন সম্পর্কিত ধারণাগুলিকে বোঝায়।

উদাহরণ স্বরূপ:

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

VNDK সংস্করণ

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

  • ro.vndk.version সিস্টেম প্রপার্টি স্বয়ংক্রিয়ভাবে /vendor/default.prop এ যোগ করা হয়।
  • VNDK শেয়ার্ড লাইব্রেরিগুলি /system/lib[64]/vndk-${ro.vndk.version} এ ইনস্টল করা হয়েছে।
  • VNDK-SP ভাগ করা লাইব্রেরিগুলি /system/lib[64]/vndk-sp-${ro.vndk.version} এ ইনস্টল করা হয়েছে।
  • ডায়নামিক লিঙ্কার কনফিগারেশন ফাইলটি /system/etc/ld.config.${ro.vndk.version}.txt এ ইনস্টল করা হয়েছে।

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 ) ব্যবহার করুন।

ডিভাইস আপগ্রেড করা হচ্ছে

যদি একটি Android 8.x ডিভাইস BOARD_VNDK_VERSION ছাড়া তৈরি করে VNDK রান-টাইম এনফোর্সমেন্ট অক্ষম করে, তাহলে Android 9 এ আপগ্রেড করার সময় এটি BoardConfig.mkPRODUCT_USE_VNDK_OVERRIDE := false যোগ করতে পারে।

PRODUCT_USE_VNDK_OVERRIDE false হলে, ro.vndk.lite প্রপার্টি স্বয়ংক্রিয়ভাবে /vendor/default.prop এ যোগ হবে এবং এর মান true হবে। ফলস্বরূপ, ডায়নামিক লিঙ্কার /system/etc/ld.config.vndk_lite.txt থেকে লিঙ্কার নেমস্পেস কনফিগারেশন লোড করবে, যা শুধুমাত্র SP-HAL এবং VNDK-SP কে আলাদা করে।

একটি Android 7.0 বা নিম্নতর ডিভাইসকে Android 9 এ আপগ্রেড করতে, BoardConfig.mk PRODUCT_TREBLE_LINKER_NAMESPACES_OVERRIDE := false যোগ করুন।

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

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

ro.product.first_api_level প্রপার্টি 27-এর বেশি হলে, ro.vndk.lite প্রপার্টি অবশ্যই সংজ্ঞায়িত করা যাবে না। একটি নতুন-লঞ্চ হওয়া Android 9 ডিভাইসে ro.vndk.lite VtsTreblePlatformVersionTest হবে৷

নথির ইতিহাস

এই বিভাগটি VNDK ডকুমেন্টেশনের পরিবর্তনগুলি ট্র্যাক করে।

অ্যান্ড্রয়েড 9 পরিবর্তন

  • VNDK সংস্করণ বিভাগ যোগ করুন।
  • VTS বিভাগ যোগ করুন।
  • কিছু VNDK বিভাগের নাম পরিবর্তন করা হয়েছে:
    • LL-NDK-Indirect এর নাম পরিবর্তন করে LL-NDK-প্রাইভেট করা হয়েছে।
    • VNDK-Indirect-এর নাম পরিবর্তন করে VNDK-প্রাইভেট করা হয়েছে।
    • VNDK-SP-Indirect-Private-এর নাম পরিবর্তন করে VNDK-SP-প্রাইভেট করা হয়েছে।
    • VNDK-SP-পরোক্ষ সরানো হয়েছে।

অ্যান্ড্রয়েড 8.1 পরিবর্তন

  • SP-NDK লাইব্রেরিগুলিকে LL-NDK লাইব্রেরিতে একীভূত করা হয়েছে৷
  • RS নেমস্পেস বিভাগে libui.so দিয়ে libft2.so প্রতিস্থাপন করুন। libui.so অন্তর্ভুক্ত করার জন্য এটি একটি ত্রুটি ছিল।
  • LL-NDK লাইব্রেরিতে libGLESv3.so এবং libandroid_net.so যোগ করুন।
  • VNDK-SP লাইব্রেরিতে libion.so যোগ করুন।
  • LL-NDK লাইব্রেরি থেকে libstdc++.so সরান। পরিবর্তে libc++.so ব্যবহার করুন। স্বতন্ত্র টুলচেইনের কিছু সংস্করণ ডিফল্ট লিঙ্কার ফ্ল্যাগে -lstdc++ যোগ করতে পারে। ডিফল্ট নিষ্ক্রিয় করতে, -nodefaultlibs -lc -lm -ldl LDFLAGS করুন।
  • LL-NDK থেকে VNDK-SP লাইব্রেরিতে libz.so সরান। কিছু কনফিগারেশনে, libz.so LL-NDK হওয়া চালিয়ে যেতে পারে। যাইহোক, কোন পর্যবেক্ষণযোগ্য পার্থক্য থাকা উচিত নয়।