android android-support-library noclassdeffounderror

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



android-support-library (4)

Hasta ahora, recibí este error solo para un usuario, que usa un teléfono rooteado (SM-G900R7 Android 4.4.2). El error es así:

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)

Nunca uso android.graphics.drawable.Icon en mi código, todos los usos son de android.support.v4.graphics.drawable.IconCompat y tampoco uso esa clase en mi código ...

Por version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26. biblioteca de soporte es la version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

Gracias


Actualizar

El problema se solucionó en la biblioteca de soporte 27.0.0. Si actualiza, no olvide cambiar también compileSdkVersion 27 .

¿Que esta pasando?

Los dispositivos Samsung con Android 4.4 se bloquean así cuando las clases que amplían la View definen métodos que devuelven o toman parámetros de tipos que no están en classpath.

A partir de la biblioteca de soporte versión 25.4.0, AppCompatImageView y AppCompatImageButton anulan incorrectamente el método setImageIcon(Icon) . Desde que se introdujo la clase Icon en API 23, la aplicación se bloquea en dispositivos Samsung con API 19.

Algo similar sucede cuando intenta anular View.onApplyWindowInsets(WindowInsets) .

Solución alternativa para la biblioteca de soporte 26.1.0

Hasta que esto se arregle de manera oficial, si está atascado con una versión anterior de la biblioteca de soporte, hice una versión modificada de appcompat-v7 donde se eliminan todos los rastros de los métodos setImageIcon . Esto significa que no se bloqueará en un Samsung con Android 4.4.

Pon esto en la parte inferior de build.gradle de tu aplicación:

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

Este código reemplazará la appcompat-v7 con el artefacto modificado descrito.

Actualmente, la única versión compatible de la corrección es 26.1.0.

Advertencia: comprenda el código antes de copiar y pegar, ¡y siempre tenga cuidado al obtener código de fuentes desconocidas!


Este bloqueo relacionado con la versión 25.4.0 de la biblioteca de soporte.

Use la versión 25.3.1 .

Reemplazar

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

Con:

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


Hay 2 opciones:

  1. ¿Ha cambiado la versión de la biblioteca de soporte? Este es un problema de biblioteca bastante clásico cuando los recursos a veces no se ''guardan'' con el mismo nombre, o en absoluto. No eres tú, es google. Intente usar support lib 25 y vea si este error aún ocurre.
  2. Intenta limpiar el proyecto y reconstruir. Tal vez te quedas con algunas versiones antiguas de la biblioteca en tu carpeta de compilación, y cuando construyes tu proyecto toma viejos valores de él.

Este problema se resolvió en la biblioteca de soporte 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''

Tenga en cuenta que también necesitará compilar con el nivel 27 del SDK.