दिलचस्प पोस्ट
मैं जावास्क्रिप्ट पाश में देरी कैसे जोड़ूं? कैसे एक JAR फ़ाइल बनाने के लिए जिसमें DLL फ़ाइलें शामिल हैं? पायथन में निजी सदस्य एंड्रॉइड: अधिकतम अनुमति चौड़ाई और बिटमैप की ऊंचाई एक स्ट्रिंग में वर्णों की एक सूची में कनवर्ट करें एक एसक्यूएल डेटाबेस से साधारण रैंडम नमूने स्प्लिट डेटाफ्रेम एकाधिक आउटपुट फाइलों में ले जाने के माध्यम से मूल्य का प्रचार करना UserControl में कुंजी बाइंडिंग तब काम नहीं करता जब पाठ बॉक्स का फ़ोकस होता है Nginx अनुरोध के लिए अनुमत यूआरएल लंबाई कैसे सेट करें (त्रुटि कोड: 414, यूरी बहुत बड़ी है) mod_rewrite: यूआरएल से क्वेरी स्ट्रिंग को हटा दें? ग्रहण: मुझे एंड्रॉइड एसडीके का इस्तेमाल करने नहीं देंगे, गलत तरीके से मेरे एडीटी का दावा है फोर्ट्रान में मॉड्यूल, सबरॉरीनेस और फ़ंक्शन का सही उपयोग क्लस्टर एक आयामी डेटा बेहतर ढंग से? आर में दशमलव स्थानों का प्रारूपण करना

एकाधिक परियोजनाओं में एक एकल पुस्तकालय स्रोत को साझा कैसे करें

शीर्षक के रूप में प्रश्न इसी तरह का एक प्रश्न यहां पूछा गया था, और यह एकमात्र समाधान था जिसने इस परियोजना को स्थानीय मेवन भंडार में प्रकाशित किया था।

क्या एंड्रॉइड स्टूडियो 0.5 में यह समस्या तय है (जैसा कुछ दावा करती है) .0। इसके रिलीज नोट में एक बयान है जो "मॉड्यूल सामग्री रूट के बाहर स्रोत फ़ोल्डर्स के लिए समर्थन" कहता है। क्या इसका मतलब है कि हम आखिरकार परियोजना फ़ोल्डर के बाहर से पुस्तकालय आयात कर सकते हैं?

मैंने फाइल-> आयात परियोजना की कोशिश की .. लेकिन यह काम नहीं करता है

2 संपादित करें: नवीनतम समाधान के लिए स्वीकृत उत्तर देखें (0.8 के रूप में। +)

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

मेरी प्रोजेक्ट डायरेक्टरी संरचना में केवल एक मॉड्यूल main जो इस तरह दिखता है

 MyApp main build.gradle src build.gradle settings.gradle 

लाइब्रेरी प्रोजेक्ट डायरेक्टरी में केवल एक मॉड्यूल है, जैसे कि lib (वे एक नया लाइब्रेरी प्रोजेक्ट बनाते समय स्वचालित रूप से उत्पन्न होते हैं)

 MyLibrary lib build.gradle src build.gradle settings.gradle 

निम्नलिखित पंक्ति को MyApp/settings.gradle में जोड़ा गया है:

 include ':main', '..:MyLibrary' 

निम्नलिखित MyApp/main/build.gradle में जोड़ा गया है:

 dependencies { compile project(':..:MyLibrary') } 

परिणाम निम्न त्रुटि है:

 FAILURE: Build failed with an exception. * What went wrong: A problem occurred configuring project ':main'. > Configuration with name 'default' not found. 

एक साइड नोट के रूप में, लाइब्रेरी प्रोजेक्ट MyLibrary ही त्रुटि के बिना संकलित कर सकता है। समस्या settings.gradle हो रही है। ग्रैडल लायब्रेरी परियोजना संरचना को पहचानने में सक्षम नहीं है।

Solutions Collecting From Web of "एकाधिक परियोजनाओं में एक एकल पुस्तकालय स्रोत को साझा कैसे करें"

(संस्करण 2.1+ के रूप में):

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

