مساحة اسم الرابط

يعالج الرابط الديناميكي تحديين في تصميم 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 كاسم المكتبة المطلوب. الرابط الديناميكي الرابط الاحتياطي من sphal إلى مساحة الاسم default إذا لم يكن اسم المكتبة المطلوب libc.so أو libm.so.

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

قائمة بالأدلة مفصولة بنقطتين للبحث عن الأدلة المشتركة المكتبات.

تتم إضافة الأدلة المحدّدة في search.paths في البداية. إلى اسم المكتبة المطلوب في حال استدعاء الدالة dlopen() أو لا يحدِّد إدخالات DT_NEEDED المسار الكامل. الدليل المحددة في بداية القائمة لها أولوية أعلى.

عندما تكون قيمة 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).

namespace.name.search.paths هو تم تجاهلها عند تعيين ASan مفعّلة.

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. على سبيل المثال، إذا تم /system/${LIB} ميزة permitted.paths، كل من /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 بصرف النظر عن مساحة الاسم. المكتبات المشتركة يمكن تحميلها في مساحة الاسم هذه فقط إذا (1) طلبها مستخدم آخر مساحة اسم الرابط التي تتضمن رابطًا احتياطيًا إلى مساحة الاسم هذه أو (2) تطلبها مكتبات مشتركة أو ملفات تنفيذية أخرى في مساحة الاسم هذه.

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 للأجهزة التي لا تستخدم الصوت العالي الطبقة

يعزل إعداد VNDK Lite المكتبات المشتركة SP-HAL وVNDK-SP. في نظام Android 8.0، هذه يجب أن يكون ملف الإعداد لرابط الديناميكي عند تم true ميزة PRODUCT_TREBLE_LINKER_NAMESPACES.

يعزل إعداد VNDK أيضًا المكتبات المشتركة SP-HAL وVNDK-SP. بالإضافة إلى ذلك، توفر هذه التهيئة عزل الرابط الديناميكي بالكامل. فهو يضمن أن الوحدات في قسم النظام لن تعتمد على وحدة البيانات المكتبات في أقسام البائع والعكس صحيح.

في الإصدار Android 8.1 أو الإصدارات الأحدث، تكون إعدادات 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

الشكل 1. عزل مساحة اسم الرابط (ضبط 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
الشكل 2. عزل مساحة اسم الرابط (ضبط 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" من الجهاز.

سجلّ المستندات

التغييرات على الإصدار 11 من Android

  • في نظام Android 11، يتم حفظ ملفات ld.config.*.txt الثابتة من قاعدة الرموز وينشئها LinkerConfig في وقت التشغيل بدلاً من ذلك.

التغييرات على Android 9

  • في الإصدار 9 من نظام Android، تتم إضافة مساحة اسم رابط vndk إلى المورّد يتم عزل العمليات ومكتبات VNDK المشتركة عن برنامج الربط الافتراضي مساحة الاسم.
  • استبدال PRODUCT_FULL_TREBLE بعبارات أكثر تحديدًا PRODUCT_TREBLE_LINKER_NAMESPACES
  • يغيّر نظام التشغيل Android 9 أسماء إعدادات الربط الديناميكي التالية. الملفات.
    الإصدار 8.x من نظام التشغيل Android الإصدار 9 من نظام التشغيل Android الوصف
    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 7.x أو الإصدارات الأقدم
  • إزالة android.hardware.graphics.allocator@2.0.so
  • تمت إضافة القسمَين product وodm.