VNDK স্ন্যাপশট ডিজাইন

সিস্টেম ইমেজ, ভেন্ডর ইমেজকে সঠিক VNDK লাইব্রেরি প্রদান করার জন্য VNDK স্ন্যাপশট ব্যবহার করতে পারে, এমনকি সিস্টেম ও ভেন্ডর ইমেজ যদি Android-এর আলাদা আলাদা ভার্সন থেকে তৈরি করা হয় তাহলেও। VNDK স্ন্যাপশট তৈরি করতে, স্ন্যাপশট হিসেবে VNDK লাইব্রেরি ক্যাপচার করতে হবে এবং সেগুলিকে ভার্সন নম্বর দিয়ে চিহ্নিত করতে হবে। ভেন্ডর ইমেজ নির্দিষ্ট VNDK ভার্সনের সাথে লিঙ্ক করা থাকতে পারে যা ভেন্ডর ইমেজের মডিউলগুলির জন্য প্রয়োজনীয় ABI প্রদান করে। তবে, একই VNDK ভার্সনের মধ্যে, VNDK লাইব্রেরিগুলি অবশ্যই ABI-স্টেবল হতে হবে।

VNDK স্ন্যাপশট ডিজাইনে বর্তমান সিস্টেম ইমেজ থেকে VNDK স্ন্যাপশটের প্রি-বিল্ড জেনারেট করা এবং নতুন Android ভার্সনের সিস্টেম পার্টিশনে সেইসব প্রি-বিল্ড লাইব্রেরি ইনস্টল করার পদ্ধতি অন্তর্ভুক্ত।

VNDK লাইব্রেরি সম্পর্কে

Android 8.0-তে চালু করা HIDL-HAL সিস্টেম ও ভেন্ডর পার্টিশনের জন্য আলাদা আলাদা আপগ্রেড করার সুবিধা দেয়। VNDK লাইব্রেরির সেট (VNDK-কোর, VNDK-SP ও LL-NDK) নির্ধারণ করে যেগুলির সাথে ভেন্ডর কোড লিঙ্ক করতে পারে এবং VNDK সেটে নেই এমন লাইব্রেরি ব্যবহার করা থেকে ভেন্ডরদের ব্লক করে। এর ফলে, ভেন্ডর ইমেজে সিস্টেম ইমেজে সঠিক VNDK সেট প্রদান করা হলে, ভেন্ডর ইমেজ তৈরি ও রান করা যেতে পারে।

VNDK-কোর

লাইব্রেরির VNDK-কোর সেটটি /system/lib[64]/vndk-${VER}-এ ইনস্টল করা আছে এবং শুধুমাত্র API লেভেল ${VER}-এর সমান হলে তবেই ভেন্ডর প্রসেসের জন্য উপলভ্য। সিস্টেম প্রসেস এইসব লাইব্রেরি ব্যবহার নাও করতে পারে এবং পরিবর্তে /system/lib[64]-এ ইনস্টল করা লাইব্রেরি ব্যবহার করতে হবে। কারণ প্রতিটি প্রসেসের জন্য নেমস্পেস সংক্রান্ত কঠোর বিধিনিষেধের কারণে, VNDK-কোর লাইব্রেরি ডুয়াল-লোডিং থেকে সুরক্ষিত থাকে।

VNDK-core-এ লাইব্রেরি অন্তর্ভুক্ত করতে, নিম্নলিখিতগুলি Android.bp-তে যোগ করুন:

vendor_available: true,
vndk: {
    enabled: true,
},

VNDK-SP

VNDK-SP লাইব্রেরি /system/lib[64]/vndk-sp-${VER}-এ ইনস্টল করা হয় এবং ভেন্ডর প্রসেস ও সিস্টেম প্রসেসের জন্য উপলভ্য থাকে (ভেন্ডর পার্টিশনে ইনস্টল করা SP-HAL লাইব্রেরির মাধ্যমে)। VNDK-SP লাইব্রেরি ডুয়াল-লোড হতে পারে।

VNDK-SP-তে লাইব্রেরি অন্তর্ভুক্ত করতে, Android.bp-তে নিম্নলিখিতগুলি যোগ করুন:

vendor_available: true,
vndk: {
    enabled: true,
    support_system_process: true,
},

LL-NDK

