লিঙ্কার নেমস্পেস

ডাইনামিক লিঙ্কার ট্রেবল ভিএনডিকে ডিজাইনে দুটি চ্যালেঞ্জ মোকাবেলা করে:

  • SP-HAL শেয়ার্ড লাইব্রেরি এবং VNDK-SP লাইব্রেরি সহ তাদের নির্ভরতা ফ্রেমওয়ার্ক প্রসেসে লোড করা হয়। প্রতীক দ্বন্দ্ব প্রতিরোধে কিছু ব্যবস্থা থাকা উচিত।
  • dlopen() এবং android_dlopen_ext() কিছু রানটাইম নির্ভরতা প্রবর্তন করতে পারে যা নির্মাণের সময় দৃশ্যমান হয় না এবং স্ট্যাটিক বিশ্লেষণ ব্যবহার করে সনাক্ত করা কঠিন হতে পারে।

এই দুটি চ্যালেঞ্জ লিঙ্কার নেমস্পেস মেকানিজম দ্বারা সমাধান করা যেতে পারে। এই প্রক্রিয়াটি ডায়নামিক লিঙ্কার দ্বারা সরবরাহ করা হয়। এটি বিভিন্ন লিঙ্কার নামস্থানে ভাগ করা লাইব্রেরিগুলিকে বিচ্ছিন্ন করতে পারে যাতে একই লাইব্রেরি নামের লাইব্রেরিগুলি কিন্তু ভিন্ন চিহ্নগুলির সাথে বিরোধ না করে।

অন্যদিকে, লিঙ্কার নেমস্পেস মেকানিজম নমনীয়তা প্রদান করে যাতে কিছু শেয়ার করা লাইব্রেরি একটি লিঙ্কার নেমস্পেস দ্বারা রপ্তানি করা যায় এবং অন্য লিঙ্কার নেমস্পেস দ্বারা ব্যবহার করা যায়। এই রপ্তানি করা শেয়ার্ড লাইব্রেরিগুলি অ্যাপ্লিকেশন প্রোগ্রামিং ইন্টারফেস হয়ে উঠতে পারে যা অন্য প্রোগ্রামগুলির জন্য সর্বজনীন এবং তাদের লিঙ্কার নামস্থানের মধ্যে তাদের বাস্তবায়নের বিবরণ লুকিয়ে রাখে।

উদাহরণস্বরূপ, /system/lib[64]/libcutils.so এবং /system/lib[64]/vndk-sp-${VER}/libcutils.so দুটি ভাগ করা লাইব্রেরি। এই দুটি লাইব্রেরির বিভিন্ন চিহ্ন থাকতে পারে। এগুলি বিভিন্ন লিঙ্কার নেমস্পেসে লোড করা হয়েছে যাতে ফ্রেমওয়ার্ক মডিউলগুলি /system/lib[64]/libcutils.so এর উপর নির্ভর করতে পারে এবং SP-HAL শেয়ার্ড লাইব্রেরিগুলি /system/lib[64]/vndk-sp-${VER}/libcutils.so এর উপর নির্ভর করতে পারে /system/lib[64]/vndk-sp-${VER}/libcutils.so

অন্যদিকে, /system/lib[64]/libc.so হল একটি পাবলিক লাইব্রেরির একটি উদাহরণ যা একটি লিঙ্কার নেমস্পেস দ্বারা রপ্তানি করা হয় এবং অনেক লিঙ্কার নামস্থানে আমদানি করা হয়। /system/lib[64]/libc.so এর নির্ভরতা, যেমন libnetd_client.so , নামস্থানে লোড করা হয় যেখানে /system/lib[64]/libc.so থাকে। অন্যান্য নেমস্পেসগুলিতে সেই নির্ভরতাগুলিতে অ্যাক্সেস থাকবে না। পাবলিক ইন্টারফেস প্রদান করার সময় এই প্রক্রিয়াটি বাস্তবায়নের বিশদ বিবরণকে অন্তর্ভুক্ত করে।

এটা কিভাবে কাজ করে?

