কম্প্যাটিবিলিটি ম্যাট্রিক্স

এই বিভাগে ফ্রেমওয়ার্ক ও ডিভাইস কম্প্যাটিবিলিটি ম্যাট্রিক্স এবং কম্প্যাটিবিলিটি ম্যাট্রিক্স স্কিমা সম্পর্কে বর্ণনা করা হয়েছে। ম্যাচ করার নিয়ম সম্পর্কে জানতে, ম্যাচ করার নিয়ম দেখুন।

ফ্রেমওয়ার্ক কম্প্যাটিবিলিটি ম্যাট্রিক্স (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_MAX
  • MAJOR.MINOR (MAJOR.MINOR-MINOR-এর সমান)

AIDL HAL-এর জন্য, Android 11 ও এর আগের যেকোনও ভার্সনে চলছে এমন ডিভাইসে থাকলে চলবে না। পরবর্তী ভার্সন চলছে এমন ডিভাইসে ঐচ্ছিক। উল্লেখ করা থাকলে, ফর্ম্যাট নিম্নলিখিতগুলির মধ্যে একটি:
  • VERSION_MIN-VERSION_MAX
  • VERSION (এর সমতুল্য 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 আইটেমের ভ্যালুর ধরন, এগুলির মধ্যে একটি:
  • string
  • int
  • range
  • tristate
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 প্রয়োজনীয়তা নেই।