VNDK এক্সটেনশন

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

ড্রপ-ইন প্রতিস্থাপন

সমস্ত পরিবর্তিত শেয়ার্ড লাইব্রেরি অবশ্যই বাইনারি-সামঞ্জস্যপূর্ণ হতে হবে, তাদের AOSP কাউন্টারপার্টের ড্রপ-ইন প্রতিস্থাপন । সমস্ত বিদ্যমান AOSP ব্যবহারকারীদের অবশ্যই সংশোধিত শেয়ার্ড লাইব্রেরিটি পুনঃসংকলন ছাড়াই ব্যবহার করতে সক্ষম হতে হবে। এই প্রয়োজনীয়তা নিম্নলিখিত বোঝায়:

  • AOSP ফাংশন অপসারণ করা উচিত নয়।
  • কাঠামো পরিবর্তন করা উচিত নয় যদি এই ধরনের কাঠামো তাদের ব্যবহারকারীদের কাছে প্রকাশ করা হয়।
  • ফাংশন পূর্ব শর্ত শক্তিশালী করা উচিত নয়.
  • ফাংশন সমতুল্য কার্যকারিতা প্রদান করা আবশ্যক.
  • ফাংশন পরবর্তী অবস্থা দুর্বল করা উচিত নয়.

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

তারা সংজ্ঞায়িত এবং ব্যবহার করে এমন কার্যকারিতা অনুসারে মডিউলগুলিকে শ্রেণিবদ্ধ করুন।

দ্রষ্টব্য : এখানে API/ABI-এর পরিবর্তে কার্যকারিতা ব্যবহার করা হয়েছে কারণ কোনো API/ABI পরিবর্তন না করেই কার্যকারিতা যোগ করা সম্ভব।

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

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

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

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

সংজ্ঞা এবং ব্যবহার একে অপরের থেকে স্বাধীন:

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

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

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

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

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