ডায়নামিক লিঙ্কার DT_NEEDED এন্ট্রিতে নির্দিষ্ট করা শেয়ার্ড লাইব্রেরি বা dlopen() বা android_dlopen_ext() এর আর্গুমেন্ট দ্বারা নির্দিষ্ট করা শেয়ার্ড লাইব্রেরি লোড করার জন্য দায়ী। উভয় ক্ষেত্রেই, ডায়নামিক লিঙ্কার লিঙ্কার নেমস্পেস খুঁজে পায় যেখানে কলার থাকে এবং একই লিঙ্কার নামস্থানে নির্ভরতা লোড করার চেষ্টা করে। যদি ডায়নামিক লিঙ্কার শেয়ার করা লাইব্রেরিটিকে নির্দিষ্ট লিঙ্কার নেমস্পেসে লোড করতে না পারে, তাহলে এটি রপ্তানি করা শেয়ার্ড লাইব্রেরির জন্য লিঙ্ক করা লিঙ্কার নেমস্পেসকে জিজ্ঞাসা করে।

কনফিগারেশন ফাইল ফরম্যাট

কনফিগারেশন ফাইল বিন্যাস INI ফাইল বিন্যাসের উপর ভিত্তি করে। একটি সাধারণ কনফিগারেশন ফাইল এই মত দেখায়:

dir.system = /system/bin
dir.system = /system/xbin
dir.vendor = /vendor/bin

[system]
additional.namespaces = sphal,vndk

namespace.default.isolated = true
namespace.default.search.paths = /system/${LIB}
namespace.default.permitted.paths = /system/${LIB}/hw
namespace.default.asan.search.paths = /data/asan/system/${LIB}:/system/${LIB}
namespace.default.asan.permitted.paths = /data/asan/system/${LIB}/hw:/system/${LIB}/hw

namespace.sphal.isolated = true
namespace.sphal.visible = true
namespace.sphal.search.paths = /odm/${LIB}:/vendor/${LIB}
namespace.sphal.permitted.paths = /odm/${LIB}:/vendor/${LIB}
namespace.sphal.asan.search.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
namespace.sphal.asan.search.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
namespace.sphal.asan.permitted.paths  = /data/asan/odm/${LIB}:/odm/${LIB}
namespace.sphal.asan.permitted.paths += /data/asan/vendor/${LIB}:/vendor/${LIB}
namespace.sphal.links = default,vndk
namespace.sphal.link.default.shared_libs = libc.so:libm.so
namespace.sphal.link.vndk.shared_libs = libbase.so:libcutils.so

namespace.vndk.isolated = true
namespace.vndk.search.paths = /system/${LIB}/vndk-sp-29
namespace.vndk.permitted.paths = /system/${LIB}/vndk-sp-29
namespace.vndk.links = default
namespace.vndk.link.default.shared_libs = libc.so:libm.so

[vendor]
namespace.default.isolated = false
namespace.default.search.paths = /vendor/${LIB}:/system/${LIB}

কনফিগারেশন ফাইল অন্তর্ভুক্ত:

  • কার্যকরী বিভাগ নির্বাচন করার জন্য ডায়নামিক লিঙ্কারের জন্য শুরুতে বেশ কয়েকটি ডিরেক্টরি-বিভাগ ম্যাপিং বৈশিষ্ট্য।
  • বেশ কিছু লিঙ্কার নেমস্পেস কনফিগারেশন বিভাগ:
    • প্রতিটি বিভাগে বিভিন্ন নামস্থান (গ্রাফ শীর্ষবিন্দু) এবং নেমস্পেস (গ্রাফ আর্কস) এর মধ্যে কয়েকটি ফলব্যাক লিঙ্ক রয়েছে।
    • প্রতিটি নামস্থানের নিজস্ব বিচ্ছিন্নতা, অনুসন্ধানের পথ, অনুমোদিত পথ এবং দৃশ্যমানতা সেটিংস রয়েছে।

নীচের টেবিলগুলি প্রতিটি সম্পত্তির অর্থ বিশদভাবে বর্ণনা করে।

ডিরেক্টরি-বিভাগ ম্যাপিং সম্পত্তি

সম্পত্তি বর্ণনা উদাহরণ

dir. name

একটি ডিরেক্টরির একটি পথ যেখানে [ name ] বিভাগটি প্রযোজ্য।

