ভিএনডিকে স্ন্যাপশট ডিজাইন

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

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

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

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

ভিএনডিকে-কোর

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

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

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

ভিএনডিকে-এসপি

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 লাইব্রেরিগুলি /system/lib[64] এ ইনস্টল করা আছে। বিক্রেতা মডিউলগুলি LL-NDK লাইব্রেরির পূর্ব-নির্বাচিত প্রতীকগুলি অ্যাক্সেস করতে LL-NDK স্টাব লাইব্রেরি ব্যবহার করতে পারে। LL-NDK লাইব্রেরিগুলিকে LL-NDK লাইব্রেরির নতুন সংস্করণগুলি ব্যবহার করার জন্য বিক্রেতা মডিউলগুলির পুরানো সংস্করণগুলিকে সক্ষম করতে পশ্চাদগামী-সামঞ্জস্যপূর্ণ এবং ABI-স্থিতিশীল হতে হবে৷ LL-NDK-এর ABI-স্থিতিশীল বৈশিষ্ট্যের কারণে, VNDK স্ন্যাপশটে পুরানো বিক্রেতার চিত্রগুলির জন্য LL-NDK লাইব্রেরি অন্তর্ভুক্ত করার প্রয়োজন নেই।

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

অ্যান্ড্রয়েড 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 লাইব্রেরি অনুসন্ধান করার জন্য কনফিগার করা হয়।

চিত্র 1. শুধুমাত্র আপগ্রেডিং সিস্টেম

উদাহরণ: সিস্টেম ইমেজ আপগ্রেড করা, ছোট বিক্রেতার ইমেজ পরিবর্তন

একটি VNDK স্ন্যাপশটের বিপরীতে একটি বিক্রেতার চিত্র তৈরি করা এখনও সমর্থিত নয়, তাই আপনাকে অবশ্যই বিক্রেতার চিত্রটিকে তার মূল উত্স কোডের সাথে আলাদাভাবে তৈরি করতে হবে, তারপরে আগের উদাহরণে বর্ণিত সিস্টেমের চিত্রটি আপগ্রেড করুন৷

ভিএনডিকে স্ন্যাপশট আর্কিটেকচার

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

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

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

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

VNDK সংস্করণ

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

ভিএনডিকে লাইব্রেরি তৈরি করা

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

যেহেতু এই বিল্ডটি স্ন্যাপশট থেকে VNDK লাইব্রেরিগুলি ইনস্টল করে না, ইনস্টল করা VNDK লাইব্রেরিগুলি ABI- স্থিতিশীল নয়। যাইহোক, যখন একটি Android সংস্করণ প্রকাশিত হয়, তখন বর্তমান VNDK সংস্করণের জন্য ABI স্থির করা হয়। এই মুহুর্তে, যেকোন ABI ভাঙ্গন একটি বিল্ড ত্রুটি, তাই Android সংস্করণের প্যাচগুলি VNDK লাইব্রেরির জন্য ABI পরিবর্তন করা উচিত নয়।