VNDK এক্সটেনশন

Android ডিভাইস প্রস্তুতকারকরা বিভিন্ন কারণে AOSP লাইব্রেরির সোর্স কোড পরিবর্তন করে। কিছু ভেন্ডর AOSP লাইব্রেরিতে ফাংশন আবার প্রয়োগ করে পারফর্ম্যান্স বুস্ট করে, অন্যদিকে অন্যান্য ভেন্ডর AOSP লাইব্রেরিতে নতুন হুক, নতুন API বা নতুন কার্যকারিতা যোগ করে। এই বিভাগে CTS/VTS-এ কোনও সমস্যা না করে AOSP লাইব্রেরি এক্সটেন্ড করার নির্দেশিকা দেওয়া হয়েছে।

ড্রপ-ইন রিপ্লেসমেন্ট

সব পরিবর্তিত শেয়ার করা লাইব্রেরি অবশ্যই বাইনারি-কম্প্যাটিবল, ড্রপ-ইন রিপ্লেসমেন্ট হতে হবে। আগে থেকে থাকা সব AOSP ব্যবহারকারীকে রিকম্পাইল না করেই পরিবর্তিত শেয়ার করা লাইব্রেরি ব্যবহার করতে পারতে হবে। এই প্রয়োজনীয়তার অর্থ হল:

  • AOSP ফাংশন সরানো যাবে না।
  • এই ধরনের স্ট্রাকচার ব্যবহারকারীদের কাছে প্রকাশ করা হলে, সেগুলি পরিবর্তন করা যাবে না।
  • ফাংশনের পূর্বশর্ত আরও কঠোর করা যাবে না।
  • ফাংশনগুলিকে অবশ্যই সমতুল্য কার্যকারিতা প্রদান করতে হবে।
  • ফাংশনের পোস্ট-কন্ডিশন দুর্বল করা যাবে না।

মডিউলের বর্ধিত শ্রেণীবিভাগ

মডিউলগুলি যে ফাংশনালিটি নির্ধারণ করে এবং ব্যবহার করে সেই অনুযায়ী সেগুলিকে শ্রেণীবদ্ধ করুন।

মনে রাখবেন: এখানে API/ABI-এর পরিবর্তে ফাংশনালিটি ব্যবহার করা হয়েছে, কারণ কোনও API/ABI পরিবর্তন না করেই ফাংশনালিটি যোগ করা সম্ভব।

মডিউলে সংজ্ঞায়িত কার্যকারিতার উপর নির্ভর করে, মডিউলগুলিকে DA-মডিউল এবং DX-মডিউল হিসেবে শ্রেণীবদ্ধ করা যেতে পারে:

  • Defining-only-AOSP মডিউল (DA-মডিউল) নতুন কোনও কার্যকারিতা সংজ্ঞায়িত করে না যা AOSP-তে নেই।
    • উদাহরণ ১. একটি অক্ষত অপরিবর্তিত AOSP লাইব্রেরি হল একটি DA-মডিউল।
    • উদাহরণ ২. কোনও ভেন্ডর যদি SIMD নির্দেশাবলী সহ libcrypto.so ফাংশনগুলি আবার লেখে (নতুন ফাংশন যোগ না করে ), তাহলে পরিবর্তিত libcrypto.so একটি DA-মডিউল হবে।
  • ডিফাইনিং-এক্সটেনশন মডিউল (DX-মডিউল) হয় নতুন কার্যকারিতা নির্ধারণ করে অথবা AOSP-তে এর কোনও সমতুল্য নেই।
    • উদাহরণ ১. কোনও ভেন্ডর যদি কিছু ইন্টার্নাল ডেটা অ্যাক্সেস করার জন্য libjpeg.so-এ হেল্পার ফাংশন যোগ করে, তাহলে পরিবর্তিত libjpeg.so একটি DX-Lib হবে এবং নতুন যোগ করা ফাংশনটি লাইব্রেরির এক্সটেন্ডেড অংশ হবে।
    • উদাহরণ ২। কোনও ভেন্ডর যদি libfoo.so নামের কোনও নন-AOSP লাইব্রেরি ডিফাইন করে, তাহলে libfoo.so একটি DX-Lib হবে।

