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

时间:2017-08-09 05:39:31

标签: android android-support-library noclassdeffounderror

到目前为止,我只为一位使用root手机的用户(SM-G900R7 Android 4.4.2)收到此错误。错误是这样的:

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)

我从不在我的代码中使用android.graphics.drawable.Icon,所有用法都来自android.support.v4.graphics.drawable.IconCompat,我也从不在我的代码中使用该类......

我的支持库是version 26.0.0, my minSdkVersion is 15 targetSdkVersion is 26.

由于

4 个答案:

答案 0 :(得分:40)

更新

此问题已在支持库27.0.0中修复。如果您更新,请不要忘记更改compileSdkVersion 27

发生了什么事?

当扩展View的类定义返回或获取不在类路径上的类型参数的方法时,Android 4.4的三星设备会像这样崩溃。

从支持库版本25.4.0开始AppCompatImageViewAppCompatImageButton错误地覆盖了setImageIcon(Icon)方法。由于API 23中引入了Icon类,因此应用程序会在使用API​​ 19的三星设备上崩溃。

当您尝试覆盖View.onApplyWindowInsets(WindowInsets)时会发生类似的事情。

支持库26.1.0的解决方法

在以官方方式解决此问题之前,如果您遇到旧版本的支持库,我会修改appcompat-v7版本的所有内容setImageIcon方法已被删除。这意味着它在使用Android 4.4的三星上不会崩溃。

将它放在应用程序build.gradle:

的底部
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'
        }
    }
}

此代码将使用所描述的修改工件替换appcompat-v7依赖项。

目前唯一支持的修补程序版本是26.1.0。

警告:在复制粘贴之前了解代码,并且在从未知来源获取代码时始终保持谨慎!

答案 1 :(得分:14)

支持库27.0.0中的

This issue was resolved

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'

请注意,您还需要针对SDK级别27进行编译。

答案 2 :(得分:1)

此崩溃与25.4.0版本的支持库有关。

使用 25.3.1 版本。

替换

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

使用:

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

答案 3 :(得分:-1)

有两个选项:

  1. 您是否更改了支持库版本?当资源有时没有被保存时,这是非常经典的图书馆问题'具有相同的名称,或者根本没有。它不是你,它的谷歌。尝试使用支持lib 25,看看是否仍然出现此错误。
  2. 尝试清理项目并重建。也许您在构建文件夹中保留了一些旧库版本,并且在构建项目时,它会从中获取旧值。