java.lang.NoClassDefFoundError: android/graphics/drawable/Icon
Posted
技术标签:
【中文标题】java.lang.NoClassDefFoundError: android/graphics/drawable/Icon【英文标题】: 【发布时间】:2018-01-16 20:33:21 【问题描述】:到目前为止,我只为一位使用有根手机 (SM-G900R7 android 4.4.2) 的用户收到此错误。错误是这样的:
Fatal Exception:
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.
谢谢
【问题讨论】:
对我来说同样的问题。相同的root设备,相同的android版本。你找到解决办法了吗? 让我猜猜?运行 Android 4 的三星设备? @NomanRafique Samsung S5, 4.4.2, 已root。 我遇到了同样的事情,同样的设备通过 crashlyitcs 报告。几乎每个新版本都有一个实例,并且几乎在发布后立即出现。我的应用有 multidex。 谷歌问题跟踪器:issuetracker.google.com/issues/63151548 【参考方案1】:更新
该问题已在支持库 27.0.0 中得到修复。如果您更新,请不要忘记更改compileSdkVersion 27
。
发生了什么?
当扩展 View
的类定义返回或接受不在类路径上的类型的参数的方法时,搭载 Android 4.4 的三星设备会崩溃。
从支持库版本 25.4.0 开始,AppCompatImageView
和 AppCompatImageButton
错误地覆盖了 setImageIcon(Icon)
方法。由于 API 23 中引入了Icon
类,因此应用程序在使用 API 19 的三星设备上崩溃。
当您尝试覆盖 View.onApplyWindowInsets(WindowInsets)
时会发生类似的情况。
支持库 26.1.0 的解决方法
直到以官方方式修复此问题,被删除。这意味着它不会在搭载 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。
警告:在复制粘贴之前了解代码,从未知来源获取代码时务必小心!
【讨论】:
如果我必须将支持库更新到 > 26.1.0,将来会发生什么?我认为您的修复将过时,对吧? @Dika 不用担心,它应该在下一个版本中修复。 @Chisko 不要使用不同支持库的多个版本。我认为您可以安全地将所有支持库更新到 26.1.0。该修复程序仅针对该一个版本发布。 @Chisko 这只是习惯的力量。很多人不知道支持库是相互关联的,如果使用不同的版本可能会崩溃。只要确保你这样做:) @Alex 我刚刚浏览了 AppCompat 27.0.0 的源代码,它是正确的。两种选择:1)不知何故,您仍在使用较旧的支持库。 Check your resolved dependencies. 2) 由于不同的类,在其他地方引发了相同的异常。您可以分享崩溃报告或堆栈跟踪吗?我会调查的。【参考方案2】:This issue was resolved 在支持库 27.0.0 中:
Android Gradle 插件 3.x:
implementation 'com.android.support:appcompat-v7:27.0.0'
implementation 'com.android.support:support-v4:27.0.0'
Android Gradle 插件 2.x:
compile 'com.android.support:appcompat-v7:27.0.0'
compile 'com.android.support:support-v4:27.0.0'
请注意,您还需要针对 SDK 级别 27 进行编译。
【讨论】:
【参考方案3】:此崩溃与 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'
【讨论】:
值得注意的是,这会将您锁定到compileSdkVersion 25
,自 25.4.0 以来没有引入 Android O API 和支持库功能(例如着色图像视图可绘制对象和矢量路径变形向后移植)。这是支持库更新日志developer.android.com/topic/libraries/support-library/…【参考方案4】:
有两种选择:
-
您是否更改了支持库版本?当资源有时没有以相同的名称“保存”或根本没有“保存”时,这是一个非常经典的库问题。不是你,是谷歌。尝试使用support lib 25,看看是否仍然出现此错误。
尝试清理项目并重建。也许您的构建文件夹中保留了一些旧的库版本,当您构建项目时,它会从中获取旧值。
【讨论】:
感谢您的回答,对于 2。我做了很多次完整的 gradle clear。 1. 我的 targetSdkVersion 是 26,如果不是针对最新的 API,Android Studio 会显示警告,如果我使用比 targetSdkVersion 更旧版本的支持库,Android Studio 也会显示错误。 更新到 SDK 26 后出现同样的问题。 @cn123h 你用的是哪个版本的支持库? @amouly 你的支持库版本是?以上是关于java.lang.NoClassDefFoundError: android/graphics/drawable/Icon的主要内容,如果未能解决你的问题,请参考以下文章