java.lang.NoClassDefFoundError: android / graphics / drawable / Icon


95

अब तक मुझे यह त्रुटि केवल एक उपयोगकर्ता के लिए मिली, जो रूट किए गए फोन (SM-G900R7 Android 4.4.2) का उपयोग करता है। त्रुटि इस प्रकार है:

Fatal Exception: java.lang.NoClassDefFoundError: android/graphics/drawable/Icon
       at java.lang.Class.getDeclaredMethods(Class.java)
       at java.lang.Class.getDeclaredMethods(Class.java:656)
       at android.view.ViewDebug.getExportedPropertyMethods(ViewDebug.java:960)
       at android.view.ViewDebug.exportMethods(ViewDebug.java:1047)
       at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:997)
       at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:983)
       at android.view.ViewDebug.dumpView(ViewDebug.java:900)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:870)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:867)
       at android.view.ViewDebug.dump(ViewDebug.java:793)
       at android.view.ViewDebug.dispatchCommand(ViewDebug.java:416)
       at android.view.ViewRootImpl$W.executeCommand(ViewRootImpl.java:6258)
       at android.view.IWindow$Stub.onTransact(IWindow.java:65)
       at android.os.Binder.execTransact(Binder.java:404)
       at dalvik.system.NativeStart.run(NativeStart.java)

मैं अपने कोड में कभी भी android.graphics.drawable.Icon का उपयोग नहीं करता हूं, सभी usages से हैं android.support.v4.graphics.drawable.IconCompatऔर मैं अपने कोड में कभी भी उस वर्ग का उपयोग नहीं करता हूं ...

Btw मेरा समर्थन पुस्तकालय है version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

धन्यवाद


4
मेरे लिए भी यही मुद्दा है। समान रूट किए गए डिवाइस, समान Android संस्करण। क्या आपको एक समाधान मिला?
क्रिस

24
मुझे अंदाजा लगाने दो? एंड्रॉइड 4 चलाने वाले सैमसंग डिवाइस?
नोमान रफीक

7
@NomanRafique सैमसंग S5, 4.4.2, निहित।
Vaiden

2
मैं एक ही चीज का अनुभव कर रहा हूं, उसी डिवाइस को क्रैशब्लिट्स के माध्यम से रिपोर्ट किया गया है। एक उदाहरण लगभग हर नए संस्करण में, और प्रकाशन के तुरंत बाद। मेरे ऐप में मल्टीडेक्स है।
djxstream 21

जवाबों:


40

अपडेट करें

समर्थन लाइब्रेरी में समस्या 27.0.0 है। यदि आप अपडेट करते हैं तो compileSdkVersion 27साथ ही बदलना न भूलें ।

क्या हो रहा है?

एंड्रॉइड 4.4 के साथ सैमसंग डिवाइस इस तरह से दुर्घटनाग्रस्त हो जाते हैं जब कक्षाएं विस्तारित होती Viewहैं जो उन तरीकों को परिभाषित करती हैं जो वापस लौटते हैं या उन प्रकारों के मापदंडों को लेते हैं जो क्लासपैथ पर नहीं हैं।

समर्थन लाइब्रेरी संस्करण 25.4.0 के साथ शुरू करना AppCompatImageViewऔर AppCompatImageButtonगलत तरीके से ओवरराइड setImageIcon(Icon)विधि। चूंकि Iconक्लास एपीआई 23 में पेश किया गया था, इसलिए ऐप 19 डिवाइसों पर एपीआई 19 के साथ सैमसंग उपकरणों पर क्रैश हो गया।

जब आप ओवरराइड करने की कोशिश करते हैं तो इसी तरह की बात होती है View.onApplyWindowInsets(WindowInsets)

समर्थन पुस्तकालय के लिए समाधान 26.1.0

जब तक यह आधिकारिक तरीके से तय नहीं हो जाता है, यदि आप समर्थन पुस्तकालय के पुराने संस्करण के साथ फंस गए हैं, तो मैंने एक संशोधित संस्करण बनाया है appcompat-v7जहां सभी setImageIconतरीकों के निशान हटा दिए जाते हैं। इसका मतलब है कि यह एंड्रॉइड 4.4 वाले सैमसंग पर क्रैश नहीं होगा।

इसे अपने ऐप के बिल्ड.ग्रेडल के नीचे रखें:

repositories {
    maven { url "https://dl.bintray.com/consp1racy/maven" }
}

configurations.all {
    resolutionStrategy.eachDependency { details ->
        def requested = details.requested
        if (requested.group == 'com.android.support' && requested.name == 'appcompat-v7') {
            details.useTarget 'net.xpece.android:support-appcompat-v7-fixed:26.1.0-1'
        }
    }
}

यह कोड appcompat-v7वर्णित संशोधित कलाकृतियों के साथ निर्भरता को प्रतिस्थापित करेगा ।

वर्तमान में फिक्स का एकमात्र समर्थित संस्करण 26.1.0 है।