কোনও মডিউলের ব্যবহার করা কার্যকারিতার উপর নির্ভর করে, মডিউলগুলিকে UA-মডিউল এবং UX-মডিউল-এ শ্রেণীবদ্ধ করা যেতে পারে।

  • শুধুমাত্র-AOSP মডিউল (UA-মডিউল) ব্যবহার করা শুধুমাত্র AOSP ফাংশনালিটি ব্যবহার করে তাদের প্রয়োগে। এগুলি কোনও নন-AOSP এক্সটেনশনের উপর নির্ভর করে না।
    • উদাহরণ ১. পরিবর্তন না করা অক্ষত AOSP লাইব্রেরি হল একটি UA-মডিউল।
    • উদাহরণ ২. পরিবর্তিত শেয়ার করা লাইব্রেরি libjpeg.so যদি শুধুমাত্র অন্যান্য AOSP API-এর উপর নির্ভর করে, তাহলে এটি একটি UA-মডিউল হবে।
  • এক্সটেনশন মডিউল (UX-Module) ব্যবহার করা তাদের প্রয়োগের ক্ষেত্রে কিছু নন-AOSP ফাংশনালিটির উপর নির্ভর করে।
    • উদাহরণ ১. যদি কোনও পরিবর্তিত libjpeg.so libjpeg_turbo2.so নামের অন্য কোনও নন-AOSP লাইব্রেরির উপর নির্ভর করে, তাহলে পরিবর্তিত libjpeg.so একটি UX-মডিউল হবে।
    • উদাহরণ ২. কোনও ভেন্ডর যদি তার পরিবর্তিত libexif.so-এ নতুন ফাংশন যোগ করেন এবং তার পরিবর্তিত libjpeg.so, libexif.so থেকে নতুন যোগ করা ফাংশন ব্যবহার করে, তাহলে তার পরিবর্তিত libjpeg.so একটি UX-মডিউল হবে।

সংজ্ঞা ও ব্যবহার একে অপরের থেকে আলাদা:

ব্যবহৃত কার্যকারিতা
শুধুমাত্র AOSP (UA) এক্সটেন্ডেড (UX)
সংজ্ঞায়িত কার্যকারিতা Only AOSP (DA) DAUA DAUX
এক্সটেন্ডেড (DX) DXUA DXUX

VNDK এক্সটেনশন মেকানিজম

যেসব ভেন্ডর মডিউল এক্সটেন্ডেড কার্যকারিতার উপর নির্ভর করে সেগুলি কাজ করবে না কারণ একই নামের AOSP লাইব্রেরিতে এক্সটেন্ডেড কার্যকারিতা নেই। এক্সটেন্ডেড ফাংশনালিটির উপর সরাসরি বা পরোক্ষভাবে নির্ভর করলে, ভেন্ডরকে DAUX, DXUA এবং DXUX শেয়ারড লাইব্রেরি ভেন্ডর পার্টিশনে কপি করতে হবে (ভেন্ডর প্রসেস সবসময় প্রথমে ভেন্ডর পার্টিশনে শেয়ারড লাইব্রেরি খোঁজে)। তবে, LL-NDK লাইব্রেরি কপি করা যাবে না, তাই ভেন্ডর মডিউলকে অবশ্যই পরিবর্তিত LL-NDK লাইব্রেরির মাধ্যমে সংজ্ঞায়িত বর্ধিত কার্যকারিতার উপর নির্ভর করা উচিত নয়।

DAUA শেয়ার করা লাইব্রেরি সিস্টেম পার্টিশনে থাকতে পারে যদি সংশ্লিষ্ট AOSP লাইব্রেরি একই কার্যকারিতা প্রদান করতে পারে এবং ভেন্ডর মডিউল কাজ করা চালিয়ে যায় যখন সিস্টেম পার্টিশন জেনেরিক সিস্টেম ইমেজ (GSI) দ্বারা ওভাররাইট করা হয়।

ড্রপ-ইন রিপ্লেসমেন্ট গুরুত্বপূর্ণ কারণ GSI-তে পরিবর্তন না করা VNDK লাইব্রেরি, নামের সংঘর্ষের কারণে পরিবর্তিত শেয়ার করা লাইব্রেরির সাথে লিঙ্ক করবে। AOSP লাইব্রেরিগুলি যদি API/ABI-এর সাথে বেমানান উপায়ে পরিবর্তন করা হয়, তাহলে GSI-তে AOSP লাইব্রেরিগুলি লিঙ্ক করতে ব্যর্থ হতে পারে বা এর ফলে অনির্ধারিত আচরণ হতে পারে।