एक ग्रहण Android परियोजना के लिए एक पुस्तकालय / JAR जोड़ना


130

यह ग्रहण में एक एंड्रॉइड प्रोजेक्ट के लिए तीसरे पक्ष के पुस्तकालय (JAR) को जोड़ने के बारे में दो-भाग का प्रश्न है।

प्रश्न का पहला भाग है, जब मैं अपने एंड्रॉइड प्रोजेक्ट में एक तृतीय-पक्ष JAR (पुस्तकालय) को जोड़ने का प्रयास करता हूं तो मुझे सबसे पहले समस्या आती है

XML पार्स करने में त्रुटि: अनबाउंड उपसर्ग

क्योंकि मैं उस JAR से एक वर्ग का उपयोग करने की कोशिश कर रहा हूं (और किसी तरह परिभाषित उपसर्ग की आवश्यकता है)। क्या चल रहा है?

दूसरा, (यह तय करने के बाद - कि नीचे जवाब दिया गया है), मेरा आवेदन एंड्रॉइड पर काम नहीं करता है और मुझे डिबगर (लॉगकैट) के माध्यम से पता चलता है कि मैं जिस वर्ग का उपभोग करने का प्रयास कर रहा हूं वह मौजूद नहीं है।

इसके कारण: java.lang.ClassNotFoundException: com.github.droidfu.widgets.WebImageView ...

क्यों, जब मुझे ग्रहण में कोई संकलन या लिंकर त्रुटि नहीं मिलती है, तो क्या यह एमुलेटर पर यह समस्या है?

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

जवाबों:


316

अब लापता वर्ग की समस्या के लिए।

मैं एक ग्रहण जावा ईई डेवलपर हूं और बिल्ड पथ में "उपयोगकर्ता लाइब्रेरी" तंत्र के माध्यम से तीसरे पक्ष के पुस्तकालयों को जोड़ने के कई वर्षों से आदत में रहा हूं। बेशक, तीसरे पक्ष के पुस्तकालय को जोड़ने के लिए कम से कम 3 तरीके हैं, जो मैं उपयोग करता हूं वह सबसे विनम्र है, मेरी विनम्र राय में।

हालांकि, यह एंड्रॉइड के लिए काम नहीं करेगा, जिसका Dalvik "JVM" एक साधारण जावा-संकलित वर्ग को संभाल नहीं सकता है, लेकिन इसे एक विशेष प्रारूप में परिवर्तित करना होगा। जब आप ऐसा करने के लिए अभ्यस्त हो जाते हैं तो आप पुस्तकालय जोड़ते हैं तो ऐसा नहीं होता।

इसके बजाय, तृतीय-पक्ष लाइब्रेरी को आयात करने के लिए (व्यापक रूप से उपलब्ध) निर्देशों का पालन करें, फिर इसे बिल्ड पाथ का उपयोग करके जोड़ दें (जो संकलन प्रयोजनों के लिए ग्रहण के लिए जाना जाता है)। यहाँ कदम दर कदम है:

  1. लाइब्रेरी को अपने होस्ट डेवलपमेंट सिस्टम में डाउनलोड करें।
  2. अपने ग्रहण / Android प्रोजेक्ट में एक नया फ़ोल्डर, लिबास बनाएं ।
  3. राइट-क्लिक करें libs और आयात का चयन -> जनरल -> फाइल सिस्टम है, तो इसके बाद, फाइल सिस्टम लाइब्रेरी की मूल निर्देशिका खोजने के लिए ब्राउज़ (यानी: जहां आप इसे करने के लिए डाउनलोड)।
  4. ठीक पर क्लिक करें, फिर बाएं फलक में निर्देशिका नाम (चेकबॉक्स नहीं) पर क्लिक करें, फिर दाएं फलक में प्रासंगिक JAR की जांच करें। यह पुस्तकालय को आपकी परियोजना में (शारीरिक रूप से) डालता है।
  5. , अपनी परियोजना पर राइट क्लिक करें पथ बिल्ड चुनें -> बिल्ड पथ कॉन्फ़िगर है, तो पुस्तकालय टैब, और फिर जार जोड़ें ..., में अपने नए जार करने के लिए नेविगेट libs निर्देशिका और जोड़ें। (यह, संयोग से, वह क्षण है जिस समय आपका नया JAR Android पर उपयोग के लिए परिवर्तित हो गया है।)

