فضای نام پیونددهنده

پیونددهنده پویا دو چالش را در طراحی 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}

فایل پیکربندی شامل این موارد است:

  • چند ویژگی نگاشت بخش دایرکتوری در ابتدا برای پیونددهنده پویا برای انتخاب بخش مؤثر.
  • چند بخش پیکربندی فضانام پیونددهنده:
    • هر بخش حاوی چندین فضای نام (رأس‌های گراف) و چندین پیوند بازگشتی بین فضاهای نام (کمان‌های گراف) است.
    • هر فضای نام دارای تنظیمات مجزای خود برای جداسازی، مسیرهای جستجو، مسیرهای مجاز، و نمایان بودن است.

جدول‌های زیر معنای هر دارایی را به‌طور مفصل شرح می‌دهند.

دارایی نگاشت بخش-دایرکتوری

دارایی شرح مثال

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

این نشان می‌دهد که سه فضانام (default، sphal، و vndk) در پیکربندی [system] وجود دارد.

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 یا زیر permitted.paths می‌توانند در فضای نام sphal بار شوند.

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

فهرستی از دایرکتوری‌ها که با دونقطه از هم جدا شده‌اند تا هنگام فعال بودن AddressSanitizer (ASan)، کتابخانه‌های مشترک در آن‌ها جستجو شود.

وقتی 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 نمی‌تواند /system/${LIB}/hw/audio.a2dp.default.so را در فضای نام default بار کند.

namespace.name.asan.permitted.paths

فهرست دایرکتوری‌های جداشده با دونقطه که پیونددهنده پویا می‌تواند کتابخانه‌های مشترک را درصورت فعال بودن ASan بار کند.

namespace.name.permitted.paths وقتی ASan فعال باشد نادیده گرفته می‌شود.

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 را صرف‌نظر از وجود جای‌نام برمی‌گرداند. کتابخانه‌های مشترک فقط درصورتی می‌توانند در این فضای نام بار شوند که (۱) توسط فضای نام پیونددهنده دیگری درخواست شده باشند که پیوند بازگشتی به این فضای نام داشته باشد، یا (۲) توسط کتابخانه‌های مشترک یا فایل‌های اجرایی دیگر در این فضای نام درخواست شده باشند.

namespace.sphal.visible = true

این نشان می‌دهد که android_get_exported_namespace("sphal") می‌تواند یک دسته فضای نام پیونددهنده معتبر برگرداند.

ایجاد فضای نام پیونددهنده

در Android 11، پیکربندی پیونددهنده در زمان اجرا در /linkerconfig به‌جای استفاده از فایل‌های نوشتار ساده در ${android-src}/system/core/rootdir/etc ایجاد می‌شود. پیکربندی در زمان راه‌اندازی براساس محیط زمان اجرا تولید می‌شود که شامل موارد زیر است:

  • اگر دستگاه از VNDK پشتیبانی می‌کند
  • نسخه VNDK هدف پارتیشن فروشنده
  • نسخه VNDK توزیع محصول
  • پیمانه‌های APEX نصب‌شده

پیکربندی پیونددهنده با حل وابستگی‌های بین فضاهای نام پیونددهنده ایجاد می‌شود. برای مثال، اگر به‌روزرسانی‌هایی در ماژول‌های APEX وجود داشته باشد که شامل به‌روزرسانی‌های وابستگی باشد، پیکربندی پیونددهنده تولید می‌شود که این تغییرات را منعکس می‌کند. جزئیات بیشتر برای ایجاد پیکربندی پیونددهنده را می‌توانید در ${android-src}/system/linkerconfig پیدا کنید.

جداسازی فضای نام پیونددهنده

سه نوع پیکربندی وجود دارد. بسته به مقدار PRODUCT_TREBLE_LINKER_NAMESPACES و BOARD_VNDK_VERSION در BoardConfig.mk، پیکربندی متناظر در زمان راه‌اندازی تولید می‌شود.

