ডাইনামিক লিঙ্কার Treble VNDK ডিজাইনের দুটি চ্যালেঞ্জ মোকাবেলা করে:
- 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]/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}
কনফিগারেশন ফাইলে অন্তর্ভুক্ত রয়েছে:
- ডাইনামিক লিঙ্কারের কার্যকর সেকশন নির্বাচন করার জন্য শুরুতে বেশ কয়েকটি ডিরেক্টরি-সেকশন ম্যাপিং প্রোপার্টি থাকে।
- লিঙ্কার নেমস্পেস কনফিগারেশনের বিভিন্ন অংশ:
- প্রতিটি বিভাগে একাধিক নেমস্পেস (গ্রাফ ভার্টেক্স) এবং নেমস্পেসগুলোর মধ্যে একাধিক ফলব্যাক লিঙ্ক (গ্রাফ আর্ক) থাকে।
- প্রতিটি নেমস্পেসের নিজস্ব আইসোলেশন, সার্চ পাথ, অনুমোদিত পাথ এবং ভিজিবিলিটি সেটিংস থাকে।
নিচের সারণিগুলোতে প্রতিটি বৈশিষ্ট্যের অর্থ বিস্তারিতভাবে বর্ণনা করা হয়েছে।
ডিরেক্টরি-বিভাগ ম্যাপিং সম্পত্তি
| সম্পত্তি | বর্ণনা | উদাহরণ |
|---|---|---|
| এমন একটি ডিরেক্টরির পথ, যেটির ক্ষেত্রে প্রতিটি প্রপার্টি ডিরেক্টরির অধীনে থাকা এক্সিকিউটেবল ফাইলগুলোকে একটি লিঙ্কার নেমস্পেস কনফিগারেশন সেকশনের সাথে ম্যাপ করে। একই | এর থেকে বোঝা যায় যে, |
সম্পর্কের বৈশিষ্ট্য
| সম্পত্তি | বর্ণনা | উদাহরণ |
|---|---|---|
additional. namespaces | সেকশনটির জন্য ( | এটি নির্দেশ করে যে |
namespace. name . links | ফলব্যাক নেমস্পেসগুলোর একটি কমা-দ্বারা-বিভক্ত তালিকা। যদি বর্তমান নেমস্পেসে কোনো শেয়ার্ড লাইব্রেরি খুঁজে না পাওয়া যায়, তাহলে ডাইনামিক লিঙ্কার ফলব্যাক নেমস্পেসগুলো থেকে শেয়ার্ড লাইব্রেরিটি লোড করার চেষ্টা করে। তালিকার শুরুতে নির্দিষ্ট করা নেমস্পেসটির অগ্রাধিকার বেশি থাকে। | যদি কোনো শেয়ার্ড লাইব্রেরি বা এক্সিকিউটেবল এমন একটি শেয়ার্ড লাইব্রেরির জন্য অনুরোধ করে যা এবং তারপর, যদি অবশেষে, সমস্ত প্রচেষ্টা ব্যর্থ হলে, ডাইনামিক লিঙ্কার একটি ত্রুটি ফেরত দেয়। |
namespace. name . link. other . shared_libs | শেয়ার্ড লাইব্রেরিগুলোর একটি কোলন-বিভক্ত তালিকা, যেগুলো এই প্রপার্টিটি | এর থেকে বোঝা যায় যে, ফলব্যাক লিঙ্কটি অনুরোধকৃত লাইব্রেরির নাম হিসেবে শুধুমাত্র |
namespace. name . link. other . allow_all_shared_libs | একটি বুলিয়ান মান যা নির্দেশ করে যে, এই প্রপার্টিটি | এর থেকে বোঝা যায় যে, সমস্ত লাইব্রেরির নাম |
নেমস্পেস বৈশিষ্ট্য
| সম্পত্তি | বর্ণনা | উদাহরণ |
|---|---|---|
namespace. name . isolated | একটি বুলিয়ান মান যা নির্দেশ করে যে ডায়নামিক লিঙ্কার শেয়ার্ড লাইব্রেরিটি কোথায় অবস্থিত তা পরীক্ষা করবে কিনা। যদি যদি | এর থেকে বোঝা যায় যে, শুধুমাত্র |
namespace. name . search.paths | শেয়ার্ড লাইব্রেরিগুলো খোঁজার জন্য ডিরেক্টরিগুলোর একটি কোলন-বিভক্ত তালিকা। যদি যখন উদাহরণস্বরূপ, যদি | এর থেকে বোঝা যায় যে ডাইনামিক লিঙ্কার শেয়ার্ড লাইব্রেরির জন্য |
namespace. name . asan.search.paths | AddressSanitizer (ASan) সক্রিয় থাকলে শেয়ার্ড লাইব্রেরি খোঁজার জন্য ডিরেক্টরিগুলোর একটি কোলন-বিভক্ত তালিকা। ASan সক্রিয় থাকলে | এর থেকে বোঝা যায় যে, যখন ASan সক্রিয় করা হয়, তখন ডাইনামিক লিঙ্কার প্রথমে |
namespace. name . permitted.paths | কোলন দ্বারা পৃথক করা ডিরেক্টরিগুলোর (সাবডিরেক্টরি সহ) একটি তালিকা, যেখান থেকে ডাইনামিক লিঙ্কার শেয়ার্ড লাইব্রেরিগুলো লোড করতে পারে ( যদি | এর থেকে বোঝা যায় যে উদাহরণস্বরূপ, |
namespace. name . asan.permitted.paths | কোলন দ্বারা পৃথক করা ডিরেক্টরিগুলোর একটি তালিকা, যেখান থেকে ASan সক্রিয় থাকলে ডায়নামিক লিঙ্কার শেয়ার্ড লাইব্রেরিগুলো লোড করতে পারে। ASan সক্রিয় থাকলে | এর থেকে বোঝা যায় যে, ASan সক্রিয় করা থাকলে |
namespace. name . visible | একটি বুলিয়ান মান যা নির্দেশ করে যে প্রোগ্রামটি ( যদি | এর থেকে বোঝা যায় যে |
লিঙ্কার নেমস্পেস তৈরি
অ্যান্ড্রয়েড ১১-এ, ${android-src}/system/core/rootdir/etc তে থাকা সাধারণ টেক্সট ফাইলের পরিবর্তে, লিঙ্কার কনফিগারেশন রানটাইমে /linkerconfig অধীনে তৈরি করা হয়। এই কনফিগারেশনটি রানটাইম এনভায়রনমেন্টের উপর ভিত্তি করে বুট টাইমে তৈরি হয়, যার মধ্যে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত থাকে:
- যদি ডিভাইসটি VNDK সমর্থন করে
- ভেন্ডর পার্টিশনের টার্গেট VNDK সংস্করণ
- প্রোডাক্ট পার্টিশনের VNDK সংস্করণ
- ইনস্টল করা APEX মডিউল
লিঙ্কার নেমস্পেসগুলোর মধ্যেকার নির্ভরতা সমাধান করার মাধ্যমে লিঙ্কার কনফিগারেশন তৈরি করা হয়। উদাহরণস্বরূপ, যদি APEX মডিউলগুলোতে এমন কোনো আপডেট আসে যাতে নির্ভরতার পরিবর্তনও অন্তর্ভুক্ত থাকে, তবে সেই পরিবর্তনগুলো প্রতিফলিত করে লিঙ্কার কনফিগারেশন তৈরি করা হয়। লিঙ্কার কনফিগারেশন তৈরি করার বিষয়ে আরও বিস্তারিত তথ্য ${android-src}/system/linkerconfig -এ পাওয়া যাবে।
লিঙ্কার নেমস্পেস আইসোলেশন
তিন ধরনের কনফিগারেশন রয়েছে। BoardConfig.mk ফাইলে থাকা PRODUCT_TREBLE_LINKER_NAMESPACES এবং BOARD_VNDK_VERSION এর মানের ওপর ভিত্তি করে বুট করার সময় সংশ্লিষ্ট কনফিগারেশনটি তৈরি হয়।
PRODUCT_TREBLE_LINKER_NAMESPACES | BOARD_VNDK_VERSION | নির্বাচিত কনফিগারেশন | ভিটিএস প্রয়োজনীয়তা |
|---|---|---|---|
true | current | VNDK | অ্যান্ড্রয়েড ৯ বা তার উচ্চতর সংস্করণে চালু হওয়া ডিভাইসগুলির জন্য বাধ্যতামূলক। |
| খালি | 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 শেয়ার্ড লাইব্রেরিগুলোকেও পৃথক করে। এছাড়াও, এই কনফিগারেশন সম্পূর্ণ ডাইনামিক লিঙ্কার আইসোলেশন প্রদান করে। এটি নিশ্চিত করে যে সিস্টেম পার্টিশনের মডিউলগুলো ভেন্ডর পার্টিশনের শেয়ার্ড লাইব্রেরির উপর নির্ভরশীল হবে না এবং এর বিপরীতটিও ঘটবে না।
অ্যান্ড্রয়েড ৮.১ বা তার উচ্চতর সংস্করণে, VNDK কনফিগারেশন হলো ডিফল্ট কনফিগারেশন এবং BOARD_VNDK_VERSION current সেট করে সম্পূর্ণ ডাইনামিক লিঙ্কার আইসোলেশন সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়।
VNDK কনফিগারেশন
VNDK কনফিগারেশন সিস্টেম পার্টিশন এবং ভেন্ডর পার্টিশনের মধ্যে শেয়ার্ড লাইব্রেরি নির্ভরতাগুলোকে পৃথক করে। পূর্ববর্তী উপ-বিভাগে উল্লিখিত কনফিগারেশনগুলোর তুলনায়, পার্থক্যগুলো নিম্নরূপ:
কাঠামো প্রক্রিয়া
-
default,vndk,sphalএবংrsনেমস্পেসগুলো তৈরি করা হয়েছে। - সকল নেমস্পেস বিচ্ছিন্ন।
- সিস্টেম শেয়ার্ড লাইব্রেরিগুলো
defaultনেমস্পেসে লোড করা হয়। - SP-HAL-গুলো
sphalনেমস্পেসে লোড করা হয়। - VNDK-SP শেয়ার্ড লাইব্রেরিগুলো
vndkনেমস্পেসে লোড করা হয়েছে।
-
বিক্রেতার প্রক্রিয়া
-
default,vndk, এবংsystemনেমস্পেসগুলো তৈরি করা হয়। -
defaultনেমস্পেসটি বিচ্ছিন্ন। - ভেন্ডর শেয়ার্ড লাইব্রেরিগুলো
defaultনেমস্পেসে লোড করা হয়। - VNDK এবং VNDK-SP শেয়ার্ড লাইব্রেরিগুলো
vndkনেমস্পেসে লোড করা হয়। - LL-NDK এবং এর নির্ভরশীলতাগুলো
systemনেমস্পেসে লোড করা হয়।
-
লিঙ্কার নেমস্পেসগুলোর মধ্যকার সম্পর্ক নিচে চিত্রিত করা হলো।

চিত্র ১. লিঙ্কার নেমস্পেস পৃথকীকরণ (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
-
- VNDK-SP
-
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 Lite কনফিগারেশন
অ্যান্ড্রয়েড ৮.০ থেকে, ডাইনামিক লিঙ্কারকে SP-HAL এবং VNDK-SP শেয়ার্ড লাইব্রেরিগুলোকে এমনভাবে কনফিগার করা হয়েছে যাতে তাদের সিম্বলগুলো অন্যান্য ফ্রেমওয়ার্ক শেয়ার্ড লাইব্রেরির সাথে সাংঘর্ষিক না হয়। লিঙ্কার নেমস্পেসগুলোর মধ্যকার সম্পর্ক নিচে দেখানো হলো।

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(কনফিগারেশনে VNDK-SP- তে স্থানান্তরিত করা হয়েছে)
-
- VNDK-SP
-
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 Lite কনফিগারেশনের [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 | VNDK-SP | |
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 (RenderScript এর জন্য) | 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.solibft2.so | |
link.vndk.shared_libs | VNDK-SP |
নিচের সারণিতে ভেন্ডর প্রসেসগুলির নেমস্পেস কনফিগারেশন উপস্থাপন করা হয়েছে, যা VNDK Lite কনফিগারেশনের [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 ফাইল থেকে আরও বিস্তারিত তথ্য পাওয়া যাবে।
নথির ইতিহাস
অ্যান্ড্রয়েড ১১ পরিবর্তন
- অ্যান্ড্রয়েড ১১-এ, স্ট্যাটিক
ld.config.*.txtফাইলগুলো কোডবেস থেকে সরিয়ে দেওয়া হয়েছে এবং এর পরিবর্তে লিঙ্কারকনফিগ রানটাইমে সেগুলো তৈরি করে।
অ্যান্ড্রয়েড ৯ পরিবর্তন
- অ্যান্ড্রয়েড ৯-এ,
vndkলিঙ্কার নেমস্পেসটি ভেন্ডর প্রসেসগুলিতে যুক্ত করা হয়েছে এবং VNDK শেয়ার্ড লাইব্রেরিগুলিকে ডিফল্ট লিঙ্কার নেমস্পেস থেকে পৃথক করা হয়েছে। -
PRODUCT_FULL_TREBLEআরও সুনির্দিষ্টPRODUCT_TREBLE_LINKER_NAMESPACESদ্বারা প্রতিস্থাপন করুন। - অ্যান্ড্রয়েড ৯ নিম্নলিখিত ডাইনামিক লিঙ্কার কনফিগারেশন ফাইলগুলোর নাম পরিবর্তন করে।
অ্যান্ড্রয়েড ৮.x অ্যান্ড্রয়েড ৯ বর্ণনা ld.config.txt.inld.config.txtরানটাইম লিঙ্কার নেমস্পেস আইসোলেশন সহ ডিভাইসগুলির জন্য ld.config.txtld.config.vndk_lite.txtVNDK-SP লিঙ্কার নেমস্পেস আইসোলেশন সহ ডিভাইসগুলির জন্য ld.config.legacy.txtld.config.legacy.txtঅ্যান্ড্রয়েড ৭.x বা তার নিম্ন সংস্করণে চালিত পুরোনো ডিভাইসগুলির জন্য -
android.hardware.graphics.allocator@2.0.soমুছে ফেলুন। -
productএবংodmপার্টিশন যোগ করা হয়েছে।