প্রতিটি সম্পত্তি একটি লিঙ্কার নেমস্পেস কনফিগারেশন বিভাগে ডিরেক্টরির অধীনে এক্সিকিউটেবল ম্যাপ করে। একই name দুটি (বা তার বেশি) বৈশিষ্ট্য থাকতে পারে কিন্তু বিভিন্ন ডিরেক্টরি নির্দেশ করে।

dir.system = /system/bin
dir.system = /system/xbin
dir.vendor = /vendor/bin

এটি নির্দেশ করে যে [system] বিভাগে নির্দিষ্ট করা কনফিগারেশন /system/bin বা /system/xbin থেকে লোড করা এক্সিকিউটেবলের ক্ষেত্রে প্রযোজ্য।

[vendor] বিভাগে নির্দিষ্ট করা কনফিগারেশনটি এক্সিকিউটেবলের ক্ষেত্রে প্রযোজ্য যা /vendor/bin থেকে লোড করা হয়।

সম্পর্কের বৈশিষ্ট্য

সম্পত্তি বর্ণনা উদাহরণ
additional. namespaces

বিভাগের জন্য অতিরিক্ত নামস্থানের একটি কমা দ্বারা পৃথক করা তালিকা ( default নামস্থান ছাড়াও)।

additional. namespaces = sphal, vndk

এটি নির্দেশ করে যে [system] কনফিগারেশনে তিনটি নামস্থান ( default , sphal এবং vndk ) রয়েছে।

namespace. name . links

ফলব্যাক নেমস্পেসগুলির একটি কমা দ্বারা পৃথক করা তালিকা৷

যদি বর্তমান নামস্থানে একটি ভাগ করা লাইব্রেরি খুঁজে না পাওয়া যায়, তবে ডাইনামিক লিঙ্কার ফলব্যাক নেমস্পেস থেকে ভাগ করা লাইব্রেরি লোড করার চেষ্টা করে। তালিকার শুরুতে উল্লেখ করা নামস্থানের অগ্রাধিকার বেশি।

namespace. sphal. links = default, vndk

যদি একটি শেয়ার্ড লাইব্রেরি বা এক্সিকিউটেবল একটি শেয়ার্ড লাইব্রেরির অনুরোধ করে যা sphal নেমস্পেসে লোড করা যায় না, ডায়নামিক লিঙ্কার default নেমস্পেস থেকে শেয়ার্ড লাইব্রেরি লোড করার চেষ্টা করে।

এবং তারপর, যদি ভাগ করা লাইব্রেরিটি default নামস্থান থেকে লোড করা না যায়, তবে গতিশীল লিঙ্কার vndk নামস্থান থেকে ভাগ করা লাইব্রেরি লোড করার চেষ্টা করে।

অবশেষে, সমস্ত প্রচেষ্টা ব্যর্থ হলে, ডায়নামিক লিঙ্কার একটি ত্রুটি ফেরত দেয়।

namespace. name . link. other . shared_libs

শেয়ার্ড লাইব্রেরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা যা other নেমস্পেসে অনুসন্ধান করা যেতে পারে যখন সেই লাইব্রেরিগুলি name নেমস্পেসে পাওয়া যায় না।

এই সম্পত্তি namespace. name . link. other . allow_all_shared_libs

namespace. sphal. link. default. shared_libs = libc.so: libm.so

এটি নির্দেশ করে যে ফলব্যাক লিঙ্কটি অনুরোধ করা লাইব্রেরির নাম হিসাবে শুধুমাত্র libc.so বা libm.so গ্রহণ করে। অনুরোধকৃত লাইব্রেরির নাম libc.so বা libm.so না হলে ডায়নামিক লিঙ্কার sphal থেকে default নেমস্পেসে ফলব্যাক লিঙ্কটিকে উপেক্ষা করে।

namespace. name . link. other . allow_all_shared_libs

একটি বুলিয়ান মান যা নির্দেশ করে যে সমস্ত ভাগ করা লাইব্রেরিগুলি other নেমস্পেসে অনুসন্ধান করা যেতে পারে যখন সেই লাইব্রেরিগুলি name নামস্থানে পাওয়া যায় না।

এই সম্পত্তি namespace. name . link. other . shared_libs

