2011-02-09 17 views
13

जब मैं Proguard के साथ मेरी apk निर्यात करने की कोशिश मैं त्रुटियों (400 से अधिक) के लिए इसी तरह का एक बहुत कुछ मिलता है:जार फाइलों के साथ प्रोगार्ड मुद्दों, लापता जार कैसे ढूंढें?

Warning: org.codehaus.jackson.jaxrs.JsonMappingExceptionMapper: can't find superclass or interface javax.ws.rs.ext.ExceptionMapper 

और

org.codehaus.jackson.xc.DataHandlerJsonDeserializer$1: can't find superclass or interface javax.activation.DataSource 

मैं Jackson Json library उपयोग कर रहा हूँ, और त्रुटियों से संबंधित प्रतीत उस से।

अगर कोई वर्ग या इंटरफेस के अनसुलझे संदर्भ हैं, आप सबसे अधिक संभावना एक आवश्यक पुस्तकालय निर्दिष्ट करना भूल:

इस त्रुटि शोध मैं Proguards FAQ से निम्नलिखित पाया। उचित प्रसंस्करण के लिए, आपके कोड द्वारा संदर्भित सभी पुस्तकालयों को जावा रन-टाइम लाइब्रेरी समेत निर्दिष्ट किया जाना चाहिए। पुस्तकालयों को निर्दिष्ट करने के लिए,-पुस्तकालय विकल्प का उपयोग करें।

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

हालांकि, मैं यह नहीं समझ सकता कि यह निर्धारित करने के लिए कि जार की क्या आवश्यकता है और वे कहां हैं। चेतावनी ऐसे javax.ws.rs.ext, org.joda.time, org.codehaus.stax2, javax.xml.stream, आदि

  1. मैं किस तरह तय करते के रूप में विभिन्न संकुल के एक बहुत उल्लेख क्या जार उन पैकेजों को शामिल करें? उदाहरण के लिए, javax.ws.rs.ext के लिए जार की आवश्यकता है। ** कक्षाएं?
  2. मैं कैसे पता लगा सकता हूं कि उन जार कहाँ हैं और प्रोग्रार्ड में लाइब्रेजर्स के साथ किस मार्ग का उपयोग किया जाएगा?

धन्यवाद बहुत


संपादित करें: मैं भी है कि मैं एक Android Library Project सेटअप का उपयोग कर रहा उल्लेख करना चाहिए। जार मुख्य लाइब्रेरी प्रोजेक्ट में हैं, और वास्तविक कार्य प्रोजेक्ट में लाइब्रेरी प्रोजेक्ट में जार समेत उनके निर्माण पथ हैं। पता नहीं है कि इससे कोई फर्क पड़ता है लेकिन सोचा कि मुझे इसका जिक्र करना चाहिए।


अद्यतन बस का परीक्षण करने, मैं पूरी तरह से जैक्सन अब तक का निर्माण पथ से और मेरे कोड से हटा दिया है और अब Proguard सफलतापूर्वक पूरा करती है। प्रश्न अभी भी बने रहे हैं ... इन त्रुटियों को संभालने के लिए सही दृष्टिकोण क्या है?

ग्रहण में एंड्रॉयड निर्यात विज़ार्ड स्वचालित रूप से ProGuard को/lib/जार जोड़ सकते हैं या वे सब इस तरह ProGuard कॉन्फ़िग फ़ाइल में मैन्युअल रूप से जोड़े जाने के लिए है है:

-libraryjars C:/Project/lib/somjar.jar 

मैं कोशिश की थी के लिए कि जैक्सन एक लेकिन इससे कोई फर्क नहीं पड़ता। क्या इसका मतलब है कि मुझे चेतावनियों में उल्लिखित कक्षाओं के लिए जरूरी सभी जार भी ढूंढना होगा और उनको जोड़ना होगा? क्या वे एसडीके में या जावा इंस्टॉलेशन में होंगे?

क्षमा करें अगर ये बेवकूफ सवाल हैं, लेकिन मैं पिछले कुछ घंटों के लिए इसे समझने की कोशिश कर रहा हूं और मुझे नहीं पता कि क्या करना है।

धन्यवाद फिर से


अद्यतन फिर

तो अधिक खोज, बेंजामिन के सुझाव के साथ संयुक्त, मैंने पाया लापता वर्ग के कुछ rt.jar में थे, जो JDK के lib फ़ोल्डर में है । इसलिए मैं proguard.cfg फ़ाइल के लिए

-libraryjars <java.home>/lib/rt.jar 

जोड़ने समाप्त हो गया और 204 के लिए नीचे 485 से चेतावनी लाया अरे मुझे लगता है कि कुछ है ... शेष चेतावनी वर्गों है कि मैं बिल्कुल भी नहीं मिल सकता है का वर्णन। ऐप प्रोजेगार्ड चलाने के बिना ठीक काम करता है, इसलिए ये कक्षाएं कहीं सही होनी चाहिए? या ये चेतावनियां हैं कि मुझे -dontwarn का उपयोग करना चाहिए?

