Jusqu'à présent, je n'ai eu cette erreur que pour un utilisateur, qui utilise un téléphone rooté (SM-G900R7 Android 4.4.2). L'erreur est comme ceci:
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, tous les usages proviennent android.support.v4.graphics.drawable.IconCompat
et je n'utilise jamais non plus cette classe dans mon code ...
Btw ma bibliothèque de support est version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.
Merci
Réponses:
Mettre à 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
compileSdkVersion 27
également.Qu'est-ce qui se passe?
Les appareils Samsung équipés d'Android 4.4 plantent de cette manière lorsque les classes qui s'étendent
View
définissent des méthodes qui renvoient ou prennent des paramètres de types qui ne sont pas sur le chemin de classe.À partir de la version 25.4.0 de la bibliothèque de support
AppCompatImageView
etAppCompatImageButton
remplace incorrectement lasetImageIcon(Icon)
méthode. Depuis que laIcon
classe a été introduite dans l'API 23, l'application se bloque sur les appareils Samsung avec l'API 19.Une chose similaire se produit lorsque vous essayez de passer outre
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 version plus ancienne de la bibliothèque de support, j'ai créé une version modifiéeappcompat-v7
où toutes les traces desetImageIcon
méthodes sont supprimées. Cela signifie qu'il ne plantera pas sur un Samsung avec Android 4.4.Mettez ceci au bas de la build.gradle de votre application:
Ce code remplacera la
appcompat-v7
dépendance par l'artefact modifié décrit.Actuellement, la seule version prise en charge du correctif est la 26.1.0.
Attention: comprenez le code avant de copier-coller et soyez toujours prudent lorsque vous récupérez du code provenant de sources inconnues!
la source
Ce problème a été résolu dans la bibliothèque de support 27.0.0:
Plugin Android Gradle 3.x:
Plugin Android Gradle 2.x:
Notez que vous devrez également compiler avec le niveau 27 du SDK.
la source
Ce plantage était lié à la version 25.4.0 de la bibliothèque de support.
Utilisez la version 25.3.1 .
Remplacer
Avec:
la source
compileSdkVersion 25
, aucune API Android O et aucune fonctionnalité de bibliothèque de support introduite depuis la version 25.4.0 (par exemple, la teinte des dessins de vue d'image et le backport de morphing de chemin vectoriel). Voici la bibliothèque de support changelog developer.android.com/topic/libraries/support-library/...Il existe 2 options:
la source