namespace. vndk. link. sphal. allow_all_shared_libs = true

এটি ইঙ্গিত করে যে সমস্ত লাইব্রেরির নাম vndk থেকে sphal নামস্থানে ফলব্যাক লিঙ্কের মাধ্যমে চলতে পারে।

নামস্থান বৈশিষ্ট্য

সম্পত্তি বর্ণনা উদাহরণ
namespace. name . isolated

একটি বুলিয়ান মান যা নির্দেশ করে যে ডাইনামিক লিঙ্কারটি ভাগ করা লাইব্রেরিটি কোথায় থাকে তা পরীক্ষা করা উচিত।

যদি isolated true হয় , শুধুমাত্র শেয়ার করা লাইব্রেরিগুলি যেগুলি search.paths ডিরেক্টরিগুলির একটিতে রয়েছে (সাবডিরেক্টরিগুলি ব্যতীত) বা permitted.paths ডিরেক্টরিগুলির একটির অধীনে রয়েছে (সাবডিরেক্টরিগুলি সহ) লোড করা যেতে পারে৷

যদি isolated false (ডিফল্ট) হয়, তবে গতিশীল লিঙ্কার ভাগ করা লাইব্রেরির পথ পরীক্ষা করে না।

namespace. sphal. isolated = true

এটি ইঙ্গিত করে যে search.paths অথবা under permitted.paths এ শুধুমাত্র শেয়ার করা লাইব্রেরিগুলিকে sphal namespace-এ লোড করা যেতে পারে।

namespace. name . search.paths

শেয়ার্ড লাইব্রেরি অনুসন্ধান করার জন্য ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা।

যদি ফাংশন dlopen() বা DT_NEEDED এন্ট্রি সম্পূর্ণ পাথ নির্দিষ্ট না করে তাহলে search.paths এ উল্লেখ করা ডিরেক্টরিগুলি অনুরোধ করা লাইব্রেরির নামের সাথে প্রিপেন্ড করা হয়। তালিকার শুরুতে উল্লেখ করা ডিরেক্টরির অগ্রাধিকার বেশি।

যখন isolated true হয়, শেয়ার করা লাইব্রেরিগুলি যেগুলি search.paths ডিরেক্টরিগুলির একটিতে থাকে (সাবডিরেক্টরিগুলি ব্যতীত) permitted.paths সম্পত্তি নির্বিশেষে লোড করা যেতে পারে৷

উদাহরণস্বরূপ, যদি search.paths /system/${LIB} হয় এবং permitted.paths খালি থাকে, তাহলে /system/${LIB}/libc.so লোড করা যেতে পারে কিন্তু /system/${LIB}/vndk/libutils.so লোড করা যাবে না।

namespace. default. search.paths = /system/${LIB}

এটি নির্দেশ করে যে ডাইনামিক লিঙ্কার শেয়ার করা লাইব্রেরির জন্য /system/${LIB} অনুসন্ধান করে।

namespace. name . asan.search.paths

অ্যাড্রেস স্যানিটাইজার (ASan) সক্রিয় থাকলে শেয়ার্ড লাইব্রেরি অনুসন্ধান করার জন্য ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা।

namespace. name . search.paths ASan সক্রিয় থাকলে namespace. name . search.paths উপেক্ষা করা হয়।

namespace. default. asan.search.paths = /data/asan/system/${LIB}: /system/${LIB}

এটি নির্দেশ করে যে যখন ASan সক্রিয় করা হয় তখন ডায়নামিক লিঙ্কার প্রথমে /data/asan/system/${LIB} অনুসন্ধান করে এবং তারপর /system/${LIB} অনুসন্ধান করে।

namespace. name . permitted.paths

ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা (সাবডিরেক্টরি সহ) যেখানে ডাইনামিক লিঙ্কার শেয়ার করা লাইব্রেরিগুলিকে লোড করতে পারে ( search.paths ছাড়াও) isolated হলে true

permitted.paths এর সাবডিরেক্টরির অধীনে থাকা শেয়ার করা লাইব্রেরিগুলিও লোড করা যেতে পারে। উদাহরণস্বরূপ, যদি permitted.paths /system/${LIB} হয়, তাহলে /system/${LIB}/libc.so এবং /system/${LIB}/vndk/libutils.so উভয়ই লোড করা যেতে পারে।

