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
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
.
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)
.
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!
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.
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'