एएआर लाइब्रेरी में नेटिव डिपेंडेंसी हो सकती हैं, जो Android Gradle प्लग इन कर सकती है इस्तेमाल करते हैं. एजीपी, एएआर बना सकता है जो कि आपकी स्थानीय लाइब्रेरी को अनुमति देते हैं उपभोक्ताओं को सुरक्षित रखना है.
नेटिव डिपेंडेंसी का इस्तेमाल करना
'Android Gradle प्लग इन 4.0' और इसके बाद के वर्शन में, C/C++ डिपेंडेंसी यहां से इंपोर्ट की जा सकती हैं
आपकी build.gradle फ़ाइल में लिंक किए गए एएआर. Gradle अपने-आप इन्हें
नेटिव बिल्ड सिस्टम में उपलब्ध है, लेकिन आपका बिल्ड सिस्टम कॉन्फ़िगर होना चाहिए
इंपोर्ट की गई लाइब्रेरी और हेडर का इस्तेमाल करने के लिए. C/C++ डिपेंडेंसी
इसे एएआर के तौर पर डिस्ट्रिब्यूट किया जाता है, तो जेनरिक एएआर के बारे में नीचे दिए गए लिंक मददगार साबित हो सकते हैं:
- सामान्य एएआर दस्तावेज़ों के लिए Android लाइब्रेरी बनाना और उसे अपने प्रोजेक्ट में कैसे इंटिग्रेट करें, खास तौर पर तब, जब आपको AAR को लोकल C/C++ डिपेंडेंसी के तौर पर इस्तेमाल करना.
- अपनी
build.gradleफ़ाइल में डिपेंडेंसी जोड़ने के बारे में जानकारी पाने के लिए, बिल्ड डिपेंडेंसी जोड़ें खास तौर पर, रिमोट डिपेंडेंसी के लिए.
यह दस्तावेज़ आपके नेटिव बिल्ड सिस्टम को कॉन्फ़िगर करने के तरीके पर फ़ोकस करता है. साथ ही, यह मान लेता है कि आपने आपके प्रोजेक्ट के Gradle बिल्ड एनवायरमेंट में C/C++ डिपेंडेंसी AAR जोड़ा गया.
एएआर में नेटिव डिपेंडेंसी
आपके Gradle मॉड्यूल की AAR डिपेंडेंसी, नेटिव लाइब्रेरी को अनुमति दे सकती हैं, ताकि
आपका ऐप्लिकेशन. एएआर के अंदर, prefab डायरेक्ट्री में प्रीफ़ैब होता है
पैकेज जिसमें नेटिव डिपेंडेंसी के हेडर और लाइब्रेरी शामिल हैं.
हर डिपेंडेंसी से ज़्यादा से ज़्यादा एक Prefab पैकेज खुल सकता है, जिसमें एक या ज़्यादा मॉड्यूल. Prefab मॉड्यूल एक सिंगल लाइब्रेरी है, जो कि शेयर की गई, स्टैटिक या सिर्फ़ हेडर वाली लाइब्रेरी.
लाइब्रेरी का इस्तेमाल करने के लिए, पैकेज और मॉड्यूल के नाम पता होने चाहिए. इन्होंने बदलाव किया है कंवेंशन: पैकेज का नाम, Maven आर्टफ़ैक्ट के नाम और मॉड्यूल से मैच करेगा नाम C/C++ लाइब्रेरी के नाम से मेल खाएगा, लेकिन यह ज़रूरी नहीं है. सहायता टीम से संपर्क करें डिपेंडेंसी के दस्तावेज़ की मदद से तय करें कि यह किन नामों का इस्तेमाल करती है.
बिल्ड सिस्टम कॉन्फ़िगरेशन
यह ज़रूरी है कि आपके 'Android Gradle मॉड्यूल' के लिए prefab सुविधा चालू हो.
ऐसा करने के लिए, अपने मॉड्यूल के android ब्लॉक में नीचे दी गई चीज़ें जोड़ें
build.gradle फ़ाइल:
Kotlin
buildFeatures { prefab = true }
ग्रूवी
buildFeatures { prefab true }
वैकल्पिक रूप से, कोई वर्शन कॉन्फ़िगर करें
आपके प्रोजेक्ट की gradle.properties फ़ाइल में:
android.prefabVersion=2.0.0
आम तौर पर, एजीपी का चुना गया डिफ़ॉल्ट वर्शन आपकी ज़रूरतों के हिसाब से सही होगा. आपको सिर्फ़ कोई गड़बड़ी होने पर, किसी दूसरे वर्शन को चुनने की ज़रूरत होती है या सुविधा को चालू करें.
हर डिपेंडेंसी आपके बिल्ड में एक Android.mk फ़ाइल दिखाती है. ये हैं
इंपोर्ट-मॉड्यूल कमांड की मदद से इंपोर्ट किया गया हो. यह निर्देश Android.mk की खोज करता है
बिल्ड की इंपोर्ट डायरेक्ट्री में दिए गए पाथ वाली फ़ाइलें (जैसा कि कॉन्फ़िगर किया गया है)
import-add-path से) और ऐसे मॉड्यूल दिखाता है जो इसके इस्तेमाल के लिए तय किए गए हैं
बिल्ड. उदाहरण के लिए, अगर आपका ऐप्लिकेशन libapp.so के बारे में बताता है और वह cURL का इस्तेमाल करता है,
आपकी Android.mk फ़ाइल में नीचे दी गई जानकारी होनी चाहिए:
include $(CLEAR_VARS)
LOCAL_MODULE := libapp
LOCAL_SRC_FILES := app.cpp
LOCAL_SHARED_LIBRARIES := curl
include $(BUILD_SHARED_LIBRARY)
# If you don't need your project to build with NDKs older than r21, you can omit
# this block.
ifneq ($(call ndk-major-at-least,21),true)
$(call import-add-path,$(NDK_GRADLE_INJECTED_IMPORT_PATH))
endif
$(call import-module,prefab/curl)
ध्यान दें कि साफ़ तौर पर import-add-path की ज़रूरत तब ही होती है, जब एनडीके का इस्तेमाल पहले किया जा रहा हो
से लेकर r21 तक. r21 से NDK_GRADLE_INJECTED_IMPORT_PATH अपने-आप ऐसा हो जाएगा
इंपोर्ट पाथ में जोड़ा गया.
app.cpp अब #include "curl/curl.h" का इस्तेमाल कर सकते/सकती हैं, libapp.so को
बिल्डिंग के समय libcurl.so से अपने-आप लिंक हो जाता है, और libcurl.so
उसे ऐप्लिकेशन के साथ शामिल किया जाना चाहिए.
एएआर में नेटिव लाइब्रेरी पब्लिश करना
नेटिव एएआर बनाने की सुविधा सबसे पहले AGP के 4.1 वर्शन में जोड़ी गई थी.
अपनी स्थानीय लाइब्रेरी एक्सपोर्ट करने के लिए, इसके android ब्लॉक में ये जोड़ें
आपके लाइब्रेरी प्रोजेक्ट की build.gradle.kts फ़ाइल में:
Kotlin
buildFeatures { prefabPublishing = true } prefab { create("mylibrary") { headers = "src/main/cpp/mylibrary/include" } create("myotherlibrary") { headers = "src/main/cpp/myotherlibrary/include" } }
ग्रूवी
buildFeatures { prefabPublishing true } prefab { mylibrary { headers "src/main/cpp/mylibrary/include" } myotherlibrary { headers "src/main/cpp/myotherlibrary/include" } }
इस उदाहरण में, mylibrary और myotherlibrary लाइब्रेरी
ndk-build या CMake बाहरी नेटिव बिल्ड को एएआर में पैकेज किया जाएगा
आपका बिल्ड तैयार करता है और प्रत्येक, हेडर को निर्दिष्ट की गई निर्देशिका से
उनके आश्रितों के लिए है.