37

मैंने यहां समान प्रश्न पढ़े हैं, लेकिन अभी भी कुछ चीजों पर स्पष्ट नहीं हूं। लाइब्रेरी प्रोजेक्ट का उपयोग करना मतलब है कि मेरी समग्र परियोजना में दो प्रकट होंगे - एक लाइब्रेरी के लिए और दूसरा "मुख्य" ऐप प्रोजेक्ट के लिए - और मुझे यह स्पष्ट नहीं है कि इसमें क्या चल रहा है या यदि कुछ रिडंडेंसी है।एंड्रॉइड लाइब्रेरी मेनिफेस्ट बनाम ऐप मैनिफेस्ट

मैं "लाइट" और "भुगतान" संस्करणों के साथ एक ऐप विजेट विकसित कर रहा हूं, इसलिए लाइब्रेरी प्रोजेक्ट में लगभग सभी कोड होंगे। एक विजेट होने के नाते, पुस्तकालय में कम से कम एक रिसीवर, एक सेवा, एक विन्यास गतिविधि, साथ ही कुछ अन्य गतिविधियां होंगी। तो इन घटकों की पूरी घोषणा कहां होनी चाहिए - जिसमें इरादे, फ़िल्टर इत्यादि शामिल हैं - घोषित किया जाए? क्या वे लाइब्रेरी के लिए मैनिफेस्ट में जाते हैं, या एप्लिकेशन पैकेज के लिए मैनिफेस्ट में, लाइब्रेरी में कक्षाओं का संदर्भ देते हैं (उदा। एंड्रॉइड: name = "com.foo.mylibrary.MyService")?

कुछ उदाहरण मैंने देखा है कि उन्हें दोनों प्रकटताओं में घोषित करना प्रतीत होता है, लेकिन मुझे संदेह है कि इन्हें एक या दूसरे में रखना एक नो-ऑप है।

उत्तर

43

एक लाइब्रेरी प्रोजेक्ट उपयोग करने का अर्थ है कि मेरे समग्र परियोजना दो प्रकट होगा - पुस्तकालय के लिए एक और "मुख्य" अनुप्रयोग परियोजना के लिए अन्य - और मैं स्पष्ट नहीं कर रहा हूँ क्या वहाँ चला जाता है, जिसमें या यदि कुछ अनावश्यकता है।

लाइब्रेरी प्रोजेक्ट मेनिफेस्ट वर्तमान में उपयोग नहीं किया जाता है।

एंड्रॉइड के लिए ग्रैडल, और इसलिए एंड्रॉइड स्टूडियो, लाइब्रेरी प्रोजेक्ट्स और एएआरएस को एक मैनिफेस्ट प्रकाशित करने का समर्थन करता है। इसमें गतिविधि घोषणाओं, आवश्यक अनुमतियों या सुविधाओं, या न्यूनतम समर्थित एंड्रॉइड एसडीके स्तर जैसी चीजें शामिल हो सकती हैं।

लाइब्रेरी प्रकट होने के नियमों को ऐप के अपने मैनिफेस्ट के साथ विलय कर दिया गया है - खासकर जब आप खाते में निर्माण प्रकार और उत्पाद स्वाद लेते हैं - a bit complex है।

तो इन घटकों की पूरी घोषणा कहां से होनी चाहिए - इरादों, फ़िल्टर इत्यादि सहित - घोषित किया जाना चाहिए?

होस्ट प्रोजेक्ट में।

लाइब्रेरी उन घटकों को प्रकाशित कर सकती है, और एंड्रॉइड स्टूडियो होस्ट प्रोजेक्ट तब आवश्यक हो सकता है जब आवश्यक हो। (: नाम = "com.foo.mylibrary.MyService" जैसे एंड्रॉयड)

वे या आवेदन पैकेज खुद के लिए पुस्तकालय के लिए प्रकट में जाना, प्रकट में, पुस्तकालय में कक्षाओं को संदर्भित करते हैं?

उत्तरार्द्ध।

या तो (एंड्रॉइड और एंड्रॉइड स्टूडियो के लिए ग्रैडल के साथ)। सिद्धांत रूप में, लाइब्रेरी के घटकों को प्रकाशित करना आसान है, इसलिए ऐप लेखक को यह नहीं करना है। निजी तौर पर, मैं इसका एक बड़ा प्रशंसक नहीं हूं, क्योंकि बहुत से डेवलपर्स शिपिंग अनावश्यक मैनिफेस्ट प्रविष्टियों को बंद कर देंगे।

+0

धन्यवाद। यह सबसे अधिक समझ में आता है (नहीं कि समझदारी हमेशा लागू होती है!)। – gordonwd

+2

@ कॉमन्सवेयर - मुझे हमेशा आपके सीधा जवाब पसंद हैं। और इस मामले में यह मेरी मदद की! – Matt

+4

@ कॉमन्सवेयर एडीटी आर 20 पूर्वावलोकन 3 के रूप में अब यह प्रकट करना संभव है। तो सामान्य विन्यास अब लाइब्रेरी मेनिफेस्ट में रखा जा सकता है। http://stackoverflow.com/a/10400355/262789 – Benjamin

5

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

अद्यतन

CommonsWare जैसा कि ऊपर बताते है, एंड्रॉयड निर्माण उपकरण अब आपकी ओर से विभिन्न प्रकट मर्ज करने के लिए प्रयास करेंगे। वंशावली के लिए मूल उत्तर छोड़ना

+0

धन्यवाद। कुछ लेख पढ़ने के लिए, ऐसा लगता है जैसे प्रकट हो जाएगा या कुछ ऐसा होगा। इसे स्पष्ट करने के लिए अच्छा लगा। – gordonwd

+0

चूंकि यह उत्तर चार साल पुराना है, यह शायद यह इंगित करने के लिए अच्छा है कि अब यह गलत है। उपरोक्त Commonsware के अद्यतन उत्तर देखें। – JHH

+0

@ जेएचएच किया, धन्यवाद – JRaymond

9

एडीटी आर 20 पूर्वावलोकन 3 के रूप में अब प्रकट करना संभव है। तो सामान्य विन्यास अब लाइब्रेरी मेनिफेस्ट में रखा जा सकता है। अधिक जानकारी के लिए https://stackoverflow.com/a/10400355/262789 देखें।

इंटेलिज आईडीईए का संस्करण 13 मैनिफेस्ट विलय समर्थन (manifestmerger.enabled=true) के लिए आवश्यक है। एंड्रॉइड स्टूडियो समर्थन के लिए ग्रेड आधारित बिल्ड सिस्टम appears to be necessary भी।

संबंधित मुद्दे