Android प्लैटफ़ॉर्म पर बड़ी संख्या में शेयर की गई Java लाइब्रेरी मौजूद हैं
जिसे वैकल्पिक रूप से ऐप्लिकेशन के क्लासपाथ में शामिल किया जा सकता है.
ऐप्लिकेशन मेनिफ़ेस्ट में <uses-library>
टैग जोड़ा है. ऐप्लिकेशन के लिंक
इसलिए इन लाइब्रेरी को बाकी Android एपीआई की तरह इस्तेमाल करें.
Google Analytics 4 प्रॉपर्टी के साथ काम करता है. हालांकि, ध्यान दें कि
कि ज़्यादातर लाइब्रेरी में ये सुविधाएं नहीं हैं.
java_sdk_library
मॉड्यूल टाइप, लाइब्रेरी को मैनेज करने में मदद करता है
अलग-अलग तरह के ईमेल दिखते हैं. डिवाइस बनाने वाली कंपनियां अपने लिए, इस तरीके का इस्तेमाल कर सकती हैं
साथ ही, एपीआई को पुराने सिस्टम के साथ काम करने के लिए बनाया गया है.
यदि डिवाइस निर्माता
बूट क्लास पाथ के बजाय <uses-library>
टैग,
java_sdk_library
पुष्टि कर सकता है कि ये Java लाइब्रेरी
एपीआई-स्टेबल.
java_sdk_library
, वैकल्पिक SDK API को लागू करता है, ताकि इनका इस्तेमाल किया जा सके
दिखाई देता है. आपकी java_sdk_library
तक लागू की गई लाइब्रेरी
बिल्ड फ़ाइल (Android.bp
) के लिए ये काम करें:
- स्टब लाइब्रेरी,
stubs
,stubs.system
औरstubs.test
. ये स्टब लाइब्रेरी,@hide
की पहचान करके बनाई जाती हैं,@SystemApi
और@TestApi
एनोटेशन. java_sdk_library
, एपीआई की खास बातों वाली फ़ाइलों को मैनेज करता है (जैसे,current.txt
). ये फ़ाइलें नए कोड के हिसाब से जांच की जाती है, ताकि यह पक्का किया जा सके कि वे कर सकते हैं. अगर ऐसा नहीं है, तो आपको गड़बड़ी का एक मैसेज मिलेगा में उन्हें अपडेट करने का तरीका बताया गया है. इसमें हुए सभी अपडेट बदलावों की मैन्युअल रूप से समीक्षा करें पक्का करें कि वे आपकी उम्मीदों के मुताबिक हों.
सभी एपीआई को अपडेट करने के लिए,m update-api
का इस्तेमाल करें. एपीआई अप-टू-डेट है या नहीं, इसकी पुष्टि करने के लिए,m checkapi
का इस्तेमाल करें.- एपीआई की खास बातों वाली फ़ाइलों की जांच हाल ही में की गई है
Android के पब्लिश किए गए वर्शन, ताकि यह पक्का किया जा सके कि एपीआई पुराने सिस्टम के साथ काम करता है
पुरानी रिलीज़ के साथ.
java_sdk_library
मॉड्यूल दिया गया है के भाग के रूप में अपने पूर्व में रिलीज़ किए गए वर्शन कोprebuilts/sdk/<latest number>
. - API विशिष्टता फ़ाइलों की जाँच के संबंध में, आप यह कर सकते हैं नीचे दी गई तीन चीज़ों में से एक:
- जांच जारी रखें. (कुछ न करें.)
java_sdk_library
में यह जोड़कर जांच बंद करें:
unsafe_ignore_missing_latest_api: true,
- नए
java_sdk_library
मॉड्यूल के लिए खाली एपीआई दें मेंmodule_name.txt
नाम वाली खाली टेक्स्ट फ़ाइलें बनाकरversion/scope/api
डायरेक्ट्री. - अगर रनटाइम के लिए लागू करने वाली लाइब्रेरी इंस्टॉल है, तो एक एक्सएमएल फ़ाइल जनरेट और इंस्टॉल हो जाता है.
java_sdk_library कैसे काम करता है
X
नाम का java_sdk_library
, ये चीज़ें बनाता है:
- लागू की जाने वाली लाइब्रेरी की दो कॉपी:
X
नाम की एक लाइब्रेरी औरX.impl
नाम का एक दूसरा डोमेन है. लाइब्रेरीX
इंस्टॉल हो गई है डिवाइस पर. लाइब्रेरीX.impl
सिर्फ़ तब उपलब्ध होगी, जब को लागू करने के लिए इस्तेमाल की जाने वाली लाइब्रेरी ज़रूरी है. उदाहरण के लिए, दूसरे मॉड्यूल में इस्तेमाल करने के लिए टेस्टिंग हो रही है. ध्यान दें कि साफ़ तौर पर जानकारी ऐक्सेस करने की ज़रूरत बहुत ही कम होती है. - ऐक्सेस को पसंद के मुताबिक बनाने के लिए, दायरों को चालू या बंद किया जा सकता है. (Java से मिलते-जुलते कीवर्ड-ऐक्सेस मॉडिफ़ायर, एक सार्वजनिक दायरा बड़ा करके ऐक्सेस उपलब्ध कराता है; एक जांच के दायरे में सिर्फ़ जांच में इस्तेमाल होने वाले एपीआई शामिल हैं.) हर चालू किए गए दायरे के लिए लाइब्रेरी से इन्हें बनाया जाता है:
- एक स्टब्स सोर्स मॉड्यूल (
droidstubs
मॉड्यूल टाइप का) - इस्तेमाल करता है लागू करने का सोर्स और स्टब सोर्स के एक सेट का आउटपुट देता है एपीआई की खास बातों वाली फ़ाइल में. - एक स्टब्स लाइब्रेरी (
java_library
मॉड्यूल टाइप का) - स्टब का कंपाइल किया गया वर्शन है. इसे कंपाइल करने के लिए इस्तेमाल की गई लिब्स बिलकुल वही है जोjava_sdk_library
को दिया गया है. इससे यह पक्का होता है कि एपीआई स्टब में, लागू करने की जानकारी लीक नहीं होती. - अगर आपको स्टब को कंपाइल करने के लिए अतिरिक्त लाइब्रेरी की ज़रूरत है, तो
stub_only_libs
औरstub_only_static_libs
प्रॉपर्टी इस्तेमाल करें.
अगर किसी java_sdk_library
को “X
” कहा जाता है और
“X
” के तौर पर कंपाइल किया जाता है, इसलिए हमेशा इसे इसी तरीके से देखें और
इसे. बिल्ड सही लाइब्रेरी को चुनेगा. यह पक्का करने के लिए कि आपके पास
सबसे कारगर लाइब्रेरी है, तो अपने स्टब की जांच करके देखें कि बिल्ड
गड़बड़ियां हैं. इन दिशा-निर्देशों का इस्तेमाल करके ज़रूरी बदलाव करें:
- कमांड लाइन देखकर और पुष्टि करें कि आपके पास एक सही लाइब्रेरी है इस बात की जांच करना कि कौनसे स्टब वहां लिस्ट किए गए हैं, ताकि आपके स्कोप के बारे में पता चल सके:
- दायरा बहुत बड़ा है: निर्भर लाइब्रेरी के लिए एपीआई के एक खास दायरे की ज़रूरत होती है. लेकिन आपको लाइब्रेरी में ऐसे एपीआई दिखते हैं जो उस दायरे से बाहर होते हैं, जैसे सिस्टम एपीआई, जो सार्वजनिक एपीआई के साथ शामिल हैं.
- दायरा बहुत कम है: निर्भर लाइब्रेरी के पास जिसमें लाइब्रेरी की ज़रूरत पूरी होती है. उदाहरण के लिए, निर्भर लाइब्रेरी को सिस्टम एपीआई को पाने के बजाय, सार्वजनिक एपीआई को ऐक्सेस करता है. आम तौर पर, इस वजह से कंपाइलेशन गड़बड़ी, क्योंकि ज़रूरी एपीआई मौजूद नहीं हैं.
- लाइब्रेरी की समस्या ठीक करने के लिए, इनमें से सिर्फ़ एक काम करें:
- अपनी ज़रूरत के हिसाब से वर्शन चुनने के लिए,
sdk_version
को बदलें. या - उस लाइब्रेरी के बारे में साफ़ तौर पर बताएं, जैसे कि
<X>.stubs
या<X>.stubs.system
.
java_sdk_library X इस्तेमाल करने का तरीका
लागू करने की लाइब्रेरी X
का इस्तेमाल तब किया जाता है, जब उसका रेफ़रंस दिया जाता है
apex.java_libs
. हालांकि, सूंग सीमा के कारण, जब लाइब्रेरी
X
का रेफ़रंस, किसी दूसरे java_sdk_library
मॉड्यूल से लिया गया है
उसी APEX लाइब्रेरी में, X.impl
साफ़ तौर पर
का उपयोग करना चाहिए, न कि लाइब्रेरी X
का.
जब java_sdk_library
का रेफ़रंस किसी अन्य जगह से दिया जाता है, तो एक स्टब
लाइब्रेरी का इस्तेमाल किया जाता है. स्टब्स लाइब्रेरी
मॉड्यूल की sdk_version
प्रॉपर्टी सेटिंग से बदल सकते हैं. उदाहरण के लिए, ऐसा मॉड्यूल जो
तय करता है कि sdk_version: "current"
सार्वजनिक स्टब का इस्तेमाल करता है, जबकि
जो मॉड्यूल बताता है कि sdk_version: "system_current"
सिस्टम स्टब. अगर एग्ज़ैक्ट मैच नहीं मिलता है, तो सबसे नज़दीकी स्टब लाइब्रेरी को
इस्तेमाल किया गया. सिर्फ़ सार्वजनिक एपीआई उपलब्ध कराने वाला java_sdk_library
सभी के लिए सार्वजनिक स्टब की सप्लाई करना.
उदाहरण और सोर्स
srcs
और api_packages
प्रॉपर्टी के लिए ज़रूरी है
वे java_sdk_library
में मौजूद रहेंगे.
java_sdk_library { name: "com.android.future.usb.accessory", srcs: ["src/**/*.java"], api_packages: ["com.android.future.usb"], }
एओएसपी, उस नए java_sdk_library
का सुझाव देता है (हालांकि, ऐसा करना ज़रूरी नहीं है)
इंस्टेंस की मदद से उन एपीआई के दायरे को साफ़ तौर पर चालू किया जा सकता है जिनका वे इस्तेमाल करना चाहते हैं. आप यह भी कर सकते हैं
(ज़रूरी नहीं) मौजूदा java_sdk_library
इंस्टेंस को इस पर माइग्रेट करें
उन एपीआई दायरों को साफ़ तौर पर चालू करें जिनका वे इस्तेमाल करेंगे:
java_sdk_library { name: "lib", public: { enabled: true, }, system: { enabled: true, }, … }
रनटाइम के लिए इस्तेमाल की जाने वाली impl
लाइब्रेरी को कॉन्फ़िगर करने के लिए, सभी का इस्तेमाल करें
सामान्य java_library
प्रॉपर्टी, जैसे कि hostdex
,
compile_dex
और errorprone
.
java_sdk_library { name: "android.test.base", srcs: ["src/**/*.java"], errorprone: { javacflags: ["-Xep:DepAnn:ERROR"], }, hostdex: true, api_packages: [ "android.test", "android.test.suitebuilder.annotation", "com.android.internal.util", "junit.framework", ], compile_dex: true, }
स्टब लाइब्रेरी कॉन्फ़िगर करने के लिए, इन प्रॉपर्टी का इस्तेमाल करें:
merge_annotations_dirs
औरmerge_inclusion_annotations_dirs
.api_srcs
: वैकल्पिक सोर्स फ़ाइलों की सूची, जिनका हिस्सा है का हिस्सा नहीं है, लेकिन रनटाइम लाइब्रेरी का हिस्सा नहीं है.stubs_only_libs
: उन Java लाइब्रेरी की सूची जो क्लासपाथ का इस्तेमाल करें.hidden_api_packages
: उन पैकेज के नामों की सूची जिन्हें को एपीआई से छिपाया गया है.droiddoc_options
: इसके लिए अतिरिक्त तर्क मेटलवा के साथ आता है.droiddoc_option_files
: यह उन फ़ाइलों की सूची बनाता है जिनका रेफ़रंस दिया जा सकता है$(location <label>)
का उपयोग करकेdroiddoc_options
के अंदर से, जहां<file>
सूची में एक एंट्री है.annotations_enabled
.
java_sdk_library
एक java_library
है, लेकिन यह
droidstubs
मॉड्यूल की वजह से, यह सभी droidstubs
के साथ काम नहीं करता है
प्रॉपर्टी. नीचे दिया गया उदाहरण
android.test.mock लाइब्रेरी बिल्ड
फ़ाइल से लिए जाते हैं.
java_sdk_library { name: "android.test.mock", srcs: [":android-test-mock-sources"], api_srcs: [ // Note: The following aren’t APIs of this library. Only APIs under the // android.test.mock package are taken. These do provide private APIs // to which android.test.mock APIs reference. These classes are present // in source code form to access necessary comments that disappear when // the classes are compiled into a Jar library. ":framework-core-sources-for-test-mock", ":framework_native_aidl", ], libs: [ "framework", "framework-annotations-lib", "app-compat-annotations", "Unsupportedappusage", ], api_packages: [ "android.test.mock", ], permitted_packages: [ "android.test.mock", ], compile_dex: true, default_to_stubs: true, }
पुराने सिस्टम के साथ काम करने की सुविधा को बनाए रखना
बिल्ड सिस्टम यह देखता है कि एपीआई पुराने सिस्टम का इस्तेमाल कर रहा है या नहीं
इसके साथ काम करने के लिए, नई एपीआई फ़ाइलों की तुलना जनरेट की गई
बिल्ड टाइम के दौरान एपीआई फ़ाइलें. java_sdk_library
यह काम करता है
prebuilt_apis
में दी गई जानकारी का इस्तेमाल करके कंपैटबिलिटी की जांच करें.
java_sdk_library
के साथ बनाई गई सभी लाइब्रेरी में एपीआई फ़ाइलें होनी चाहिए
prebuilt_apis
के api_dirs
के सबसे नए वर्शन में.
वर्शन को रिलीज़ करने पर, एपीआई में फ़ाइलें और स्टब की सूची होती है
लाइब्रेरी को डिस्टेंस बिल्ड के साथ PRODUCT=sdk_phone_armv7-sdk
की मदद से डाउनलोड किया जा सकता है.
api_dirs
प्रॉपर्टी, एपीआई वर्शन डायरेक्ट्री की सूची है
prebuilt_apis
में. एपीआई-वर्शन डायरेक्ट्री
Android.bp
डायरेक्ट्री के लेवल पर मौजूद होता है.
prebuilt_apis { name: "foo", api_dirs: [ "1", "2", .... "30", "current", ], }
version/scope/api/
की मदद से डायरेक्ट्री कॉन्फ़िगर करें
पहले से बनी हुई डायरेक्ट्री के तहत आता है. version
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है
एपीआई लेवल से मेल खाता है और scope
यह जानकारी होगी कि डायरेक्ट्री सार्वजनिक है, सिस्टम है या टेस्ट है.
version/scope
इसमें Java लाइब्रेरी मौजूद हैं.version/scope/api
में एपीआई मौजूद है.txt
फ़ाइलें. नाम वाली खाली टेक्स्ट फ़ाइलें बनाएंmodule_name.txt
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है औरmodule_name-removed.txt
यहां हैं.├── 30 │ ├── public │ │ ├── api │ │ │ ├── android.test.mock-removed.txt │ │ │ └── android.test.mock.txt │ │ └── android.test.mock.jar │ ├── system │ │ ├── api │ │ │ ├── android.test.mock-removed.txt │ │ │ └── android.test.mock.txt │ │ └── android.test.mock.jar │ └── test │ ├── api │ │ ├── android.test.mock-removed.txt │ │ └── android.test.mock.txt │ └── android.test.mock.jar └── Android.bp