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

95

Sejauh ini saya mendapat kesalahan ini hanya untuk satu pengguna, yang menggunakan ponsel yang di-rooting (SM-G900R7 Android 4.4.2). Kesalahannya seperti ini:

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)

Saya tidak pernah menggunakan android.graphics.drawable.Icon dalam kode saya, semua penggunaan berasal android.support.v4.graphics.drawable.IconCompatdan saya juga tidak pernah menggunakan kelas itu dalam kode saya ...

Btw pustaka dukungan saya version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

Terima kasih

cn123h
sumber
4
Masalah yang sama bagi saya. Perangkat yang di-rooting sama, versi android yang sama. Apakah Anda menemukan solusinya?
Chris
24
Biar kutebak? Perangkat Samsung yang menjalankan Android 4?
Noman Rafique
7
@NomanRafique Samsung S5, 4.4.2, di-root.
Vaiden
2
Saya mengalami hal yang sama, perangkat yang sama dilaporkan melalui crashlyitcs. Satu contoh hampir setiap versi baru, dan segera setelah penerbitan. Aplikasi saya memiliki multidex.
djxstream
6
google pelacak isu: issuetracker.google.com/issues/63151548
tabjsina

Jawaban:

40

Memperbarui

Masalah telah diperbaiki di support library 27.0.0. Jika Anda memperbarui jangan lupa untuk mengubahnya compileSdkVersion 27juga.

Apa yang terjadi?

Perangkat Samsung dengan Android 4.4 mengalami error seperti ini saat class extending Viewdefine method yang mengembalikan atau mengambil parameter tipe yang tidak ada di classpath.

Dimulai dengan support library versi 25.4.0 AppCompatImageViewdan metode AppCompatImageButtonpenggantian yang salah setImageIcon(Icon). Sejak Iconkelas diperkenalkan di API 23, aplikasi mogok di perangkat Samsung dengan API 19.

Hal serupa terjadi saat Anda mencoba mengganti View.onApplyWindowInsets(WindowInsets).

Solusi untuk pustaka dukungan 26.1.0

Sampai ini diperbaiki secara resmi, Jika Anda terjebak dengan versi pustaka dukungan yang lebih lama, saya membuat versi modifikasi di appcompat-v7mana semua jejak setImageIconmetode dihapus. Ini berarti itu tidak akan macet pada Samsung dengan Android 4.4.

Letakkan ini di bagian bawah build.gradle aplikasi Anda:

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

Kode ini akan menggantikan appcompat-v7ketergantungan dengan artefak yang dimodifikasi yang dijelaskan.

Saat ini satu-satunya versi perbaikan yang didukung adalah 26.1.0.

Peringatan: Pahami kode sebelum melakukan copy-paste, dan selalu berhati-hati saat mendapatkan kode dari sumber yang tidak dikenal!

Eugen Pechanec
sumber
apa yang akan terjadi di masa mendatang jika saya harus memperbarui pustaka dukungan ke> 26.1.0? Saya pikir perbaikan Anda akan usang, bukan?
Dika
2
@Dika Jangan khawatir, harus diperbaiki di rilis berikutnya.
Eugen Pechanec
1
@Chisko Jangan menggunakan beberapa versi pustaka dukungan yang berbeda. Saya pikir Anda dapat dengan aman memperbarui semua lib dukungan Anda ke 26.1.0. Perbaikan hanya dirilis untuk satu versi itu.
Eugen Pechanec
1
@Chisko itu hanya kekuatan kebiasaan. Banyak orang tidak tahu bahwa pustaka dukungan saling berhubungan dan mungkin macet jika versi yang berbeda digunakan. Hanya memastikan bahwa Anda melakukannya :)
Eugen Pechanec
1
@Alex Saya baru saja melalui sumber AppCompat 27.0.0 dan itu benar. Dua opsi: 1) Entah bagaimana Anda masih menggunakan pustaka dukungan yang lebih lama. Periksa ketergantungan Anda yang telah diselesaikan. 2) Pengecualian yang sama diberikan di tempat lain dan karena kelas yang berbeda. Dapatkah Anda membagikan laporan kerusakan atau pelacakan tumpukan? Saya akan memeriksanya.
Eugen Pechanec
14

Masalah ini telah diatasi di pustaka dukungan 27.0.0:

Plugin Android Gradle 3.x:

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

Plugin Android Gradle 2.x:

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

Perhatikan bahwa Anda juga perlu melakukan kompilasi terhadap SDK level 27.

Paul Lammertsma
sumber
1

Error ini terkait dengan support library versi 25.4.0.

Gunakan 25.3.1 versi .

Menggantikan

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

Dengan:

compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:support-v4:25.3.1'
phnmnn
sumber
Perlu dicatat bahwa ini mengunci Anda ke compileSdkVersion 25, tidak ada Android O API dan tidak ada fitur pustaka dukungan yang diperkenalkan sejak 25.4.0 (misalnya, mewarnai tampilan gambar yang dapat digambar dan jalur vektor morphing backport). Berikut adalah pengembang
log perubahan
-1

Ada 2 pilihan:

  1. Sudahkah Anda mengubah versi pustaka dukungan? ini adalah masalah perpustakaan yang cukup klasik ketika sumber daya terkadang tidak 'disimpan' dengan nama yang sama, atau sama sekali. Ini bukan kamu, itu google. Coba gunakan dukungan lib 25, dan lihat apakah kesalahan ini masih terjadi.
  2. Cobalah untuk membersihkan proyek dan membangun kembali. Mungkin Anda tetap menggunakan beberapa versi pustaka lama di folder build Anda, dan ketika Anda membangun proyek Anda, itu mengambil nilai lama darinya.
Dus
sumber
1
terima kasih atas jawabannya, untuk 2. Saya melakukan full gradle clear berkali-kali. untuk 1. targetSdkVersion saya adalah 26, Android Studio menampilkan peringatan jika tidak menargetkan API terbaru dan Android Studio juga menampilkan error jika saya menggunakan support lib versi lama daripada targetSdkVersion.
cn123h
1
Masalah yang sama setelah memperbarui ke SDK 26.
amouly
@ cn123h versi pustaka dukungan mana yang Anda gunakan?
Sufian
@amouly dan versi lib dukungan Anda?
Sufian