যদি isolated false হয়, permitted.paths উপেক্ষা করা হয় এবং একটি সতর্কতা নির্গত হয়।

namespace. default. permitted.paths = /system/${LIB}/hw

এটি নির্দেশ করে যে /system/${LIB}/hw এর অধীনে শেয়ার করা লাইব্রেরিগুলিকে বিচ্ছিন্ন default নেমস্পেসে লোড করা যেতে পারে।

উদাহরণস্বরূপ, permitted.paths ছাড়া, libaudiohal.so default নামস্থানে /system/${LIB}/hw/audio.a2dp.default.so লোড করতে পারে না।

namespace. name . asan.permitted.paths

ডিরেক্টরির একটি কোলন-বিচ্ছিন্ন তালিকা যেখানে ডাইনামিক লিঙ্কার শেয়ার্ড লাইব্রেরি লোড করতে পারে যখন ASan সক্রিয় থাকে।

namespace. name . permitted.paths ASan সক্রিয় থাকলে namespace. name . permitted.paths উপেক্ষা করা হয়।

namespace. default. asan.permitted.paths = /data/asan/system/${LIB}/hw: /system/${LIB}/hw

এটি নির্দেশ করে যে যখন ASan সক্রিয় করা হয় তখন /data/asan/system/${LIB}/hw বা /system/${LIB}/hw এর অধীনে শেয়ার্ড লাইব্রেরিগুলিকে বিচ্ছিন্ন default নেমস্পেসে লোড করা যেতে পারে।

namespace. name . visible

একটি বুলিয়ান মান যা নির্দেশ করে যে প্রোগ্রামটি ( libc ব্যতীত) android_get_exported_namespace() সহ একটি লিঙ্কার নেমস্পেস হ্যান্ডেল পেতে পারে এবং android_dlopen_ext() এ হ্যান্ডেলটি পাস করে লিঙ্কার নেমস্পেসে একটি শেয়ার্ড লাইব্রেরি খুলতে পারে।

visible true হলে, android_get_exported_namespace() সর্বদা হ্যান্ডেল ফেরত দেয় যদি নামস্থান বিদ্যমান থাকে।

visible false (ডিফল্ট) হলে, android_get_exported_namespace() নামস্থানের উপস্থিতি নির্বিশেষে সর্বদা NULL প্রদান করে। শেয়ার্ড লাইব্রেরিগুলি শুধুমাত্র এই নেমস্পেসে লোড করা যেতে পারে যদি (1) এই নেমস্পেসে একটি ফলব্যাক লিঙ্ক আছে এমন অন্য লিঙ্কার নেমস্পেস দ্বারা অনুরোধ করা হয়, অথবা (2) এই নেমস্পেসে অন্যান্য শেয়ার্ড লাইব্রেরি বা এক্সিকিউটেবল দ্বারা অনুরোধ করা হয়৷

namespace. sphal. visible = true

এটি নির্দেশ করে যে android_get_exported_namespace("sphal") একটি বৈধ লিঙ্কার নেমস্পেস হ্যান্ডেল ফেরত দিতে পারে।

লিঙ্কার নামস্থান সৃষ্টি

Android 11-এ, ${android-src}/system/core/rootdir/etc এ প্লেইন টেক্সট ফাইল ব্যবহার করার পরিবর্তে /linkerconfig এর অধীনে রানটাইমে লিঙ্কার কনফিগারেশন তৈরি করা হয়। রানটাইম পরিবেশের উপর ভিত্তি করে বুট করার সময় কনফিগারেশন তৈরি করা হয়, যার মধ্যে নিম্নলিখিত আইটেমগুলি অন্তর্ভুক্ত রয়েছে:

  • যদি ডিভাইস VNDK সমর্থন করে
  • বিক্রেতা পার্টিশনের লক্ষ্য VNDK সংস্করণ
  • পণ্য পার্টিশনের VNDK সংস্করণ
  • APEX মডিউল ইনস্টল করা হয়েছে