1) फाइल-> नई परियोजना अपनी लाइब्रेरी प्रोजेक्ट को एक नाम दें (यहां मैं लाइब्रेरी प्रोजेक्ट का उपयोग करता LibraryProject )। एक सामान्य प्रोजेक्ट बनाने के लिए शेष चरणों को जारी रखें (चूंकि यह एक पुस्तकालय के रूप में है, मैंने चुना "कोई गतिविधि नहीं जोड़ें")

2) डिफ़ॉल्ट रूप से, एंड्रॉइड स्टूडियो प्रोजेक्ट फ़ोल्डर के अंदर "एप" नामक मॉड्यूल बनाता है। वास्तविक ऐप्लिकेशन मॉड्यूल के साथ नाम टकराव को रोकने के लिए, मॉड्यूल को कुछ और नाम दें (बाएं पैनल-> ​​रिफैक्टर-> नाम बदलें) पर राइट क्लिक करें "एप" मॉड्यूल।

3) build.gradle अपने पुस्तकालय मॉड्यूल फ़ोल्डर के अंदर , शीर्ष पंक्ति को बदल दें

 apply plugin: 'com.android.application' 

सेवा मेरे

 apply plugin: 'com.android.library' 

और फिर "defaultConfig" के अंतर्गत "applicationId" पंक्ति निकालें इसके अलावा, क्योंकि यह एक लाइब्रेरी है, xlmns:... हटा दें xlmns:... नामस्थान और <application ..> मैनिफेस्ट.एक्सएम से शरीर भी। पुस्तकालय भाग के लिए यह सब है अब, अपना मुख्य अनुप्रयोग बनाने / संशोधित करने के लिए:

4) यदि यह एक नई परियोजना है, तो पहले नया प्रोजेक्ट-> नया प्रोजेक्ट-> ApplicationName बनाएँ

5) ओपन settings.gradle (प्रत्येक प्रोजेक्ट में एक ऐसी फाइल होनी चाहिए) और निम्न पंक्ति को शामिल करें (लाइब्रेरी मॉड्यूल में लापता प्रमुख सेमी-कोलन ध्यान दें):

 include ':app', '..:LibraryProject:yourLibraryModule' 

6) फिर फाइल -> परियोजना संरचना पर जाएं।

7) टैब के अंतर्गत "निर्भरता" हरा "+" बटन पर क्लिक करें। "मॉड्यूल निर्भरता" चुनें अपना लाइब्रेरी मॉड्यूल चुनें, फिर ठीक पर क्लिक करें।

अब आप अपने आवेदन में पुस्तकालय कक्षाओं का उपयोग करने में सक्षम होना चाहिए


वैकल्पिक पद्धति , यदि किसी कारण से, उपर्युक्त विधि के साथ समस्याएं हैं, तो आप निम्नलिखित ( यहां सुझाए गए) कोशिश कर सकते हैं:

1) दोहराएं चरण 1 से 4 ऊपर डिफ़ॉल्ट रूप से मुख्य और बाहरी (लाइब्रेरी) प्रोजेक्ट कुछ ऐसा दिखता है:

  /MainProject + build.gradle + settings.gradle + app/ + build.gradle + src/ /LibraryProject + build.gradle + settings.gradle + app/ + build.gradle + src/ 

2) हमेशा की तरह, मॉड्यूल नाम (एंड्रॉइड स्टूडियो में राइट-क्लिक मॉड्यूल-> रिफ़ाक्टर-> नाम बदलें) को कम करने में कुछ भ्रमित हो, जैसे कि

  /MainProject + build.gradle + settings.gradle + MainModule/ + build.gradle + src/ /LibraryProject + build.gradle + settings.gradle + LibraryModule/ + build.gradle + src/ 

3) MainProject में settings.gradle को MainProject :

 include ':LibraryModule', ':app' project(':LibraryModule').projectDir = new File(settingsDir, '../LibraryProject/LibraryModule') 

परियोजना को सिंक्रनाइज़ करें और आप कर चुके हैं


Proguard पर ध्यान दें