ध्यान दें

चरण 5 की आवश्यकता नहीं हो सकती है, यदि आपके निर्माण पथ में पहले से ही देयता शामिल है। बस यह सुनिश्चित करें कि इसे जोड़ने से पहले इसका अस्तित्व।

आपने यहां जो किया है वह दो चीजों को पूरा करता है:

  1. आपके Android प्रोजेक्ट में एक Dalvik-Convert JAR शामिल है।
  2. जावा की परिभाषाएँ उपलब्ध कराता है ताकि आपके प्रोजेक्ट के स्रोत कोड को विकसित करते समय (यानी, संकलन) तीसरे पक्ष की कक्षाओं को खोजने के लिए।

रस, आपको शायद एक और अलग सवाल शुरू करना चाहिए। यह "उत्तर" यहाँ बैठे हुए अजीब लगता है।
पॉल ग्रेगोइरे

3
इसलिए, मैं प्रश्न के कुछ हिस्सों को थोड़ा सा फिर से लिखता हूं। मैंने आसान काम करने के प्रलोभन का विरोध किया है (जो आप यहां सुझाते हैं) क्योंकि मुझे वास्तव में लगता है कि दोनों समस्याओं को एक तृतीय-पक्ष लाइब्रेरी को जोड़ने की कोशिश करने से उत्पन्न होती है और मैं wagering कर रहा हूं कि जिस किसी के पास भी दूसरी समस्या है वह संभवतः होगा पहला भी। धन्यवाद।
रशियन बेटमैन

मैं चाहता हूं कि औपचारिक एंड्रॉइड डॉक्स में इस बारे में कुछ और स्पष्ट हो गया है (अभी तक इस पर ठोकर नहीं खाई है) और अन्य मंचों में अन्य उत्तर तक चलते हैं, लेकिन समस्या को कभी भी नहीं देखा। ध्यान दें कि ब्लैकबेरी पर, यह वही समस्या एक विशाल दुःस्वप्न है जिसमें कोई भी इसे हल करने के बारे में विश्वसनीय जानकारी नहीं देता है - यह सुनिश्चित नहीं करता कि मैं वहां क्या करूंगा।
रशियन बेटमैन

2
Hi @RussBateman मैंने आपके द्वारा ऊपर बताए गए चरणों की कोशिश की और अपने एंड्रॉइड प्रोजेक्ट में लाइब्रेरी जार को सफलतापूर्वक शामिल करने में सक्षम था और इसलिए लाइब्रेरी क्लासेस मेरे प्रोजेक्ट के लिए संकलन समय पर सुलभ थे। लेकिन जब मैं प्रोजेक्ट चलाता हूं, तो मुझे एक त्रुटि मिलती है मेरे कंसोल में: "Dalvik प्रारूप में रूपांतरण त्रुटि 1 के साथ विफल हुआ" .. और मेरी परियोजना लॉन्च नहीं होगी!
ज़ेबा

कुछ निश्चित परिस्थितियों में यह काम नहीं करता है ... मुझे ठीक से याद नहीं है कि मैंने क्या किया, लिबर फ़ोल्डर को हटा दिया, इसे पढ़ लिया ... अब आपने जो कुछ भी कहा, वह सब जोड़ा, लिबास आयात करें, पथ बनाने के लिए जोड़ें। संकलक त्रुटियां दूर हो गई हैं, लेकिन अभी भी रनटाइम अपवाद मिलता है कि वर्ग नहीं मिला है :(
Ixx

20

सुनिश्चित करें कि आपकी 3 पार्टी के जार आपके प्रोजेक्ट्स "लिबास" फ़ोल्डर में हैं और जब आप अपना एप्लिकेशन पैकेज करेंगे तो उन्हें .apk में डाल दिया जाएगा। यदि आप जार में कुछ समर्थित नहीं हैं, तो आप डिवाइस पर रनटाइम त्रुटियों को देख सकते हैं, लेकिन इसके अलावा मुझे इसके साथ बड़ी सफलता मिली है।


1
अनुभव के बारे में इसके सभी, मैं पहले से ही एक ही मुद्दा है :)
पॉल ग्रीगोइरे

