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


95

Şimdiye kadar bu hatayı yalnızca köklü bir telefon kullanan bir kullanıcı için aldım (SM-G900R7 Android 4.4.2). Hata şu şekildedir:

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)

Kodumda asla android.graphics.drawable.Icon kullanmıyorum, tüm kullanımlar kaynaklıdır android.support.v4.graphics.drawable.IconCompatve bu sınıfı kodumda asla kullanmam

Btw benim destek kitaplığım version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

Teşekkürler


4
Benim için aynı sorun. Aynı köklü cihaz, aynı android sürümü. bir çözüm buldun mu?
Chris

24
Tahmin etmeme izin ver? Android 4 çalıştıran Samsung cihazları?
Numan Rafique

7
@NomanRafique Samsung S5, 4.4.2, köklü.
Vaiden

2
Aynı şeyi yaşıyorum, aynı cihaz crashlyitcs aracılığıyla bildirildi. Neredeyse her yeni sürümde bir örnek ve neredeyse yayınlandıktan hemen sonra. Uygulamamda multidex var.
djxstream

Yanıtlar:


40

Güncelleme

Sorun 27.0.0 destek kitaplığında düzeltildi. Güncelleme yaparsanız, değiştirmeyi compileSdkVersion 27de unutmayın .

Ne oluyor?

Android 4.4'e sahip Samsung cihazları, genişleyen sınıflar View, sınıf yolunda olmayan türlerin parametrelerini döndüren veya alan yöntemleri tanımladığında böyle çöker .

Destek kitaplığı sürüm 25.4.0 ile başlayarak AppCompatImageViewve AppCompatImageButtonyanlış geçersiz kılar setImageIcon(Icon)yöntem. IconSınıf API 23'te tanıtıldığından beri uygulama, API 19 ile Samsung cihazlarında çöküyor.

Geçersiz kılmaya çalıştığınızda da benzer bir şey olur View.onApplyWindowInsets(WindowInsets).

Destek kitaplığı 26.1.0 için geçici çözüm

Bu resmi bir şekilde düzeltilinceye kadar , destek kitaplığının daha eski bir sürümüne takılırsanız, appcompat-v7tüm setImageIconyöntem izlerinin kaldırıldığı değiştirilmiş bir sürüm yaptım . Bu, Android 4.4 ile bir Samsung'da çökmeyeceği anlamına gelir.

Bunu, uygulamanızın build.gradle'ın altına koyun:

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'
        }
    }
}

Bu kod, appcompat-v7bağımlılığı açıklanan değiştirilmiş yapı ile değiştirecektir.

Şu anda düzeltmenin desteklenen tek sürümü 26.1.0'dır.

Uyarı: Kopyalayıp yapıştırmadan önce kodu anlayın ve bilinmeyen kaynaklardan kod alırken daima dikkatli olun!


Destek kitaplığını> 26.1.0 olarak güncellemem gerekirse gelecekte ne olacak? Sanırım düzeltmen eski olacak, değil mi?
Dika

2
@Dika Endişelenmeyin, bir sonraki sürümde düzeltilmesi gerekiyor.
Eugen Pechanec

1
@Chisko Farklı destek kitaplıklarının birden çok sürümünü kullanmayın. Tüm destek kitaplıklarınızı güvenle 26.1.0'a güncelleyebileceğinizi düşünüyorum. Düzeltme yalnızca bu tek sürüm için yayınlandı.
Eugen Pechanec

1
@Chisko bu sadece alışkanlığın gücü. Pek çok kişi destek kitaplıklarının birbirine bağlı olduğunu bilmiyor ve farklı sürümler kullanılırsa çökebilir. Sadece yaptığınızdan emin olmak :)
Eugen Pechanec

1
@Alex Az önce AppCompat 27.0.0 kaynağına baktım ve doğru. İki seçenek: 1) Bir şekilde hala eski destek kitaplığını kullanıyorsunuz. Çözülmüş bağımlılıklarınızı kontrol edin. 2) Aynı istisna başka bir yerde ve farklı bir sınıf nedeniyle atılır. Çökme raporunu veya yığın izini paylaşabilir misiniz? Ben inceleyeceğim.
Eugen Pechanec

14

Bu sorun 27.0.0 destek kitaplığında çözüldü:

Android Gradle Eklentisi 3.x:

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

Android Gradle Eklentisi 2.x:

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

Ayrıca SDK seviye 27'ye göre derlemeniz gerekeceğini unutmayın.


1

Bu kilitlenme, destek kitaplığının 25.4.0 sürümüyle ilgilidir.

25.3.1 sürümünü kullanın .

Değiştir

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

İle:

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

Bunun sizi kilitlediğini compileSdkVersion 25, Android O API'leri ve 25.4.0'dan beri sunulan destek kitaplığı özelliklerinin bulunmadığını belirtmek gerekir (ör. Resim görünümü çizimlerini renklendirme ve arka porta geçiş vektör yolu). İşte destek kitaplığı changelog developer.android.com/topic/libraries/support-library/…
Eugen Pechanec

-1

2 seçenek vardır:

  1. Destek kitaplığı sürümünü değiştirdiniz mi? kaynaklar bazen aynı adla 'kaydedilmediğinde' veya hiç 'kaydedilmediğinde bu oldukça klasik bir kitaplık sorunudur. Sen değilsin, onun google. Support lib 25'i kullanmayı deneyin ve bu hatanın hala devam edip etmediğine bakın.
  2. Projeyi temizlemeyi ve yeniden oluşturmayı deneyin. Belki yapı klasörünüzde bazı eski kütüphane sürümleriyle tutulur ve projenizi oluşturduğunuzda ondan eski değerleri alır.

1
Cevabınız için teşekkür ederim, 2. için birçok kez tam not verdim. 1. için targetSdkVersion 26, Android Studio en yeni API'yi hedeflemiyorsa uyar ve targetSdkVersion'dan daha eski support lib sürümünü kullanırsam Android Studio da hata gösteriyor.
cn123h

1
SDK 26'ya güncelledikten sonra da aynı sorun.
amouly

@ cn123h hangi destek kitaplığı sürümünü kullanıyorsunuz?
Sufian

@amouly ve destek kitaplığı sürümünüz?
Sufian
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.