मूल पुस्तकालयों के लिए नामस्थान

एंड्रॉइड 7.0 ने देशी पुस्तकालयों के लिए आंतरिक एपीआई दृश्यता को सीमित करने और उन स्थितियों को हल करने के लिए नामस्थान पेश किए, जहां ऐप्स गलती से अपने स्वयं के बजाय प्लेटफॉर्म पुस्तकालयों का उपयोग करते हैं। देखें एंड्रॉयड 7.0 में निजी C / C ++ प्रतीक प्रतिबंध के साथ में सुधार स्थिरता आवेदन विशेष परिवर्तन के लिए Android डेवलपर ब्लॉग पोस्ट।

आर्किटेक्चर

एंड्रॉइड 7.0 और उच्चतर में, सिस्टम लाइब्रेरी को ऐप लाइब्रेरी से अलग किया जाता है।

देशी पुस्तकालयों के लिए नामस्थान

चित्र 1 देशी पुस्तकालयों के लिए नेमस्पेस

नेटिव लाइब्रेरी के लिए नेमस्पेस ऐप्स को प्राइवेट-प्लेटफॉर्म नेटिव एपीआई (जैसा कि ओपनएसएसएल के साथ किया गया था) का उपयोग करने से रोकता है। यह भी स्थितियों (के रूप में साथ देखा जहां क्षुधा गलती से अपने स्वयं के बजाय मंच पुस्तकालयों का उपयोग को हटा libpng )। ऐप पुस्तकालयों के लिए दुर्घटना से आंतरिक सिस्टम पुस्तकालयों का उपयोग करना मुश्किल है (और इसके विपरीत)।

अतिरिक्त देशी पुस्तकालय जोड़ना

मानक सार्वजनिक स्थानीय पुस्तकालयों के अलावा, सिलिकॉन विक्रेता (एंड्रॉइड 7.0 से शुरू) और डिवाइस निर्माता (एंड्रॉइड 9 से शुरू) अतिरिक्त देशी पुस्तकालयों को संबंधित पुस्तकालय फ़ोल्डरों के तहत रखकर और उन्हें स्पष्ट रूप से .txt में सूचीबद्ध करके ऐप्स के लिए सुलभ अतिरिक्त प्रदान करना चुन सकते हैं। फ़ाइलें।

पुस्तकालय फ़ोल्डर हैं:

  • /vendor/lib (32-बिट के लिए) और /vendor/lib64 सिलिकॉन विक्रेताओं से पुस्तकालयों के लिए (64-बिट के लिए)
  • /system/lib (32-बिट के लिए) और /system/lib64 (64-बिट के लिए) उपकरण निर्माताओं से पुस्तकालयों के लिए

.txt फ़ाइलें हैं:

  • /vendor/etc/public.libraries.txt सिलिकॉन विक्रेताओं से पुस्तकालयों के लिए
  • /system/etc/public.libraries-COMPANYNAME.txt उपकरण निर्माताओं से पुस्तकालयों के लिए है, जहां COMPANYNAME (जैसे निर्माता के नाम का उल्लेख awesome.company )। COMPANYNAME के साथ मेल खाना चाहिए [A-Za-z0-9_.-]+ ; अक्षरांकीय वर्ण, _, । (डॉट) और -। यदि कुछ पुस्तकालय बाहरी समाधान प्रदाताओं से हैं तो एक उपकरण में ऐसी कई .txt फ़ाइलें होना संभव है।

में मूल निवासी पुस्तकालयों system विभाजन कि द्वारा उपकरण निर्माताओं को सार्वजनिक कर दिया जाता है नामित किया जाना चाहिए lib*COMPANYNAME.so , उदाहरण के लिए, libFoo.awesome.company.so । दूसरे शब्दों में, libFoo.so कंपनी का नाम प्रत्यय के बिना नहीं सार्वजनिक किया जाना चाहिए। COMPANYNAME पुस्तकालय फ़ाइल नाम के साथ मेल खाना चाहिए COMPANYNAME txt फ़ाइल का नाम है जिसमें लाइब्रेरी नाम सूचीबद्ध है में।

