到目前为止,我只为一位使用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.
由于
答案 0 :(得分:40)
此问题已在支持库27.0.0中修复。如果您更新,请不要忘记更改compileSdkVersion 27
。
当扩展View
的类定义返回或获取不在类路径上的类型参数的方法时,Android 4.4的三星设备会像这样崩溃。
从支持库版本25.4.0开始AppCompatImageView
和AppCompatImageButton
错误地覆盖了setImageIcon(Icon)
方法。由于API 23中引入了Icon
类,因此应用程序会在使用API 19的三星设备上崩溃。
当您尝试覆盖View.onApplyWindowInsets(WindowInsets)
时会发生类似的事情。
在以官方方式解决此问题之前,如果您遇到旧版本的支持库,我会修改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)
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)
有两个选项: