नरक नरक - संदर्भित वर्ग नहीं मिल रहा है


125

इसलिए, मैं कुछ सॉफ्टवेयर जारी करने की कोशिश कर रहा हूं, लेकिन प्रोगार्ड मुझे सिरदर्द दे रहा है।

जब मैं प्रोगार्ड का उपयोग करके निर्यात करने की कोशिश करता हूं तो मुझे बहुत चेतावनी मिल रही है "" संदर्भित वर्ग नहीं मिल सकता है "

उदाहरण के लिए:

[2011-08-07 17:44:37 - GAME] Warning: org.simpleframework.xml.stream.StreamReader: can't find referenced class javax.xml.stream.events.XMLEvent
[2011-08-07 17:44:37 - GAME] Warning: there were 52 unresolved references to classes or interfaces.
[2011-08-07 17:44:37 - GAME]          You may need to specify additional library jars (using '-libraryjars'),
[2011-08-07 17:44:37 - GAME]          or perhaps the '-dontskipnonpubliclibraryclasses' option.
[2011-08-07 17:44:37 - GAME] java.io.IOException: Please correct the above warnings first.
[ 

चेतावनियाँ सरलता से संबंधित प्रतीत होती हैं, इसलिए मेरे प्रॉपर कॉन्फ़िग फ़ाइल में मैंने निम्नलिखित जोड़े हैं:

-libraryjars pathtoprojecttolibs\simple-xml-2.4.jar

pathtoprojecttolibsजार के लिए रास्ता कहाँ है जो मेरी परियोजना द्वारा संदर्भित हैं।

इससे कोई फर्क नहीं पड़ता।

अगर simpleframework संदर्भ javax है तो क्या मैं इसे अनदेखा करने के लिए proguard को बता सकता हूं ??

कोई विचार?


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

मैं वास्तव में केवल इसका उपयोग कर रहा था ताकि कोड को आसानी से सुरक्षित रखने की कोशिश की जा सके? क्या आप इसके लायक समझते हैं?
इक्यूसिलीक्वेस्टियंस

3
@ListenToRick Proguard पूरी तरह से ठीक है, अगर यह उचित कॉन्फ़िगरेशन और आपके परिणामी ऐप के साथ ठीक से परीक्षण किया गया है। मुझे पूरा यकीन है कि Google इसके उपयोग की अनुशंसा भी करता है। Google एंड्रॉइड ऐप के साथ प्रोगार्ड का उपयोग करने के लिए बहुत सारे गाइड / उदाहरण प्रदान करता है।
क्रैकरजैक 9

Proguard एक अच्छा उपकरण है, लेकिन Google यह सिफारिश कर रहा है कि शायद यह कम से कम उतना ही है क्योंकि डेक्स-प्रारूप में कुछ और के रूप में एक अजीब आकार सीमा है। (कोड देखें।
www.p

5
@alun, यह कारण नहीं है। हममें से जो हमारे ऐप्स को रिवर्स इंजीनियर नहीं चाहते हैं, या जो पाइरेसी को रोकने के लिए 'कोशिश' करने के लिए लाइसेंस का उपयोग कर रहे हैं, उन्हें इस तरह के रूप में एक कठिन उपकरण का उपयोग करना चाहिए ताकि यह हैकर्स के लिए कठिन हो सके। अपने एप्लिकेशन को कम जगह लेना भी अंतिम उपयोगकर्ता के लिए एक लाभ है, और इन उपकरणों द्वारा किए गए अनुकूलन भी हैं ... फिर भी एक और लाभ।
क्रिस्टोफर पेरी

जवाबों:


128

org.simpleframework.xml.stream.StreamReaderअपने कोड में संदर्भित करता है javax.xml.stream.events.XMLEvent। बाद वाली कक्षा जावा रनटाइम ( rt.jar) का हिस्सा है, लेकिन एंड्रॉइड रनटाइम ( android.jar) का हिस्सा नहीं है , इसलिए प्रोगार्ड चेतावनी देता है कि कुछ टूट सकता है। यदि आप सुनिश्चित हैं कि आपका आवेदन वैसे भी काम करता है, तो आप निर्दिष्ट कर सकते हैं

-dontwarn javax.xml.stream.events.**

ProGuard नरक?


15
यह मेरे लिए ठीक नहीं किया, लेकिन यह किया-dontwarn javax.xml.**
Jeshurun

8
-libraryjars <java.home>/lib/rt.jarमेरे लिए निश्चित मुद्दे को जोड़ना ।
गौतम

3
मुझे javax.xml.stream.XMLInputFactory, जैसे उदाहरण के बारे में अतिरिक्त चेतावनी मिली, इसलिए मैंने इस्तेमाल किया-dontwarn javax.xml.stream.**
स्थानिकवादी

1
मैं -dontwarnGUI कैसे गा सकता हूं ?
टॉम ज़ातो - 9:04

2
प्रोग्रेस नर्क जारी है, बस मुझे भड़काओ और इस दर्द के साथ हो जाओ।
जोश


5

यह त्रुटि इसलिए होती है क्योंकि आपके द्वारा उपयोग किए जाने वाले लिबास अन्य लिबास पर निर्भर होते हैं जिनका उपयोग वास्तव में नहीं किया जाता है, लेकिन प्रोगार्ड उन्हें ढूंढ रहा है।
अपने जोड़े -dontwarn अपने को लाइनों proguard-rules.pro इस चेतावनी को अक्षम करने के अपने Android परियोजना में फ़ाइल।

यहाँ छवि विवरण दर्ज करें

आप अपनी त्रुटि के स्टैकट्रेस में अपने प्रॉपर-rules.pro को जोड़ने के लिए कौन सी निर्भरता पा सकते हैं।


2

आपको इसे अपने प्रॉपर कॉन्फिग में शामिल करना चाहिए:

-dontskipnonpubliclibraryclasses

खैर, यह मेरे लिए उस समय किया गया था ... ~ 4 साल पहले ... तब से चीजें बदल सकती हैं :) लगता है कम से कम 2 अन्य लोगों के लिए वैसे भी काम किया है।
क्रैकरजैक

डिफ़ॉल्ट proguard-android.txt में पहले से ही यह रेखा है।
क्रिस्टीना डी रिटो जूल

1
@Ultimecia जो 2013 से है, यह पोस्ट 2011 में बनाई गई थी
CrackerJack9

2

मेरी जादू कुंजी जिसने मेरी खोज के घंटे हल किए: इसे progruard-android.txt में जोड़ें

-dontskipnonpubliclibraryclassmembers

0

हम्म। उस चेतावनी को पढ़ना यह प्रतीत होगा कि आप जिस पुस्तकालय का उपयोग करने का प्रयास कर रहे हैं, वह javax.xml.stream.events पर निर्भरता है। मुझे नहीं लगता कि नाम स्थान वास्तव में Android में बिल्कुल शामिल है। ( पैकेज इंडेक्स देखें )।

प्राउडर का उपयोग किए बिना इसे एमुलेटर पर तैनात करने का प्रयास करें और देखें कि क्या यह काम करता है। मेरा अनुमान है कि यदि कोई चेतावनी सटीक है तो मेरा अनुमान नहीं होगा।


नमस्ते, अगर यह प्रूडर के बिना एमुलेटर में काम कर रहा है, तो इसका मतलब है कि चेतावनी गलत हैं? मैं यह पता लगाने की कोशिश कर रहा हूं कि मेरे पास इस तरह की चेतावनी क्यों थी। मैं सिर्फ चेतावनियों को दबाना नहीं चाहता।
मिशेल शिह

0

मुझे लगता है कि यह एक किनारे का मामला है, लेकिन मेरे मामले में मुझे पूरी तरह से अपने जेनकिंस प्रोगार्ड पर बिल्ड फोल्डर को मिटा देना था, पुराने कोड के साथ काम करने की कोशिश की, जो कि कोई और नहीं था - बस मामले में किसी के पास भी यही मुद्दा है।


0

मेरे मामले में मैंने कुछ भी नहीं बदला है और चेतावनी दिखाना शुरू कर दिया है। समस्या टूटे हुए ग्रेडियल कैश के साथ थी। मेरे अन्य उत्तर की जाँच करें । मैं इसके साथ साझा करता हूं क्योंकि समस्या को खोजने में मेरे 2 घंटे लगे:]


0

इस लाइन को अपनी proguard-rules.proफ़ाइल में स्क्रिप्ट स्क्रिप्ट डायरेक्टरी में जोड़ें:

-dontwarn package.class.name.**

कहाँ पे package.class.name पैकेज फ़ाइल जार नाम के वर्ग नाम के साथ जोड़ा गया है।

उदाहरण के लिए:

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