लिंकर नेमस्पेस

डायनामिक लिंकर ट्रेबल VNDK डिज़ाइन में दो चुनौतियों से निपटता है:

  • एसपी-एचएएल साझा पुस्तकालय और वीएनडीके-एसपी पुस्तकालयों सहित उनकी निर्भरताएं, फ्रेमवर्क प्रक्रियाओं में लोड की जाती हैं। प्रतीकों के टकराव को रोकने के लिए कुछ तंत्र होने चाहिए।
  • 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 या 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

एड्रेससैनिटाइज़र (एएसएएन) सक्षम होने पर साझा लाइब्रेरी की खोज के लिए निर्देशिकाओं की एक कोलन-पृथक सूची।

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

निर्देशिकाओं की एक कोलन-पृथक सूची (उपनिर्देशिकाओं सहित) जहां डायनेमिक लिंकर isolated पर साझा लाइब्रेरीज़ ( search.paths के अलावा) को लोड कर सकता है 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. 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") एक वैध लिंकर नेमस्पेस हैंडल लौटा सकता है।

लिंकर नेमस्पेस निर्माण

एंड्रॉइड 11 में, ${android-src}/system/core/rootdir/etc में सादे टेक्स्ट फ़ाइलों का उपयोग करने के बजाय /linkerconfig के तहत रनटाइम पर लिंकर कॉन्फ़िगरेशन बनाया जाता है। कॉन्फ़िगरेशन रनटाइम वातावरण के आधार पर बूट समय पर उत्पन्न होता है, जिसमें निम्नलिखित आइटम शामिल होते हैं:

  • यदि डिवाइस VNDK को सपोर्ट करता है
  • विक्रेता विभाजन का लक्ष्य VNDK संस्करण
  • उत्पाद विभाजन का VNDK संस्करण
  • स्थापित एपेक्स मॉड्यूल

लिंकर कॉन्फ़िगरेशन लिंकर नेमस्पेस के बीच निर्भरता को हल करके बनाया गया है। उदाहरण के लिए, यदि APEX मॉड्यूल पर कोई अपडेट है जिसमें निर्भरता अपडेट शामिल है, तो इन परिवर्तनों को दर्शाते हुए लिंकर कॉन्फ़िगरेशन उत्पन्न होता है। लिंकर कॉन्फ़िगरेशन बनाने के लिए अधिक विवरण ${android-src}/system/linkerconfig में पाया जा सकता है।

लिंकर नेमस्पेस अलगाव

तीन कॉन्फ़िगरेशन प्रकार हैं. BoardConfig.mk में PRODUCT_TREBLE_LINKER_NAMESPACES और BOARD_VNDK_VERSION के मान के आधार पर, संबंधित कॉन्फ़िगरेशन बूट समय पर उत्पन्न होता है।

PRODUCT_TREBLE_
LINKER_NAMESPACES
BOARD_VNDK_
VERSION
चयनित कॉन्फ़िगरेशन वीटीएस आवश्यकता
true current VNDK एंड्रॉइड 9 या उच्चतर के साथ लॉन्च किए गए उपकरणों के लिए अनिवार्य
खाली VNDK Lite Android 8.x के साथ लॉन्च किए गए उपकरणों के लिए अनिवार्य
false खाली Legacy गैर-तिहरा उपकरणों के लिए

VNDK लाइट कॉन्फ़िगरेशन 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 कॉन्फ़िगरेशन सिस्टम विभाजन और विक्रेता विभाजन के बीच साझा लाइब्रेरी निर्भरता को अलग करता है। पिछले उपधारा में उल्लिखित कॉन्फ़िगरेशन की तुलना में, अंतर निम्नानुसार उल्लिखित हैं:

  • फ़्रेमवर्क प्रक्रियाएँ

    • default , vndk , sphal , और rs नेमस्पेस बनाए जाते हैं।
    • सभी नामस्थान पृथक हैं.
    • सिस्टम साझा लाइब्रेरीज़ को default नेमस्पेस में लोड किया जाता है।
    • एसपी-एचएएल को sphal नेमस्पेस में लोड किया जाता है।
    • VNDK-SP साझा लाइब्रेरीज़ को vndk नेमस्पेस में लोड किया गया।
  • विक्रेता प्रक्रियाएँ

    • default , vndk , और system नेमस्पेस बनाए जाते हैं।
    • default नामस्थान पृथक है.
    • विक्रेता साझा लाइब्रेरीज़ को default नेमस्पेस में लोड किया जाता है।
    • VNDK और VNDK-SP साझा लाइब्रेरी को vndk नेमस्पेस में लोड किया गया है।
    • एलएल-एनडीके और इसकी निर्भरताएं system नेमस्पेस में लोड की जाती हैं।

लिंकर नामस्थानों के बीच संबंध नीचे दर्शाया गया है।

वीएनडीके कॉन्फ़िगरेशन में वर्णित लिंकर नेमस्पेस ग्राफ़
चित्र 1. लिंकर नेमस्पेस आइसोलेशन (VNDK कॉन्फ़िगरेशन)

ऊपर की छवि में, एलएल-एनडीके और वीएनडीके-एसपी निम्नलिखित साझा पुस्तकालयों के लिए हैं:

  • एलएल-एनडीके
    • 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 में अधिक विवरण पा सकते हैं।

वीएनडीके लाइट कॉन्फ़िगरेशन

एंड्रॉइड 8.0 के अनुसार, डायनेमिक लिंकर को एसपी-एचएएल और वीएनडीके-एसपी साझा लाइब्रेरी को अलग करने के लिए कॉन्फ़िगर किया गया है ताकि उनके प्रतीक अन्य फ्रेमवर्क साझा लाइब्रेरी के साथ संघर्ष न करें। लिंकर नामस्थानों के बीच संबंध नीचे दिखाया गया है।

वीएनडीके लाइट कॉन्फ़िगरेशन में वर्णित लिंकर नेमस्पेस ग्राफ़
चित्र 2. लिंकर नेमस्पेस अलगाव (वीएनडीके लाइट कॉन्फ़िगरेशन)

एलएल-एनडीके और वीएनडीके-एसपी निम्नलिखित साझा पुस्तकालयों के लिए हैं:

  • एलएल-एनडीके
    • 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 पर ले जाया गया)
  • वीएनडीके-एसपी
    • 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] अनुभाग से उद्धृत किया गया है।

नाम स्थान संपत्ति कीमत
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 (वीएनडीके-एसपी के लिए) 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 लिंकर नेमस्पेस को विक्रेता प्रक्रियाओं में जोड़ा जाता है और वीएनडीके साझा लाइब्रेरी को डिफ़ॉल्ट लिंकर नेमस्पेस से अलग किया जाता है।
  • PRODUCT_FULL_TREBLE अधिक विशिष्ट PRODUCT_TREBLE_LINKER_NAMESPACES से बदलें।
  • एंड्रॉइड 9 निम्नलिखित डायनामिक लिंकर कॉन्फ़िगरेशन फ़ाइलों के नाम बदलता है।
    एंड्रॉइड 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 Android 7.x या उससे पहले के संस्करण पर चलने वाले पुराने उपकरणों के लिए
  • android.hardware.graphics.allocator@2.0.so हटाएं।
  • product और odm विभाजन जोड़े जाते हैं।