शेष कक्षाओं इन पैकेजों में हैं:

org.joda.time. 
org.codehaus.stax2. 
javax.ws.rs. 

तो अब मैं सिर्फ यह पता लगाने की कोई तरीका होना चाहिए:

  1. क्या जार इन कक्षाओं है
  2. जहां इन जार तो मैं कर रहे हैं उन्हें प्रोजेवार्ड कॉन्फ़िगरेशन फ़ाइल
+0

जैक्सन का पहला पृष्ठ जो आप विशेष रूप से लिंक करते हैं, बताता है कि जैक्सन ** शून्य ** बाहरी निर्भरता है। क्या आपको यकीन है कि समस्या जैक्सन जेएसओएन के साथ है? – SyntaxT3rr0r

+0

@ सिंटैक्स, मैंने यही सोचा, लेकिन सभी 485 चेतावनियां हैं * org.codehaus.jackson.something: संदर्भित कक्षा कुछ नहीं मिल सकती है। कृपया * अन्य पुस्तकालयों में से कोई भी मैं चेतावनी देता हूं। हालांकि आपके प्रश्न के उत्तर में, मुझे यकीन नहीं है कि समस्या जैक्सन के साथ है। मेरे पास इस बिंदु पर कोई अन्य लीड नहीं है। – cottonBallPaws

उत्तर

5

मैं Proguard और इसी तरह की त्रुटियों मैं एक उपयोग कर रहा था के साथ इसी तरह की समस्याओं पड़ा है, उनके नाम मिल सकती है osmdroid.jar जो ठीक से unobfuscated बनाया गया। इस जार में बाहरी निर्भरताएं होनी चाहिए जिनके लिए मेरे आवेदन की आवश्यकता नहीं थी। सौभाग्य से लेखकों ने आवश्यक जार सूचीबद्ध किए और एक बार मैंने उन्हें डाउनलोड किया और प्रोग्रार्ड को-लाइब्रेजर विकल्प के माध्यम से बताया, प्रोगुआर्ड बिल्ड ठीक था।

पुन अपने लापता जार (! जो आप शायद वास्तव में नहीं है की जरूरत है, लेकिन Proguard आप को लगता है कि), तो आप उन्हें खोजने चाहिए

पर:

org.joda.time (जार के ज़िप अंदर)

org.codehaus.stax2.

javax.ws.rs.

+0

यह काम किया, धन्यवाद! मैंने उन्हें अपनी प्रोजेक्ट के बाहर एक निर्देशिका में डाउनलोड किया, और proguard.cfg फ़ाइल में * - लाइब्रेरीज़ सी: /FullPathTo/JarLocations/jar.jar* जैसे पूर्ण पथ को जोड़ा और अंत में यह पूरा करने में सक्षम था। अगर इस मुद्दे के बारे में किसी और के पास कुछ और है तो मैं शेष दिन के लिए यह अनुत्तरित छोड़ने जा रहा हूं। एक बार फिर धन्यवाद। – cottonBallPaws

3

में शामिल कर सकते हैं मैं केवल टी के लिए उत्तर प्रदान कर सकता हूं वह पहले भाग:

http://www.findjar.com

आज़मा कर देखें, वहाँ आप की जरूरत जार फ़ाइलों like so

+0

@Laurel: मुझे बताने के लिए धन्यवाद! –

+0

कोई समस्या नहीं! यह छोटे लिंक को साफ करने के लिए एक [बड़ी परियोजना] (http://meta.stackoverflow.com/questions/321494) का हिस्सा है। मुझे खुशी है कि आखिर में किसी ने मेरी टिप्पणियों में से एक को स्वीकार किया। – Laurel

0

आप Proguard के लिए पुस्तकालयों को शामिल करने की जरूरत नहीं है; आपको कक्षा के नाम और कुछ अन्य सामान रखने के लिए प्रोगुआर्ड को निर्देश देना होगा। मैं अपने आप को थोड़ा इसके साथ चारों ओर toyed है, और मैं this discussion के लिए इसी तरह कुछ के साथ समाप्त हो गया:

-keepnames class org.codehaus.** { *; } 
-keepattributes *Annotation*,EnclosingMethod 
-dontwarn org.codehaus.jackson.** 

आप अभी भी दुर्घटनाओं — सामना कर रहे हैं और मैं तेजी से परीक्षण सुझाव है! — आप जैक्सन के साथ पूरी तरह से बनाए रखने के लिए चाहते हो सकता है:

-keep class org.codehaus.** { *; } 
-keepattributes *Annotation*,EnclosingMethod 
-dontwarn org.codehaus.jackson.** 

(ध्यान दें कि बाद एक बड़ी फ़ाइल पैदा करता है।)

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