লিঙ্কার কনফিগারেশন লিঙ্কার নেমস্পেসগুলির মধ্যে নির্ভরতা সমাধান করে তৈরি করা হয়। উদাহরণস্বরূপ, যদি APEX মডিউলগুলিতে কোনো আপডেট থাকে যাতে নির্ভরতা আপডেট অন্তর্ভুক্ত থাকে, তাহলে লিঙ্কার কনফিগারেশন এই পরিবর্তনগুলিকে প্রতিফলিত করে তৈরি করা হয়। লিঙ্কার কনফিগারেশন তৈরি করার জন্য আরও বিশদ ${android-src}/system/linkerconfig এ পাওয়া যাবে।

লিঙ্কার নামস্থান বিচ্ছিন্নতা

তিন ধরনের কনফিগারেশন আছে। BoardConfig.mkPRODUCT_TREBLE_LINKER_NAMESPACES এবং BOARD_VNDK_VERSION এর মানের উপর নির্ভর করে, বুট করার সময় সংশ্লিষ্ট কনফিগারেশন তৈরি হয়।

PRODUCT_TREBLE_
LINKER_NAMESPACES
BOARD_VNDK_
VERSION
নির্বাচিত কনফিগারেশন VTS প্রয়োজনীয়তা
true current VNDK Android 9 বা উচ্চতর সংস্করণের সাথে লঞ্চ হওয়া ডিভাইসগুলির জন্য বাধ্যতামূলক৷
খালি VNDK Lite Android 8.x সহ লঞ্চ করা ডিভাইসগুলির জন্য বাধ্যতামূলক৷
false খালি Legacy নন-ট্রেবল ডিভাইসের জন্য

VNDK Lite কনফিগারেশন SP-HAL এবং VNDK-SP ভাগ করা লাইব্রেরিগুলিকে বিচ্ছিন্ন করে। Android 8.0-এ, PRODUCT_TREBLE_LINKER_NAMESPACES true হলে এটি ডায়নামিক লিঙ্কারের জন্য কনফিগারেশন ফাইল হতে হবে।

VNDK কনফিগারেশন SP-HAL এবং VNDK-SP ভাগ করা লাইব্রেরিগুলিকেও আলাদা করে। উপরন্তু, এই কনফিগারেশন সম্পূর্ণ গতিশীল লিঙ্কার বিচ্ছিন্নতা প্রদান করে। এটি নিশ্চিত করে যে সিস্টেম পার্টিশনের মডিউলগুলি বিক্রেতা পার্টিশনে ভাগ করা লাইব্রেরির উপর নির্ভর করবে না এবং এর বিপরীতে।

অ্যান্ড্রয়েড 8.1 বা উচ্চতর সংস্করণে, VNDK কনফিগারেশন হল ডিফল্ট কনফিগারেশন এবং BOARD_VNDK_VERSION কে current সেট করে সম্পূর্ণ ডাইনামিক লিঙ্কার আইসোলেশন সক্ষম করার জন্য এটি অত্যন্ত সুপারিশ করা হয়।

VNDK কনফিগারেশন

VNDK কনফিগারেশন সিস্টেম পার্টিশন এবং বিক্রেতা পার্টিশনের মধ্যে ভাগ করা লাইব্রেরি নির্ভরতাকে আলাদা করে। পূর্ববর্তী উপধারায় উল্লিখিত কনফিগারেশনের তুলনায়, পার্থক্যগুলি নিম্নরূপ বর্ণিত হয়েছে:

  • ফ্রেমওয়ার্ক প্রক্রিয়া

    • default , vndk , sphal , এবং rs নামস্থান তৈরি করা হয়।
    • সমস্ত নামস্থান বিচ্ছিন্ন।
    • সিস্টেম ভাগ করা লাইব্রেরি default নামস্থানে লোড করা হয়।
    • SP-HALs sphal নামস্থানে লোড করা হয়।
    • VNDK-SP ভাগ করা লাইব্রেরিগুলি vndk নামস্থানে লোড করা হয়েছে।
  • বিক্রেতা প্রক্রিয়া

    • default , vndk এবং system নামস্থান তৈরি করা হয়।
    • default নামস্থান বিচ্ছিন্ন।
    • বিক্রেতার ভাগ করা লাইব্রেরিগুলি default নামস্থানে লোড করা হয়৷
    • VNDK এবং VNDK-SP ভাগ করা লাইব্রেরিগুলি vndk নামস্থানে লোড করা হয়।
    • LL-NDK এবং এর নির্ভরতাগুলি system নামস্থানে লোড করা হয়।