मूल पुस्तकालय जो एओएसपी का हिस्सा हैं, उन्हें सार्वजनिक नहीं किया जाना चाहिए (मानक सार्वजनिक देशी पुस्तकालयों को छोड़कर जो डिफ़ॉल्ट रूप से सार्वजनिक हैं)। केवल सिलिकॉन विक्रेताओं या डिवाइस निर्माताओं द्वारा जोड़े गए अतिरिक्त पुस्तकालयों को ऐप्स के लिए सुलभ बनाया जा सकता है।

एंड्रॉइड 8.0 से शुरू होकर, विक्रेता सार्वजनिक पुस्तकालयों में निम्नलिखित अतिरिक्त प्रतिबंध और आवश्यक सेटअप हैं:

  1. विक्रेता में मूल पुस्तकालय को ठीक से लेबल किया जाना चाहिए ताकि यह ऐप्स के लिए सुलभ हो सके। एक्सेस (तृतीय पक्ष ऐप्स सहित) किसी भी एप्लिकेशन द्वारा की आवश्यकता है, पुस्तकालय के रूप में लेबल किया जाना चाहिए same_process_hal_file एक विक्रेता विशिष्ट में file_contexts इस प्रकार फ़ाइल:
    /vendor/lib(64)?/libnative.so u:object_r:same_process_hal_file:s0
    जहां libnative.so देशी पुस्तकालय का नाम है।
  2. पुस्तकालय, अपनी निर्भरता के माध्यम से सीधे या संक्रमणीय रूप से, वीएनडीके-एसपी और एलएलएनडीके पुस्तकालयों के अलावा अन्य सिस्टम पुस्तकालयों पर निर्भर नहीं होना चाहिए। पर VNDK-एसपी और LLNDK पुस्तकालयों की सूची खोजें, development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv

गैर-सार्वजनिक मूल पुस्तकालयों का उपयोग न करने के लिए ऐप्स अपडेट करना

यह सुविधा केवल SDK संस्करण 24 या बाद के संस्करण को लक्षित करने वाले अनुप्रयोगों के लिए सक्षम है; पिछली संगतता के लिए, देखना होगा कि आपके ऐप निजी देशी पुस्तकालयों से लिंक हो रहा क्या उम्मीद की जाए तालिका 1. । ऐप्स के लिए सुलभ एंड्रॉइड नेटिव लाइब्रेरी की सूची (जिसे पब्लिक नेटिव लाइब्रेरी के रूप में भी जाना जाता है) सीडीडी सेक्शन 3.1.1 में सूचीबद्ध है। 24 या बाद के संस्करण को लक्षित करने वाले और किसी भी गैर-सार्वजनिक पुस्तकालयों का उपयोग करने वाले ऐप्स को अपडेट किया जाना चाहिए। देखें मंच पुस्तकालय करने के लिए NDK ऐप्स लिंकिंग अधिक जानकारी के लिए।

अपने मूल पुस्तकालय निर्भरताओं के लिए ऐप्स अपडेट करना

अनुप्रयोग जो लक्ष्य SDK संस्करण 31 (एंड्रॉयड 12) या उच्च स्पष्ट रूप से का उपयोग करके अपनी मूल साझा लाइब्रेरी निर्भरता निर्दिष्ट करना होगा <uses-native-library> एप्लिकेशन मेनिफ़ेस्ट के टैग। यदि अनुरोधित लाइब्रेरी का कोई भाग डिवाइस पर मौजूद नहीं है, तो ऐप इंस्टॉल नहीं है। क्षुधा स्थापित कर रहे हैं, वे केवल देशी साझा पुस्तकालयों है कि वे का अनुरोध किया है के साथ प्रदान की कर रहे हैं। इसका अर्थ यह है कि ऐप्स ऐसी मूल साझा लाइब्रेरी तक नहीं पहुंच सकते जो ऐप मेनिफेस्ट में दिखाई नहीं देती हैं।