वर्तमान में आपको बाह्य पुस्तकालय परियोजनाओं / मॉड्यूल पर प्रोगुर्ड का उपयोग नहीं करना चाहिए। इसके बजाय, आप निम्न को प्रतिस्थापित करते हैं (मूल उत्तर यहां )

 buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' } debug { minifyEnabled false } } 

निम्न के साथ (पुस्तकालय के build.gradle में):

 buildTypes { release { consumerProguardFiles 'proguard-project.txt' } } 

जहां proguard-project.txt फ़ाइल है जिसमें आपकी लाइब्रेरी प्रोजेक्ट के लिए प्रोगुर्ड नियम शामिल हैं I

हां, यह अब 0.5.0 में काम करता है। इसके लिए एक अनुकूल यूआई (आयात परियोजना नहीं है जो आप चाहते हैं, जैसा कि एक पूरी तरह से नई परियोजना बनाता है; आयात मॉड्यूल अभी भी टूट गया है; https://code.google.com/p/android/issues/ देखें detail? id = 62122 ), लेकिन आप इसे बनाने के लिए अपनी बिल्ड फाइल सेट कर सकते हैं।

मान लें कि आपके पास निर्देशिका संरचना है जो इस तरह दिखती है:

 MyApp appmodule build.gradle src main java build.gradle settings.gradle MyPlainJavaLibrary build.gradle src java 

ध्यान दें कि MyPlainJavaLibrary फ़ाइल सिस्टम में MyApp निर्देशिका के नीचे नहीं है

अपनी सेटिंग्स.gradle फ़ाइल को इस तरह सेट करें:

 include ':appmodule', '..:MyPlainJavaLibrary' 

और इसे बनाने के लिए एक निर्भरता शामिल करें। इस तरह के विकास (प्रमुख कोलन को मत भूलें):

 dependencies { ... compile project(':..:MyPlainJavaLibrary') } 

यह मेरे लिए काम करता है मेरे प्रोजेक्ट व्यूअर में, अब मैं दृश्य में दो रूट-स्तरीय मॉड्यूल निर्देशिकाओं के रूप में MyApp और MyPlainJavaLibrary को देखता हूं, और मैं जावा import स्टेटस को मॉड्यूल सीमाओं में काम कर सकता हूं और इस तरह

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

आप केवल एक settings.gradle फ़ाइल प्रति प्रोजेक्ट हो सकते हैं, इसलिए यह पूरी तरह से अन्य मल्टीमीड्रल ग्रैडल प्रोजेक्ट नहीं ले जा रहा है और सभी मॉड्यूलों को एक में झुका हुआ गिरता है; आपको व्यक्तिगत रूप से उन्हें लाने की आवश्यकता होगी हालांकि, कई परियोजनाओं में एक मॉड्यूल का उपयोग करने के उपयोग के मामले को पूरा करना चाहिए।

मैं अपने Android Wear प्रोजेक्ट के लिए कुछ ऐसा करना चाहता था, जहां आपके पास mobile और मॉड्यूल wear एंड्रॉइड स्टूडियो 1.5.1 में, आप फाइल-> न्यू-> मॉड्यूल कर सकते हैं और अपने मॉड्यूल के रूप में एंड्रॉइड लाइब्रेरी चुन सकते हैं। यह ऊपर वर्णित कई सेटिंग्स का ख्याल रखेगा और अपनी लाइब्रेरी को अपने मौजूदा एंड्रॉइड वेयर प्रोजेक्ट के अंदर रखेगा।

एंड्रॉइड स्टूडियो का पूरा उपयोग करने के लिए, मैं शुरू में एक सामान्य एंड्रॉयड प्रोजेक्ट तैयार करने की सिफारिश करूँगा। फिर, उस प्रोजेक्ट के भीतर, एक मॉड्यूल " android library " प्रकार, और (वैकल्पिक रूप से) " java library " (यदि आपके पास वह कोड है जिसे आप एंड्रॉइड एप्लिकेशन और सर्वर साइड कोड के लिए सामान्य बना सकते हैं का उपयोग करना चाहते हैं) जोड़ें।

इस तंत्र का उपयोग करके, आपको हेडल और मेडेस्टाइल फाइलों को हेरफेर करने और संशोधित करने की आवश्यकता नहीं है।