লিঙ্কার নামস্থানের মধ্যে সম্পর্ক নীচে চিত্রিত করা হয়েছে।

VNDK কনফিগারেশনে বর্ণিত লিঙ্কার নেমস্পেস গ্রাফ
চিত্র 1. লিঙ্কার নেমস্পেস বিচ্ছিন্নতা (VNDK কনফিগারেশন)

উপরের ছবিতে, LL-NDK এবং VNDK-SP নিম্নলিখিত ভাগ করা লাইব্রেরির জন্য দাঁড়িয়েছে:

  • এলএল-এনডিকে
    • libEGL.so
    • libGLESv1_CM.so
    • libGLESv2.so
    • libGLESv3.so
    • libandroid_net.so
    • libc.so
    • libdl.so
    • liblog.so
    • libm.so
    • libnativewindow.so
    • libneuralnetworks.so
    • libsync.so
    • libvndksupport.so
    • libvulkan.so
  • ভিএনডিকে-এসপি
    • android.hardware.graphics.common@1.0.so
    • android.hardware.graphics.mapper@2.0.so
    • android.hardware.renderscript@1.0.so
    • android.hidl.memory@1.0.so
    • libRSCpuRef.so
    • libRSDriver.so
    • libRS_internal.so
    • libbase.so
    • libbcinfo.so
    • libc++.so
    • libcutils.so
    • libhardware.so
    • libhidlbase.so
    • libhidlmemory.so
    • libhidltransport.so
    • libhwbinder.so
    • libion.so
    • libutils.so
    • libz.so

আপনি ডিভাইস থেকে /linkerconfig/ld.config.txt এ আরও বিশদ জানতে পারেন।

VNDK লাইট কনফিগারেশন

অ্যান্ড্রয়েড 8.0 হিসাবে, গতিশীল লিঙ্কারটি SP-HAL এবং VNDK-SP ভাগ করা লাইব্রেরিগুলিকে আলাদা করার জন্য কনফিগার করা হয়েছে যাতে তাদের প্রতীকগুলি অন্যান্য ফ্রেমওয়ার্ক ভাগ করা লাইব্রেরির সাথে বিরোধ না করে। লিঙ্কার নামস্থানের মধ্যে সম্পর্ক নীচে দেখানো হয়েছে।

ভিএনডিকে লাইট কনফিগারেশনে বর্ণিত লিঙ্কার নেমস্পেস গ্রাফ
চিত্র 2. লিঙ্কার নেমস্পেস বিচ্ছিন্নতা (ভিএনডিকে লাইট কনফিগারেশন)

LL-NDK এবং VNDK-SP নিম্নলিখিত ভাগ করা লাইব্রেরির জন্য দাঁড়িয়েছে:

  • এলএল-এনডিকে
    • libEGL.so
    • libGLESv1_CM.so
    • libGLESv2.so
    • libc.so
    • libdl.so
    • liblog.so
    • libm.so
    • libnativewindow.so
    • libstdc++.so (কনফিগারেশনে নয়)
    • libsync.so
    • libvndksupport.so
    • libz.so (কনফিগারেশনে ভিএনডিকে-এসপিতে সরানো হয়েছে)
  • ভিএনডিকে-এসপি
    • android.hardware.graphics.common@1.0.so
    • android.hardware.graphics.mapper@2.0.so
    • android.hardware.renderscript@1.0.so
    • android.hidl.memory@1.0.so
    • libbase.so
    • libc++.so
    • libcutils.so
    • libhardware.so
    • libhidlbase.so
    • libhidlmemory.so
    • libhidltransport.so
    • libhwbinder.so
    • libion.so
    • libutils.so

নীচের টেবিলে ফ্রেমওয়ার্ক প্রসেসের জন্য নেমস্পেস কনফিগারেশন তালিকাভুক্ত করা হয়েছে, যা VNDK লাইট কনফিগারেশনের [system] বিভাগ থেকে উদ্ধৃত করা হয়েছে।

