2017-08-22 30 views
6

मैं एनोटेशन और प्रोसेसर का उपयोग करके कक्षाएं उत्पन्न करने के लिए एक लाइब्रेरी विकसित कर रहा हूं। उत्पन्न कक्षाओं को Google से Gson लाइब्रेरी का उपयोग करना चाहिए।प्रोसेसर की जेनरेटेड कक्षाओं में एक लाइब्रेरी का उपयोग करें

मेरा प्रश्न है: मुझे जीसन निर्भरता कहां जोड़नी चाहिए? मैं वर्तमान में प्रोसेसर build.gradle में जोड़ रहा हूं लेकिन कक्षाएं उत्पन्न होने पर, जीसन नहीं मिला है और एंड्रॉइड स्टूडियो ऐप मॉड्यूल में जोड़ने का सुझाव दे रहा है।

build.gradle प्रोसेसर की:

implementation project(':lib-annotation') 
implementation 'com.squareup:javapoet:1.9.0' 
implementation 'com.google.code.gson:gson:2.8.1' 
implementation 'com.google.auto.service:auto-service:1.0-rc3' 

build.gradle एप्लिकेशन की:

implementation project(':lib-annotation') 
annotationProcessor project(':lib-processor') 

किसी भी मदद की बहुत सराहना की जाएगी, धन्यवाद!

पीएस परियोजना एक पुस्तकालय होने के लिए है। मैं उम्मीद करता हूं कि उपयोगकर्ता केवल अपनी लाइब्रेरी फ़ाइल में अपनी लाइब्रेरी फ़ाइल को शामिल करें, न कि "उप निर्भरता"।

उत्तर

0

ठीक है, मैं अंत में समस्या तय!

implementation 'com.google.code.gson:gson:2.8.1' 

और निर्भरता एनोटेशन में फिर से जोड़ने compile का उपयोग कर build.gradle:

मैं प्रोसेसर में Gson निर्भरता को जोड़ने के लिए implementationयाcompile का उपयोग कर build.gradle था

compile 'com.google.code.gson:gson:2.8.1' 

मुझे लगता है कि यह काम नहीं कर रहा था क्योंकि Gson निर्भरता प्रोसेसर build.gradle में annotationProcessor 'lib-processor' (किसी भी तरह "पारगमनशीलता" लागू नहीं हो रही थी) में शामिल है। इसलिए मैंने एनोटेशन build.gradle में निर्भरता रखी है क्योंकि इसमें इसे implementation 'lib-annotation' का उपयोग करके शामिल किया गया है और यह काम करता है।

आशा है कि यह

+1

या आप 'एपीआई' या 'कंपाइल' का उपयोग करके 'lib-annotation'' में gson जोड़ सकते हैं और फिर संकलन प्रोजेक्ट 'संकलन प्रोजेक्ट (': lib-annotation का उपयोग करें) ')' जो बनाता है - आपकी होंठ पूरी तरह से इस पुस्तकालयों पर संक्रमणीय है, और आपने इसे केवल एक बार जोड़ा है। – Ibrahim

3

सीधे शब्दों में कार्यान्वयन का उपयोग कर सकर्मक निर्भरता उपयोग करने से रोक।

मुख्य प्रोजेक्ट आपके पुस्तकालय में जोड़े गए निर्भरताओं का उपयोग या उपयोग नहीं कर सकता है।

docsकार्यान्वयन कॉन्फ़िगरेशन को संदर्भित किया जाना चाहिए जो घटक के लिए आंतरिक निर्भरताओं की घोषणा करने के लिए उपयोग किया जाना चाहिए।

तो तुम api या compileimplementation के बजाय का उपयोग करें या अपने सकर्मक पुस्तकालय, उदा में एक शर्त जोड़ें करने के लिए है: -

implementation ('com.google.code.gson:gson:2.8.1'){ 
    transitive = true; 
} 
+0

हाय इब्राहिम की मदद करेगा! मैंने आपके द्वारा सुझाए गए तीन विकल्पों का प्रयास किया, और उनमें से कोई भी काम नहीं किया ... जीसन अभी भी जेनरेट क्लास में नहीं पाया जा सकता है (जब तक कि मैं पाठ्यक्रम की मुख्य परियोजना में निर्भरता नहीं जोड़ता ...) –

+0

क्या आपको लगता है कि मैं ' मुझे 'जावापेट' त्रुटि मिल रही है क्योंकि मैं 'compile'or' api' के बजाय 'कार्यान्वयन' का उपयोग कर रहा हूं? –

+0

@OmarAflak नहीं, मुझे लगता है कि ऐसा हुआ क्योंकि आपने 'kapt' com.squareup नहीं जोड़ा था: javapoet: 1.6.1'', मुख्य मुद्दा यह है कि आपने 'api' या' compile' का उपयोग नहीं किया था। यदि आप सही करते हैं तो कम से कम इसे 'संकलन' के साथ काम करना चाहिए। – Ibrahim

0

इस लिंक का अनुसरण, मैं बिना किसी समस्या के आयात किया है। http://blog.madadipouya.com/2015/09/21/how-to-add-gson-library-to-android-studio-project/

+0

आप जार फ़ाइल भी डाउनलोड कर सकते हैं और इसे इस तरह आयात कर सकते हैं। https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.1 – Programmer

+0

यह एक साधारण प्रोजेक्ट में लाइब्रेरी को शामिल करने के बारे में नहीं है ... मैं बस अपनी gradle फ़ाइल 'compile' com में जोड़ सकता हूं। google.code.gson: gson: 2.8.1''। मैं प्रोसेसर के जेनरेट किए गए वर्गों में लाइब्रेरी को शामिल करने की कोशिश कर रहा हूं ... –

1

तथ्य कार्यान्वयन छुपाता इसके अलावा निर्भरता और इसलिए यह ऐप के पथ से बाहर रखने के (इसलिए यदि आप Gson का पर्दाफाश करने की जरूरत है, कार्यान्वयन के प्रयोग से बचें), समस्या पुस्तकालय मॉड्यूल को लागू करने जा रहा है संकलन/बजाय की वजह से है एक नियमित आरा/जार/apklib पैकेज का उपयोग कर। इसे आज़माएं:

- लाइब्रेरी प्रोजेक्ट में एंड्रॉइड मेवेन ग्रैडल प्लगइन जोड़ें और इसे कॉन्फ़िगर करें।

- प्लगइन का उपयोग करके, पुस्तकालय को संकलित करें और पुस्तकालय को अपने स्थानीय मैवेन भंडार में स्थापित करें। - ऐप में लाइब्रेरी जोड़ने के लिए संकलन/एपीआई/कार्यान्वयन का उपयोग करने के बाद, mavenLocal() को अपने build.gradle में शामिल करें, और फिर लाइब्रेरी को नियमित निर्भरता के रूप में जोड़ें। सभी आवश्यक निर्भरताएं वहां होनी चाहिए।

यहाँ, प्लगइन का एक उदाहरण है इस स्थिति में आप की जरूरत है: https://github.com/fcopardo/EnhancedMapView

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