नेटिव लाइब्रेरी के लिए नेमस्पेस

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

भवन निर्माण

Android 7.0 और उसके बाद के वर्शन में, सिस्टम लाइब्रेरी को ऐप्लिकेशन लाइब्रेरी से अलग कर दिया जाता है.

नेटिव लाइब्रेरी के लिए नेमस्पेस

पहला डायग्राम. नेटिव लाइब्रेरी के लिए नेमस्पेस.

नेटिव लाइब्रेरी के लिए नेमस्पेस, ऐप्लिकेशन को निजी-प्लैटफ़ॉर्म नेटिव का इस्तेमाल करने से रोकती है APIs (जैसा कि नोटिफ़िकेशन को वाकई में बंद करने के लिए किया गया था). यह ऐसी स्थितियों को भी निकालता है, जिनमें ऐप्लिकेशन गलती से प्लैटफ़ॉर्म लाइब्रेरी का इस्तेमाल नहीं किया, बल्कि libpng के साथ). ऐप्लिकेशन लाइब्रेरी के लिए, इंटरनल इस्तेमाल करने में परेशानी होती है गलती से (या इसके उलटा भी).

अन्य स्थानीय लाइब्रेरी जोड़ें

सार्वजनिक तौर पर उपलब्ध स्टैंडर्ड लाइब्रेरी के अलावा, सिलिकॉन वेंडर (Android 7.0 से शुरू होने वाले) और डिवाइस बनाने वाली कंपनियां (Android 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 फ़ाइल नाम, जिसमें लाइब्रेरी का नाम मौजूद है.

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

Android 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-SP और LLNDK लाइब्रेरी के अलावा, अन्य सिस्टम लाइब्रेरी पर निर्भर होते हैं. इसकी सूची ढूंढें VNDK-SP और LLNDK लाइब्रेरी, यहां development/vndk/tools/definition/tool/datasets/eligible-list-<version>-release.csv.

Android 15 और उसके बाद के वर्शन में, वेंडर की सार्वजनिक लाइब्रेरी को वेंडर APEX. वेंडर APEX में पैकेज किए जाने पर, लाइब्रेरी की सूची बनाएं APEX मेनिफ़ेस्ट की provideNativeLibs प्रॉपर्टी में.

ऐप्लिकेशन अपडेट करें, ताकि वे गैर-सार्वजनिक स्थानीय लाइब्रेरी का इस्तेमाल न करें

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

अपनी स्थानीय लाइब्रेरी डिपेंडेंसी के लिए ऐप्लिकेशन अपडेट करना

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