নামস্থান সম্পত্তি মান
default search.paths /system/${LIB}
/odm/${LIB}
/vendor/${LIB}
/product/${LIB}
isolated false
sphal search.paths /odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
isolated true
visible true
links default,vndk,rs
link.default.shared_libs এলএল-এনডিকে
link.vndk.shared_libs ভিএনডিকে-এসপি
link.rs.shared_libs libRS_internal.so
vndk (VNDK-SP-এর জন্য) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
permitted.paths /odm/${LIB}/hw
/odm/${LIB}/egl
/vendor/${LIB}/hw
/vendor/${LIB}/egl
/system/${LIB}/vndk-sp-${VER}/hw
isolated true
visible true
links default
link.default.shared_libs এলএল-এনডিকে
rs (রেন্ডারস্ক্রিপ্টের জন্য) search.paths /odm/${LIB}/vndk-sp
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-sp-${VER}
/odm/${LIB}
/vendor/${LIB}
permitted.paths /odm/${LIB}
/vendor/${LIB}
/data (সংকলিত আরএস কার্নেলের জন্য)
isolated true
visible true
links default,vndk
link.default.shared_libs এলএল-এনডিকে
libmediandk.so
libft2.so
link.vndk.shared_libs ভিএনডিকে-এসপি

নীচের টেবিলটি ভেন্ডর প্রসেসের জন্য নেমস্পেস কনফিগারেশন উপস্থাপন করে, যা VNDK লাইট কনফিগারেশনের [vendor] বিভাগ থেকে উদ্ধৃত করা হয়েছে।

নামস্থান সম্পত্তি মান
default search.paths /odm/${LIB}
/odm/${LIB}/vndk
/odm/${LIB}/vndk-sp
/vendor/${LIB}
/vendor/${LIB}/vndk
/vendor/${LIB}/vndk-sp
/system/${LIB}/vndk-${VER}
/system/${LIB}/vndk-sp-${VER}
/system/${LIB} (অপ্রচলিত)
/product/${LIB} (অপ্রচলিত)
isolated false

ডিভাইস থেকে /linkerconfig/ld.config.txt এ আরও বিশদ বিবরণ পাওয়া যাবে।

নথির ইতিহাস

অ্যান্ড্রয়েড 11 পরিবর্তন

  • অ্যান্ড্রয়েড 11-এ, স্ট্যাটিক ld.config.*.txt ফাইলগুলি কোডবেস থেকে সরানো হয় এবং LinkerConfig তাদের পরিবর্তে রানটাইম তৈরি করে।

অ্যান্ড্রয়েড 9 পরিবর্তন

  • অ্যান্ড্রয়েড 9-এ, vndk লিঙ্কার নামস্থান বিক্রেতা প্রক্রিয়াগুলিতে যোগ করা হয় এবং VNDK ভাগ করা লাইব্রেরিগুলি ডিফল্ট লিঙ্কার নামস্থান থেকে বিচ্ছিন্ন করা হয়।
  • PRODUCT_FULL_TREBLE আরও নির্দিষ্ট PRODUCT_TREBLE_LINKER_NAMESPACES দিয়ে প্রতিস্থাপন করুন।
  • Android 9 নিম্নলিখিত ডায়নামিক লিঙ্কার কনফিগারেশন ফাইলগুলির নাম পরিবর্তন করে।
    Android 8.x অ্যান্ড্রয়েড 9 বর্ণনা
    ld.config.txt.in ld.config.txt রানটাইম লিঙ্কার নেমস্পেস আইসোলেশন সহ ডিভাইসগুলির জন্য
    ld.config.txt ld.config.vndk_lite.txt VNDK-SP লিঙ্কার নেমস্পেস আইসোলেশন সহ ডিভাইসগুলির জন্য
    ld.config.legacy.txt ld.config.legacy.txt অ্যান্ড্রয়েড 7.x বা তার কম সংস্করণে চলমান লিগ্যাসি ডিভাইসগুলির জন্য
  • android.hardware.graphics.allocator@2.0.so সরান।
  • product এবং odm পার্টিশন যোগ করা হয়.