PRODUCT_TREBLE_
LINKER_NAMESPACES
BOARD_VNDK_
VERSION
پیکربندی انتخاب‌شده الزام VTS
true current VNDK برای دستگاه‌هایی که با Android 9 یا بالاتر عرضه شده‌اند الزامی است
خالی VNDK Lite برای دستگاه‌هایی که با Android 8.x عرضه شده‌اند اجباری است
false خالی Legacy برای دستگاه‌های غیرTreble

پیکربندی VNDK Lite کتابخانه‌های مشترک SP-HAL و VNDK-SP را جدا می‌کند. در Android 8.0، این باید فایل پیکربندی پیونددهنده پویا وقتی PRODUCT_TREBLE_LINKER_NAMESPACES برابر با true باشد.

پیکربندی VNDK همچنین کتابخانه‌های مشترک SP-HAL و VNDK-SP را جدا می‌کند. علاوه‌براین، این پیکربندی جداسازی کامل پیونددهنده پویا را فراهم می‌کند. این کار تضمین می‌کند که ماژول‌های موجود در پارتیشن سیستم به کتابخانه‌های مشترک در پارتیشن‌های فروشنده وابسته نباشند و بالعکس.

در Android نسخه ۸.۱ یا بالاتر، پیکربندی 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 شرح داده شده است

شکل ۱. جداسازی فضای نام پیونددهنده (پیکربندی VNDK).

در تصویر بالا، LL-NDK و VNDK-SP نشان‌دهنده کتابخانه‌های مشترک زیر هستند:

  • LL-NDK
    • 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

از Android 8.0، پیونددهنده پویا به‌گونه‌ای پیکربندی شده است که کتابخانه‌های مشترک SP-HAL و VNDK-SP را جدا کند تا نشانه‌های آن‌ها با دیگر کتابخانه‌های مشترک چارچوب تداخل نداشته باشد. رابطه بین فضاهای نام پیونددهنده در زیر نشان داده شده است.

گراف جای‌نام پیونددهنده که در پیکربندی VNDK Lite شرح داده شده است
شکل ۲. جداسازی فضای نام پیونددهنده (پیکربندی VNDK Lite)

LL-NDK و VNDK-SP مخفف کتابخانه‌های مشترک زیر هستند:

  • LL-NDK
    • 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

جدول زیر پیکربندی فضاهای نام را برای فرایندهای چارچوب فهرست می‌کند که از بخش [system] در پیکربندی VNDK Lite گزینش شده است.

فضای نام دارایی مقدار
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 LL-NDK
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 LL-NDK
‫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 (برای هسته RS کامپایل‌شده)
isolated true
visible true
links default,vndk
link.default.shared_libs LL-NDK
libmediandk.so
libft2.so
link.vndk.shared_libs VNDK-SP

جدول زیر پیکربندی فضاهای نام را برای فرایندهای فروشنده ارائه می‌دهد، که از بخش [vendor] در پیکربندی VNDK Lite گزینش شده است.

فضای نام دارایی مقدار
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 از دستگاه پیدا کنید.

سابقه سند

تغییرات Android 11

  • در Android 11، فایل‌های ld.config.*.txt ایستا از پایگاه کد برداشته شده است و به‌جای آن، LinkerConfig آن‌ها را در زمان اجرا تولید می‌کند.

‫Android 9 تغییر می‌کند

  • در Android 9، فضای نام پیونددهنده vndk به فرایندهای فروشنده اضافه می‌شود و کتابخانه‌های مشترک VNDK از فضای نام پیونددهنده پیش‌فرض جدا می‌شوند.
  • PRODUCT_FULL_TREBLE را با PRODUCT_TREBLE_LINKER_NAMESPACES خاص‌تری جایگزین کنید.
  • ‫Android 9 نام فایل‌های پیکربندی پیونددهنده پویا زیر را تغییر می‌دهد.
    Android 8.x Android 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 برای دستگاه‌های قدیمی که Android نسخه ۷.x یا پایین‌تر دارند
  • برداشتن android.hardware.graphics.allocator@2.0.so.
  • بخش‌های product و odm اضافه شدند.