LL-NDK লাইব্রেরি /system/lib[64]-এ ইনস্টল করা আছে। LL-NDK লাইব্রেরির আগে থেকে বেছে নেওয়া সিম্বল অ্যাক্সেস করতে ভেন্ডর মডিউল LL-NDK স্টাব লাইব্রেরি ব্যবহার করতে পারে। LL-NDK লাইব্রেরিগুলিকে অবশ্যই ব্যাকওয়ার্ড-কম্প্যাটিবল এবং ABI-স্টেবল হতে হবে, যাতে ভেন্ডর মডিউলের পুরনো ভার্সন LL-NDK লাইব্রেরির নতুন ভার্সন ব্যবহার করতে পারে। LL-NDK-এর ABI-স্থিতিশীল বৈশিষ্ট্য থাকার কারণে, VNDK স্ন্যাপশটে পুরনো ভেন্ডর ইমেজের জন্য LL-NDK লাইব্রেরি অন্তর্ভুক্ত করার প্রয়োজন নেই।

VNDK স্ন্যাপশট সম্পর্কে

Android 8.1-এ সোর্স কোড থেকে তৈরি করা VNDK লাইব্রেরি অন্তর্ভুক্ত ছিল। তবে, Android-এর পরবর্তী ভার্সনের জন্য, প্রতিটি VNDK ভার্সন অবশ্যই স্ন্যাপশট হিসেবে ক্যাপচার করতে হবে এবং পুরনো ভেন্ডর ইমেজের সাথে লিঙ্ক করার সুবিধা চালু করতে প্রি-বিল্ড হিসেবে প্রদান করতে হবে।

Android 9 থেকে শুরু করে, Android-এর নতুন ভার্সনে Android সোর্স কোডে পুরনো ভার্সনের জন্য VNDK-core ও VNDK-SP ডিরেক্টরির অন্তত একটি করে স্ন্যাপশট অন্তর্ভুক্ত থাকবে। বিল্ড করার সময়, প্রয়োজনীয় স্ন্যাপশট /system/lib[64]/vndk-${VER} এবং /system/lib[64]/vndk-sp-${VER}-এ ইনস্টল করা হবে (ডিরেক্টরি যা ভেন্ডর পার্টিশন ব্যবহার করতে পারে), যেখানে ${VER} হল স্ট্রিং ভেরিয়েবল যা VNDK স্ন্যাপশটের ভার্সনের নাম দেখায়।

প্রতিটি VNDK ভার্সনের জন্য VNDK স্ন্যাপশট লাইব্রেরি আলাদা হতে পারে, তাই VNDK স্ন্যাপশটে লিঙ্কার নেমস্পেস কনফিগারেশনও অন্তর্ভুক্ত থাকে, যা etc/ld.config.${VER}.txt, /etc/llndk.libraries.${VER}.txt এবং /etc/vndksp.libraries.${VER}.txt হিসেবে ইনস্টল করা হয়।

যেমন: সিস্টেম ও ভেন্ডর ইমেজ আপগ্রেড করা

কোনও স্ন্যাপশটের প্রয়োজন নেই; VNDK স্ন্যাপশটের জন্য অতিরিক্ত কনফিগারেশন ছাড়াই বিল্ড করুন।

যেমন: শুধুমাত্র সিস্টেম ইমেজ আপগ্রেড করা

সিস্টেম ইমেজে ভেন্ডর ইমেজের জন্য VNDK স্ন্যাপশট ও লিঙ্কার নেমস্পেস কনফিগারেশন ফাইল থাকতে হবে। লিঙ্কার নেমস্পেস কনফিগারেশন ফাইলগুলি /system/lib[64]/vndk-${VER} এবং /system/lib[64]/vndk-sp-${VER}-এ VNDK লাইব্রেরি সার্চ করার জন্য অটোমেটিক কনফিগার করা হয়।

ছবি ১. শুধুমাত্র সিস্টেম আপগ্রেড করা হচ্ছে

যেমন: সিস্টেম ইমেজ আপগ্রেড করা, ভেন্ডর ইমেজে সামান্য পরিবর্তন করা

VNDK স্ন্যাপশটের বিপরীতে ভেন্ডর ইমেজ তৈরি করা এখনও কাজ করে না, তাই আপনাকে অবশ্যই আসল সোর্স কোড সহ ভেন্ডর ইমেজ আলাদাভাবে তৈরি করতে হবে, তারপরে আগের উদাহরণে বর্ণিত পদ্ধতিতে সিস্টেম ইমেজ আপগ্রেড করতে হবে।

VNDK স্ন্যাপশট আর্কিটেকচার

Android 9 সিস্টেম ইমেজকে Android 8.1 ভেন্ডর ইমেজের সাথে মানানসই করতে, Android 8.1 ভেন্ডর ইমেজের সাথে ম্যাচ করা VNDK স্ন্যাপশট Android 9 সিস্টেম ইমেজের সাথে দিতে হবে, যেমন নিচে দেখানো হয়েছে:

