android विद्यालय - एक अन्य पुस्तकालय परियोजना पर पुस्तकालय परियोजना निर्भरता वाले चींटी के साथ एंड्रॉइड प्रोजेक्ट का निर्माण करना




लाइब्रेरी विज्ञान (5)

मैं शायद यह इतना आम सेटअप नहीं है:

(> निर्भरता =)
Android प्रोजेक्ट> एंड्रॉइड लाइब्रेरी प्रोजेक्ट 1> एंड्रॉइड लाइब्रेरी प्रोजेक्ट
इसलिए मेरे पास एक एंड्रॉइड लाइब्रेरी प्रोजेक्ट है जिसके पास किसी अन्य पुस्तकालय परियोजना की निर्भरता है।

जब मैं एक्लिप्स सबथिंग्स में प्रोजेक्ट का निर्माण कर रहा हूं तो ठीक काम करता है लेकिन मैं चींटी के साथ काम करने के लिए मेरा निर्माण नहीं कर सकता

पहली चींटी एंड्रॉइड लाइब्रेरी प्रोजेक्ट 2 संकलित करती है जो कक्षाओं को तैयार करती है। और इस फाइल को बिन फ़ोल्डर में रखती है।
फिर चींटी एंड्रॉइड लाइब्रेरी प्रोजेक्ट 1 को संकलित करने की कोशिश करता है लेकिन फिर मुझे त्रुटियाँ मिल रही हैं, क्योंकि यह एंड्रॉइड लाइब्रेरी प्रोजेक्ट 2 से कक्षाएं गायब है।

वैसे यह इतना अजीब नहीं है क्योंकि जार फ़ाइल लिब्स फ़ोल्डर में शामिल नहीं है। लेकिन project.properties में मैं पुस्तकालय परियोजना 2 के लिए निर्भरता बना दिया है तो क्यों चींटी कक्षाओं की प्रतिलिपि नहीं पुस्तकालय परियोजना 1 के libs फ़ोल्डरों के लिए है?

अच्छी तरह से मैं एक चींटी कार्य का उपयोग करने के लिए फ़ाइल को लीब फ़ोल्डर में कॉपी करने के लिए एक समाधान के बारे में सोच सकता हूं, लेकिन फिर मुझे build.xml को संशोधित करना होगा जो मुझे पसंद नहीं है।

** संपादित करें

समस्या यह है कि आर वर्ग गुम है, जब मैं कक्षाओं में देखता हूं। इस जावा फ़ाइल में आर क्लास नहीं होता है। इसलिए मेरा समाधान जांचने योग्य नहीं होगा


Answers

यह एक बहुत ही भंगुर सेटअप की तरह लगता है - आप इसके लिए अच्छे कारण हो सकते हैं, लेकिन क्या आप इसके बजाय पुस्तकालयों पर निर्भरता को एक दूसरे पर निर्भर कर सकते हैं?

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

एक पुस्तकालय का उपयोग करने के मुख्य कारणों में से एक यह है कि कोड को पुन: प्रयोज्य बनाने के लिए, यह दृष्टिकोण किसी को सुनिश्चित करता है (आप, एक सहयोगी, आपके उत्तराधिकारी ...) सिर्फ एक लाइब्रेरी में प्लग कर सकते हैं और दूसरे के अपने स्वयं के कार्यान्वयन को बना सकते हैं

जावा में पुल पैटर्न को लागू करने का एक और अच्छा लेख है: http://java.dzone.com/articles/design-patterns-bridge


चींटी ant.properties में निर्भरता को जोड़ने के लिए संकलन के लिए। उदाहरण के लिए:

android.library.reference.1=../path/to/library

यह व्यवहार बिल्ड टूल के R17 में बदलाव के कारण हुआ था: http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

संक्षेप में: पुस्तकालयों के लिए आर फ़ाइलों को अब उस पुस्तकालय के लिए classes.jar में पैक नहीं किया जाता है। हालांकि, पेरेंट-लाइब्रेरी (आपके उदाहरण में प्रोजेक्ट 1) के लिए pareent.R में भी 'बाल' लाइब्रेरी (प्रोजेक्ट 2 को आपके उदाहरण में) के लिए संसाधन-संदर्भ भी शामिल हैं, फिर भी आप बच्चे-आर को संदर्भित नहीं करना है ।

प्रोजेक्ट 1 के साथ प्रोजेक्ट 1 में सभी प्रोजेक्ट 2। आर-आयात स्टेटमेंट बदलें। आर आयात विवरण और आपको ठीक होना चाहिए।


अच्छी तरह से समस्या यह थी कि आर वर्ग गायब था।
इसलिए मैंने दो पुस्तकालय परियोजनाओं के बीच आर क्लास निर्भरता को हटा दिया।
मुझे नहीं पता कि यह ठीक है लेकिन मुझे लगता है कि यह किसी भी तरह से बुरा अभ्यास है।

इस निर्भरता के बिना चींटी ठीक बनाता है


पहले (डिफ़ॉल्ट)

implementation fileTree(include: ['*.jar'], dir: 'libs')

सरणी include में बस '*.aar' जोड़ें।

implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')

यह एंड्रॉइड स्टूडियो 3.x पर अच्छी तरह से काम करता है।





android ant