web-dev-qa-db-fra.com

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

Jusqu'à présent, cette erreur ne concerne qu'un utilisateur, qui utilise un téléphone enraciné (SM-G900R7 Android 4.4.2). L'erreur est la suivante:

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)

Je n'utilise jamais Android.graphics.drawable.Icon dans mon code, toutes les utilisations sont de Android.support.v4.graphics.drawable.IconCompat et je n'utilise jamais cette classe dans mon code ...

Btw ma bibliothèque de support est version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

Merci

94
cn123h

Mise à jour

Le problème est résolu dans la bibliothèque de support 27.0.0. Si vous mettez à jour, n'oubliez pas de changer également compileSdkVersion 27.

Qu'est-ce qui se passe?

Les appareils Samsung avec Android 4.4 se bloquent de la sorte lorsque les classes étendues View définissent des méthodes qui renvoient ou prennent des paramètres de types qui ne sont pas sur classpath.

À partir de la version 25.4.0 de la bibliothèque de support, AppCompatImageView et AppCompatImageButton remplacent de manière incorrecte la méthode setImageIcon(Icon). Depuis que Icon class a été introduit dans l'API 23, l'application se bloque sur les appareils Samsung dotés de l'API 19.

La même chose se produit lorsque vous essayez de remplacer View.onApplyWindowInsets(WindowInsets) .

Solution de contournement pour la bibliothèque de support 26.1.0

Jusqu'à ce que cela soit corrigé de manière officielle, Si vous êtes coincé avec une ancienne version de la bibliothèque de support, j'ai créé une version modifiée de appcompat-v7 Dans laquelle toutes les traces de méthodes setImageIcon sont supprimées. Cela signifie qu'il ne plantera pas sur un Samsung avec Android 4.4.

Placez ceci au bas du build.gradle de votre application:

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

Ce code remplacera la dépendance appcompat-v7 Par l'artefact modifié décrit.

Actuellement, la seule version prise en charge du correctif est 26.1.0.

Avertissement: Comprenez le code avant de copier-coller, et faites toujours preuve de prudence lorsque vous récupérez du code provenant de sources inconnues!

40
Eugen Pechanec

Ce problème a été résol dans la bibliothèque de support 27.0.0:

Android Gradle Plugin 3.x:

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

Android Gradle Plugin 2.x:

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

Notez que vous devrez également compiler avec le niveau 27 du SDK.

14
Paul Lammertsma

Ce crash était lié à la version 25.4.0 de la bibliothèque de support.

Utilisez la version 25.3.1.

Remplacer

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

Avec:

compile 'com.Android.support:appcompat-v7:25.3.1'
compile 'com.Android.support:support-v4:25.3.1'
1
phnmnn