ছবি ২. VNDK স্ন্যাপশট আর্কিটেকচার

VNDK স্ন্যাপশট ডিজাইনে নিম্নলিখিত পদ্ধতি অন্তর্ভুক্ত:

  • VNDK-core এবং VNDK-SP লাইব্রেরির জন্য স্ন্যাপশট তৈরি করা হচ্ছে। Android 9-এ এমন স্ক্রিপ্ট আছে যা বর্তমান VNDK বিল্ডের স্ন্যাপশট নিতে ব্যবহার করা যায়। এই স্ক্রিপ্ট /system/lib[64]/vndk-28 এবং /system/lib[64]/vndk-sp-28-এর মধ্যে থাকা সব লাইব্রেরি বান্ডেল করে, যা বর্তমান সোর্স ব্যবহার করে VNDK স্ন্যাপশট হিসেবে তৈরি করা হয়েছে। এখানে 28 হল Android 9-এর VNDK ভার্সন। এছাড়াও, স্ন্যাপশটে লিঙ্কার নেমস্পেস কনফিগারেশন ফাইল /etc/ld.config.28.txt, /etc/llndk.libraries.28.txt এবং /etc/vndksp.libraries.28.txt অন্তর্ভুক্ত থাকে। তৈরি করা স্ন্যাপশট নতুন Android ভার্সনে (Android 9-এর থেকে উন্নত) ব্যবহার করা হবে।
  • স্ন্যাপশট থেকে আগে থেকে তৈরি VNDK-core এবং VNDK-SP লাইব্রেরি ইনস্টল করা। Android 9-এ, VNDK স্ন্যাপশটে প্রি-বিল্ট VNDK-কোর লাইব্রেরির সেট এবং VNDK-SP লাইব্রেরির সেট, সেইসাথে লিঙ্কার নেমস্পেস কনফিগারেশন ফাইল থাকে। ইনস্টল করার জন্য VNDK স্ন্যাপশট ভার্সনের তালিকা দিলে, বিল্ড করার সময়, সিস্টেম ইমেজ /system/lib[64]/vndk-${VER} ও /system/lib[64]/vndk-sp-${VER} ডিরেক্টরি এবং সেইসব VNDK স্ন্যাপশটের জন্য লিঙ্কার নেমস্পেস কনফিগারেশন ফাইল /etc ডিরেক্টরিতে ইনস্টল করে।

VNDK ভার্সনিং

প্রতিটি Android রিলিজে শুধুমাত্র একটি VNDK স্ন্যাপশট থাকে এবং SDK ভার্সনটি VNDK ভার্সন হিসেবে ব্যবহার করা হয় (যার অর্থ হল VNDK ভার্সনে একটি পূর্ণসংখ্যা থাকে, যেমন Android 8.1-এর জন্য ২৭)। Android ভার্সন রিলিজ করার সময় VNDK ভার্সন ফিক্স করা হয়। ভেন্ডর পার্টিশনের মাধ্যমে ব্যবহৃত VNDK ভার্সন অটোমেটিক ro.vndk.version প্রপার্টিতে স্টোর করা হয়, যা রানটাইমে পড়া যায়। এই ভার্সনটি তারপরে কিছু লাইব্রেরির জন্য ভেন্ডর VNDK ভার্সন এবং নেমস্পেস কনফিগারেশনের জন্য VNDK স্ন্যাপশট ভার্সন শনাক্ত করতে ব্যবহার করা হয়।

VNDK লাইব্রেরি তৈরি করা

make vndk কমান্ডটি vndk: { enabled: true, … } সহ লাইব্রেরি তৈরি করে, যার মধ্যে নির্ভরতা এবং নেমস্পেস কনফিগারেশন ফাইল অন্তর্ভুক্ত। BOARD_VNDK_VERSION := current সেট করা থাকলে, এইসব লাইব্রেরি make কমান্ডের মাধ্যমে তৈরি করা হয়।

কারণ, এই বিল্ড স্ন্যাপশট থেকে VNDK লাইব্রেরি ইনস্টল করে না, ইনস্টল করা VNDK লাইব্রেরি ABI-স্টেবল নয়। তবে, Android ভার্সন রিলিজ করা হলে, বর্তমান VNDK ভার্সনের জন্য ABI ফিক্স করা হয়। এই পর্যায়ে, যেকোনও ABI ব্রেकेज হল একটি বিল্ড সংক্রান্ত সমস্যা, তাই Android ভার্সনের প্যাচকে অবশ্যই VNDK লাইব্রেরির ABI পরিবর্তন করা উচিত নয়।