धन्यवाद सर, लेकिन यह देखने के लिए बेकार है कि libs फ़ोल्डर को बाहरी जार फ़ाइलों की प्रतिलिपि चाहिए जो हमारे पास पहले से ही Maven रिपॉजिटरी या कहीं और है।
asgs

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

वह परिवर्तन कब हुआ? यह एक बहुत बड़ा बदलाव है जिसका हम सभी उपयोग कर रहे हैं।
पॉल ग्रेगोइरे

5

एक पुस्तकालय परियोजना की स्थापना

एक लाइब्रेरी प्रोजेक्ट एक मानक एंड्रॉइड प्रोजेक्ट है, इसलिए आप उसी तरह से एक नया बना सकते हैं जैसे आप एक नया एप्लिकेशन प्रोजेक्ट करेंगे।

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

अगला, प्रोजेक्ट के गुणों को इंगित करने के लिए सेट करें कि यह एक लाइब्रेरी प्रोजेक्ट है:

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


4

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


2

सबसे पहले, लापता उपसर्ग की समस्या।

यदि आप अपने लेआउट फ़ाइल में कुछ का उपभोग करते हैं जो तीसरे पक्ष से आता है, तो आपको इसके उपसर्ग का उपभोग करने की आवश्यकता हो सकती है, कुछ "droidfu:" जैसा होता है, जो नीचे XML निर्माण में कई स्थानों पर होता है:

<com.github.droidfu.widgets.WebImageView android:id="@+id/webimage"
          android:layout_width="75dip"
          android:layout_height="75dip"
          android:background="#CCC"
          droidfu:autoLoad="true"
          droidfu:imageUrl="http://www.android.com/images/opensourceprojec.gif"
          droidfu:progressDrawable="..."
          />

यह JAR से निकलता है, लेकिन आपको नया "xmlns: droidfu" भी जोड़ना होगा

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:droidfu="http://github.com/droidfu/schema"
      ...>

या आपको अनबाउंड उपसर्ग त्रुटि मिलती है। मेरे लिए, यह तीसरे पक्ष के पुस्तकालय के पृष्ठों से सभी दिए गए उदाहरणों को कॉपी और पेस्ट करने में विफलता थी।


1

XML पार्स करने में त्रुटि: अनबाउंड उपसर्ग

संसाधन '/ playteddy / res' मौजूद नहीं है।

मुझे उपरोक्त दो त्रुटियां मिलीं और आखिरकार मैंने इसे हल कर लिया।

अपनी परियोजना पर क्लिक करें -> गुण -> जावा निर्माण पथ -> googleadmobadsdk (चयन करें और इसे शीर्ष पर रखें), फिर आप चलाते हैं और समस्या हल हो जाती है। यह मेरी रनटाइम त्रुटि हल हो गई है।


0

स्रोत को अपने कार्यक्षेत्र के बाहर एक फ़ोल्डर में रखें। प्रोजेक्ट-एक्सप्लोरर में राइट-क्लिक करें, और "आयात करें ..." चुनें

एंड्रॉइड प्रोजेक्ट के रूप में प्रोजेक्ट को अपने कार्यक्षेत्र में आयात करें। इसे बनाने की कोशिश करें, और सुनिश्चित करें कि यह एक पुस्तकालय परियोजना के रूप में चिह्नित है। यह भी सुनिश्चित करें कि यह Google API समर्थन के साथ निर्मित है, यदि नहीं तो आपको संकलन त्रुटियां मिलेंगी।

फिर, प्रोजेक्ट एक्सप्लोरर में अपने मुख्य प्रोजेक्ट पर राइट क्लिक करें। गुणों का चयन करें, फिर बाईं ओर Android का चयन करें। नीचे दिए गए पुस्तकालय अनुभाग में, "जोड़ें" पर क्लिक करें।

आपके प्रोजेक्ट में जोड़ने के लिए अब मैपव्यू-बैलून लाइब्रेरी उपलब्ध होनी चाहिए।


0

ग्रहण में पथ का निर्माण करने के लिए जाओ, फिर आदेश और निर्यात पर क्लिक करें, फिर पुस्तकालय / जार की जांच करें, और फिर इसे पहले संकलित करने के लिए इसे सूची के शीर्ष पर ले जाने के लिए ऊपर बटन पर क्लिक करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.