चेतावनी: कॉपी-पेस्ट करने से पहले कोड को समझें, और अज्ञात स्रोतों से कोड प्राप्त करते समय हमेशा सावधानी बरतें!


भविष्य में क्या होगा यदि मुझे समर्थन पुस्तकालय को> 26.1.0 पर अद्यतन करना होगा? मुझे लगता है कि आपका फिक्स अप्रचलित होगा, है ना?
दीका

2
@ डिका कोई चिंता नहीं, इसे अगली रिलीज में तय किया जाना चाहिए।
यूजेन पिंचेक

1
@ यह विभिन्न समर्थन पुस्तकालयों के कई संस्करणों का उपयोग नहीं करते हैं। मुझे लगता है कि आप 26.1.0 को सुरक्षित रूप से अपने सभी समर्थन परिवादों को अपडेट कर सकते हैं। फिक्स केवल उस एक संस्करण के लिए जारी किया गया है।
यूजेन पिंचेक

1
@ यह सिर्फ आदत की ताकत है। बहुत से लोग नहीं जानते हैं कि समर्थन पुस्तकालय आपस में जुड़े हुए हैं और अगर विभिन्न संस्करणों का उपयोग किया जाता है तो दुर्घटना हो सकती है। बस सुनिश्चित करें कि आप करते हैं :)
Eugen Pechanec

1
@ एलेक्स I अभी-अभी AppCompat 27.0.0 के स्रोत से गुजरा है और यह सही है। दो विकल्प: 1) किसी तरह आप अभी भी पुराने समर्थन पुस्तकालय का उपयोग कर रहे हैं। अपनी सुलझी हुई निर्भरता की जाँच करें। 2) एक ही अपवाद कहीं और एक अलग वर्ग के कारण फेंक दिया जाता है। क्या आप क्रैश रिपोर्ट या स्टैक ट्रेस साझा कर सकते हैं? मैं इस पर गौर करूंगा।
यूजेन पिंचेक

14

यह समस्या समर्थन लाइब्रेरी में हल हो गई थी 27.0.0:

एंड्रॉइड ग्रैडल प्लगिन 3.x:

implementation 'com.android.support:appcompat-v7:27.0.0'
implementation 'com.android.support:support-v4:27.0.0'

एंड्रॉइड ग्रैडल प्लगिन 2.x:

compile 'com.android.support:appcompat-v7:27.0.0'
compile 'com.android.support:support-v4:27.0.0'

ध्यान दें कि आपको एसडीके स्तर 27 के खिलाफ भी संकलन करना होगा।


1

यह दुर्घटना समर्थन पुस्तकालय के 25.4.0 संस्करण से संबंधित है।

25.3.1 संस्करण का उपयोग करें ।

बदलने के

compile 'com.android.support:appcompat-v7:25.4.0'
compile 'com.android.support:support-v4:25.4.0'

साथ में:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:support-v4:25.3.1'

वर्थ यह देखते हुए कि यह आपको लॉक करता है compileSdkVersion 25, 25.4.0 के बाद से कोई एंड्रॉइड ओ एपीआई और कोई सपोर्ट लाइब्रेरी नहीं है। यहाँ समर्थन पुस्तकालय changelog developer.android.com/topic/lbooks/support-library/…
यूजेन पचनक

-1

2 विकल्प हैं:

  1. क्या आपने समर्थन लाइब्रेरी संस्करण बदल दिया है? यह काफी क्लासिक लाइब्रेरी मुद्दा है जब संसाधनों को कभी-कभी एक ही नाम के साथ या बिल्कुल भी सहेजा नहीं जाता है। यह आप नहीं है, इसका Google है। समर्थन lib 25 का उपयोग करने का प्रयास करें, और देखें कि क्या यह त्रुटि अभी भी होती है।
  2. प्रोजेक्ट को साफ़ करने और पुनर्निर्माण के लिए प्रयास करें। हो सकता है कि आपको अपने बिल्ड फ़ोल्डर में कुछ पुराने लाइब्रेरी संस्करणों के साथ रखा गया हो, और जब आप अपना प्रोजेक्ट बनाते हैं तो उसमें से पुराने मान लेते हैं।

1
उत्तर के लिए धन्यवाद, 2 के लिए। मैंने कई बार पूर्ण रूपेण स्पष्ट किया। 1. मेरा targetSdkVersion 26 है, Android Studio चेतावनी देता है कि अगर नवीनतम API और Android Studio को लक्षित नहीं किया जाए तो मैं त्रुटि दिखाता हूं यदि मैं लक्ष्यSdkVersion की तुलना में समर्थन के पुराने संस्करण का उपयोग करता हूं।
cn123h

1
एसडीके 26 को अपडेट करने के बाद एक ही समस्या।
एमौली

@ cn123h समर्थन पुस्तकालय के किस संस्करण का आप उपयोग कर रहे हैं?
सूफियान

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