এই বিভাগে ফ্রেমওয়ার্ক ও ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্স এবং কম্প্যাটিবিলিটি ম্যাট্রিক্স স্কিমা সম্পর্কে বর্ণনা করা হয়েছে। ম্যাচ করার নিয়ম সম্পর্কে জানতে, ম্যাচ করার নিয়ম দেখুন।
ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM)
ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (FCM) যে ডিভাইসে ফ্রেমওয়ার্ক চলে সেটির প্রয়োজনীয়তা বর্ণনা করে। ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্সে সিস্টেম কম্প্যাটিবিলিটি ম্যাট্রিক্স, প্রোডাক্ট কম্প্যাটিবিলিটি ম্যাট্রিক্স, এবং system_ext কম্প্যাটিবিলিটি ম্যাট্রিক্স থাকে। FCM-এর প্রয়োজনীয়তা ডিভাইস ম্যানিফেস্টকে পূরণ করতে হবে (প্রয়োজনীয়তা বিল্ড টাইম, রানটাইম ও VTS-এ এনফোর্স করা হয়)।
system_ext FCM এবং প্রোডাক্ট FCM হল ডিভাইস-নির্দিষ্ট FCM-এর (সিস্টেম পার্টিশনে ইনস্টল করা) পরিপূরক।
- ডিভাইস FCM-এ সিস্টেম পার্টিশন-এ মডিউলের প্রয়োজনীয়তা প্রতিফলিত হওয়া উচিত।
- system_ext FCM-এ system_ext পার্টিশনের মডিউল অনুযায়ী প্রয়োজনীয়তা দেখানো উচিত।
- প্রোডাক্ট FCM-কে প্রোডাক্ট পার্টিশন-এ মডিউল অনুযায়ী প্রয়োজনীয়তা দেখাতে হবে।
সব FCM-কে সিস্টেম, প্রোডাক্ট এবং system_ext পার্টিশনে ফ্রেমওয়ার্কে OEM-এর করা পরিবর্তনের সাথে সামঞ্জস্যপূর্ণ হতে হবে। যেমন, প্রোডাক্ট পার্টিশনে ইনস্টল করা কোনও অ্যাপ যদি HAL ইন্টারফেসের ভেন্ডর এক্সটেনশন ব্যবহার করে, তাহলে HAL ইন্টারফেসের প্রয়োজনীয়তা প্রোডাক্ট FCM-এ ঘোষণা করতে হবে।
সিস্টেম কম্প্যাটিবিলিটি ম্যাট্রিক্স ফাইলের উদাহরণ:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework" level="3"> <hal> <name>android.hardware.camera</name> <version>1.0</version> <version>3.1-4</version> <interface> <name>ICameraProvider</name> <instance>default</instance> <regex-instance>[a-z_]+/[0-9]+</regex-instance> </interface> </hal> <hal> <name>android.hardware.nfc</name> <version>1.0</version> <interface> <name>INfc</name> <instance>default</instance> </interface> </hal> <hal optional="true"> <name>android.hardware.graphics.composer</name> <version>2.1</version> <interface> <name>IComposer</name> <instance>default</instance> </interface> </hal> <hal format="aidl" optional="true"> <name>android.hardware.light</name> <version>1-2</version> <interface> <name>ILights</name> <instance>default</instance> </interface> </hal> <hal format="native"> <name>GL</name> <version>1.1</version> <version>3.0</version> </hal> <hal format="native"> <name>EGL</name> <version>1.1</version> </hal> <kernel version="3.18.51"> <!-- common configs --> </kernel> <kernel version="3.18.51"> <!-- arm specific configs --> <condition> <config> <key>CONFIG_ARM</key> <value type="tristate">y</value> </config> <condition> <config> <key>CONFIG_A</key> <value type="string"></value> </config> <config> <key>CONFIG_B</key> <value type="tristate">y</value> </config> </kernel> <kernel version="4.1.22"> <!-- common configs --> <config> <key>CONFIG_A</key> <value type="string">foo</value> </config> <config> <key>CONFIG_B2</key> <value type="int">1024</value> </config> </kernel> <sepolicy> <kernel-sepolicy-version>30</kernel-sepolicy-version> <sepolicy-version>25.0</sepolicy-version> <sepolicy-version>26.0-3</sepolicy-version> </sepolicy> <avb> <vbmeta-version>2.1</vbmeta-version> </avb> <xmlfile format="dtd"> <name>media_profile</name> <version>1.0</version> <path>/system/etc/media_profile_V1_0.dtd</path> </xmlfile> </compatibility-matrix>
আরও জানতে, FCM লাইফসাইকেল দেখুন।
প্রোডাক্ট মানানসই হওয়ার মেট্রিক্স
প্রোডাক্ট FCM হল প্রোডাক্ট পার্টিশনে ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স ফাইল। VINTF অবজেক্ট, রানটাইমে সিস্টেম ও system_ext পার্টিশনে থাকা FCM-এর সাথে প্রোডাক্ট FCM-এ যোগ দেয়।
প্রোডাক্ট FCM ফাইলের উদাহরণ:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="framework"> <hal> <name>vendor.foo.camera</name> <version>1.0</version> <interface> <name>IBetterCamera</name> <instance>default</instance> </interface> </hal> </compatibility-matrix>
System_ext কম্প্যাটিবিলিটি ম্যাট্রিক্স
system_ext FCM হল system_ext পার্টিশনে ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স ফাইল। VINTF অবজেক্ট রানটাইমে সিস্টেম ও প্রোডাক্ট পার্টিশনে FCM-এর সাথে system_ext FCM-এ যোগ দেয়। system_ext FCM ফাইলের উদাহরণের জন্য প্রোডাক্ট কম্প্যাটিবিলিটি ম্যাট্রিক্স দেখুন।
ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্স (DCM)
ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্স এমন কিছু প্রয়োজনীয়তার কথা বলে যা ডিভাইস ফ্রেমওয়ার্কের থেকে আশা করে (লঞ্চ ও OTA-এর সময় প্রয়োগ করা প্রয়োজনীয়তা)।
DCM ফাইলের উদাহরণ:
<?xml version="1.0" encoding="UTF-8"?> <!-- Comments, Legal notices, etc. here --> <compatibility-matrix version="1.0" type="device"> <hal> <name>android.hidl.manager</name> <version>1.0</version> <interface> <name>IServiceManager</name> <instance>default</instance> </interface> </hal> <hal> <name>android.hidl.memory</name> <version>1.0</version> <interface> <name>IMemory</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.hidl.allocator</name> <version>1.0</version> <interface> <name>IAllocator</name> <instance>ashmem</instance> </interface> </hal> <hal> <name>android.framework.sensor</name> <version>1.0</version> <interface> <name>ISensorManager</name> <instance>default</instance> </interface> </hal> <vendor-ndk> <version>27</version> </vendor-ndk> <system-sdk> <version>27</version> </system-sdk> </compatibility-matrix>
কম্প্যাটিবিলিটি ম্যাট্রিক্স স্কিমা
এই বিভাগে এইসব XML ট্যাগের অর্থ বর্ণনা করা হয়েছে। Android সোর্স ট্রি-তে সোর্স ফাইল থেকে কিছু "প্রয়োজনীয়" ট্যাগ
বাদ পড়তে পারে এবং এগুলি
assemble_vintf
বিল্ড করার সময় লেখা হয়। ডিভাইসে
সংশ্লিষ্ট ফাইলে "প্রয়োজনীয়" ট্যাগ থাকতে হবে।
?xml- ঐচ্ছিক। এটি শুধু XML পার্সারকে তথ্য প্রদান করে।
compatibility-matrix.version- প্রয়োজনীয়। এই কম্প্যাটিবিলিটি ম্যাট্রিক্সের মেটা-ভার্সন। মানানসই ম্যাট্রিক্সে প্রত্যাশিত এলিমেন্টগুলির বিবরণ দেয়। XML ভার্সনের সাথে সম্পর্কিত নয়।
compatibility-matrix.type- আবশ্যক। এই কম্প্যাটিবিলিটি ম্যাট্রিক্সের ধরন:
"device": ডিভাইস মানানসই হওয়ার ম্যাট্রিক্স।"framework": ফ্রেমওয়ার্ক মানানসই হওয়ার মেট্রিক্স।
manifest.level- ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্সের জন্য প্রয়োজন। Android 12 ও তার পরবর্তী ভার্সনে,
প্রোডাক্ট ও system_ext পার্টিশনে ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স ফাইলে অনুমতি দেওয়া হয়।
এই ফাইলের ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স ভার্সন (FCM ভার্সন) উল্লেখ করে। ডিভাইস-নির্দিষ্ট ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্সে (যেমন,
DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE) এটি ঘোষণা করবেন না। compatibility-matrix.hal- ঐচ্ছিক এবং পুনরাবৃত্তি করা যেতে পারে। একটি HAL (HIDL বা নেটিভ) তালিকাভুক্ত করে যা কম্প্যাটিবিলিটি ম্যাট্রিক্সের (ফ্রেমওয়ার্ক বা ডিভাইস) মালিকের
প্রয়োজন এবং
উপস্থিত থাকতে হবে। HAL এন্ট্রিকে
<name>এলিমেন্ট দিয়ে আলাদা করা হয়; একই নামের একাধিক HAL এন্ট্রি থাকতে পারে (এর অর্থ হল "এবং" কন্ডিশন)। compatibility-matrix.hal.format- ঐচ্ছিক। ভ্যালু এগুলির মধ্যে একটি হতে পারে:
"hidl": HIDL HAL. এটি ডিফল্ট বিকল্প।"aidl": AIDL HAL. শুধুমাত্র মানানসই ম্যাট্রিক্স মেটা-ভার্সন 2.0-এর ক্ষেত্রে প্রযোজ্য।"native": নেটিভ HAL.
compatibility-matrix.hal.optional(Android 15 বা তার আগের যেকোনও ভার্সন)- অ্যাট্রিবিউট ঐচ্ছিক এবং ডিফল্ট হিসেবে false থাকে। এই HAL
কম্প্যাটিবিলিটি ম্যাট্রিক্সের (ফ্রেমওয়ার্ক বা ডিভাইস) মালিকের জন্য ঐচ্ছিক কিনা তা উল্লেখ করে। কোনও
<hal>এন্ট্রিকে ঐচ্ছিক হিসেবে চিহ্নিত করা হলে, এর অর্থ হল, মালিক এই HAL-এর সাথে কাজ করতে পারেন, যদি এটি উপস্থিত থাকে, তবে এটি উপস্থিত থাকতেই হবে এমন কোনও প্রয়োজন নেই। - সতর্কতা: Android 15-এর পর থেকে এই অ্যাট্রিবিউট আর কাজ করে না এবং এর কোনও প্রভাব নেই। কোনও HAL ইনস্টল করার প্রয়োজন হলে, এই প্রয়োজনীয়তা পরীক্ষায় প্রয়োগ করা উচিত।
compatibility-matrix.hal.name- আবশ্যক। এই HAL-এর সম্পূর্ণ প্যাকেজ নাম। উদাহরণ:
android.hardware.camera(HIDL বা AIDL HAL)GLES(নেটিভ HAL, শুধু নাম প্রয়োজন)
compatibility-matrix.hal.version-
ভার্সন রেঞ্জের তালিকা (HAL ম্যাচ দেখুন)
যা কম্প্যাটিবিলিটি ম্যাট্রিক্সের (ফ্রেমওয়ার্ক বা
ডিভাইস) মালিক কোন ভার্সন আশা করেন তা নির্ধারণ করে।
HIDL ও নেটিভ HAL-এর জন্য প্রয়োজন, ডুপ্লিকেট না করে রিপিট করা যেতে পারে। ফর্ম্যাট নিম্নলিখিতগুলির মধ্যে একটি:MAJOR.MINOR_MIN-MINOR_MAXMAJOR.MINOR(MAJOR.MINOR-MINOR-এর সমান)
AIDL HAL-এর জন্য, Android 11 ও এর আগের যেকোনও ভার্সনে চলছে এমন ডিভাইসে থাকলে চলবে না। পরবর্তী ভার্সন চলছে এমন ডিভাইসে ঐচ্ছিক। উল্লেখ করা থাকলে, ফর্ম্যাট নিম্নলিখিতগুলির মধ্যে একটি:VERSION_MIN-VERSION_MAXVERSION(এর সমতুল্যVERSION-VERSION)
1হয়। compatibility-matrix.hal.interface- ঐচ্ছিক, একাধিকবার বলা যেতে পারে। এই HAL-এর প্রয়োজনীয় ইন্টারফেসের তালিকা।
compatibility-matrix.hal.interface.name- আবশ্যক। ইন্টারফেসের নাম।
compatibility-matrix.hal.interface.instance- ঐচ্ছিক, একাধিকবার বলা যেতে পারে। এই ইন্টারফেসের প্রয়োজনীয় ইনস্ট্যান্সের তালিকা।
compatibility-matrix.hal.interface.regex-instance- ঐচ্ছিক, একাধিকবার বলা যেতে পারে। এই ইন্টারফেসে প্রয়োজনীয় ইনস্ট্যান্স নামের প্যাটার্নের তালিকা। এক্সটেন্ডেড রেগুলার এক্সপ্রেশন ফর্ম্যাট ব্যবহার করুন।
compatibility-matrix.kernel- ঐচ্ছিক, রিপিট করা যেতে পারে। প্রতিটি কার্নেল ভার্সনে ফ্রেমওয়ার্কের প্রয়োজন হয় এমন কার্নেল কনফিগারেশনের
তালিকা উল্লেখ করুন।
একই<version>সহ একাধিক<kernel>"এবং" সম্পর্ক বোঝাতে থাকতে পারে। প্রতিটি<kernel>হল প্রয়োজনীয়তার "ফ্র্যাগমেন্ট" যা শুধুমাত্র<conditions>পূরণ হলে চালু হয়। compatibility-matrix.kernel.version- প্রয়োজনীয়। কার্নেল ভার্সন। ফর্ম্যাট হল
VERSION.MAJOR_REVISION.MINOR_REVISION. ভার্সন ও মেজর রিভিশন হুবহু মিলতে হবে। মাইনর রিভিশন কার্নেলের ন্যূনতম LTS ভার্সন নির্ধারণ করে, যা ফ্রেমওয়ার্ক প্রত্যাশা করে। compatibility-matrix.kernel.condition- ঐচ্ছিক। প্রতিটি ভার্সনের প্রথম
<kernel>-এর জন্য থাকতে পারবে না। শর্তাবলীর একটি তালিকা নির্দিষ্ট করে। শর্ত পূরণ হলে, এই<kernel>ফ্র্যাগমেন্টে উল্লেখ করা প্রয়োজনীয়তা চালু করা হয়। compatibility-matrix.kernel.config- ঐচ্ছিক, একাধিকবার বলা যেতে পারে। এই কার্নেল ভার্সনের জন্য
CONFIGআইটেমগুলির মিল থাকতে হবে। প্রতিটিCONFIGআইটেম হল একটি কী-ভ্যালু পেয়ার; কনফিগারেশন আইটেমগুলি কী দ্বারা আলাদা করা হয়। compatibility-matrix.kernel.config.key- প্রয়োজনীয়।
CONFIGআইটেমের কী-এর নাম।CONFIG_দিয়ে শুরু হয়। compatibility-matrix.kernel.config.value- প্রয়োজনীয়।
CONFIGআইটেমের ভ্যালু। ফর্ম্যাট নির্ভর করে ধরনের উপর:string। উদ্ধৃতি বাদ দেওয়া হয়েছে।int. দশমিক ও হেক্সাডেসিমেল (0xবা0X)দিয়ে শুরু হতে হবে) মান গ্রহণ করা হয়। ৬৪-বিট ইন্টিজার হিসেবে ব্যাখ্যা করা হয়েছে; ওভারফ্লোর ফলে ট্রাঙ্কেশন হয়। (পার্সার -২৬৪ + ১ থেকে ২৬৪ - ১ পর্যন্ত ভ্যালু গ্রহণ করে, ৬৫তম বিট ট্রানকেট করা হয়; বিস্তারিত জানতে strtoull ম্যান পেজ দেখুন।)range। ফর্ম্যাট হল[int]-[int], যেমন10-20। হেক্সাডেসিমেল ভ্যালু গ্রহণ করা হয় এবং তা অবশ্যই0xবা0Xদিয়ে শুরু হতে হবে। দুটি সীমানা অবশ্যই একটি আনসাইনড ৬৪-বিট পূর্ণসংখ্যা হতে হবে।tristate. সঠিক মান হলy,mএবংn.
compatibility-matrix.kernel.config.value.type- আবশ্যক।
CONFIGআইটেমের ভ্যালুর ধরন, এগুলির মধ্যে একটি:stringintrangetristate
compatibility-matrix.sepolicy- প্রয়োজনীয়। sepolicy সম্পর্কিত সব এন্ট্রি থাকে। শুধুমাত্র ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্সের মাধ্যমে ব্যবহার করা হয়।
compatibility-matrix.sepolicy.sepolicy-version- প্রয়োজনীয়, একাধিকবার ব্যবহার করা যায়। sepolicy ভার্সন সংক্রান্ত প্রয়োজনীয়তা বর্ণনা করে।
manifest.sepolicy.version-এর সাথে সম্পর্কিত। কোনও এলিমেন্টের প্রতিটি ইনস্ট্যান্স sepolicy ভার্সনের একটি রেঞ্জকে সংজ্ঞায়িত করে। compatibility-matrix.sepolicy.kernel-sepolicy-version- আবশ্যক।
policydbভার্সন ঘোষণা করে, যেটির সাথে ফ্রেমওয়ার্ক কাজ করে । compatibility-matrix.avb.vbmeta-version- ঐচ্ছিক; শুধুমাত্র ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স দ্বারা ব্যবহৃত।
system.img-এ সাইন-ইন করার জন্য ব্যবহৃত AVB ভার্সন ঘোষণা করে। Android 10-এ বাতিল করা হয়েছে। compatibility-matrix.vendor-ndk- ঐচ্ছিক; শুধুমাত্র ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্স দ্বারা ব্যবহৃত। VNDK ভেন্ডর স্ন্যাপশটের প্রয়োজনীয়তা ঘোষণা করে। এটি না থাকলে, সিস্টেম ইমেজে কোনও VNDK সংক্রান্ত প্রয়োজনীয়তা প্রয়োজন হয় না।
compatibility-matrix.vendor-ndk.version- প্রয়োজনীয়। একটি ধনাত্মক পূর্ণসংখ্যা যা ভেন্ডর ইমেজ দ্বারা প্রয়োজনীয় VNDK ভার্সন ঘোষণা করে।
compatibility-matrix.vendor-ndk.library- ঐচ্ছিক, একাধিকবার বলা যেতে পারে। ভেন্ডর ইমেজের জন্য প্রয়োজনীয় VNDK লাইব্রেরির সেট ঘোষণা করে।
manifest.vendor-ndk.library-এর মতো একই সেমানটিকস। compatibility-matrix.system-sdk.version- ঐচ্ছিক, একাধিকবার ব্যবহার করা যেতে পারে; শুধুমাত্র ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্সের মাধ্যমে ব্যবহার করা হয়। সিস্টেম SDK ভার্সনে ভেন্ডর অ্যাপের প্রয়োজনীয়তা ঘোষণা করে। এটি না থাকলে, সিস্টেম ইমেজে কোনও System SDK প্রয়োজনীয়তা নেই।