我看到三星Galaxy S5与Android 4.4.2的崩溃
NoClassDefFoundError: android/view/ViewStructure
自从我将支持库更新为26.0.2以来,这种情况一直在发生。现在它也发生在27.0.0,尽管我预计这些问题已在其中得到解决。在将应用程序提交到Google Play之后不久,我发现Crashlytics发生了一次崩溃(我正在推广给我的一小部分用户)。我不知道重现的确切步骤是什么。到目前为止,我已经假设它可能是在应用程序启动时。
相关报道:
java.lang.NoClassDefFoundError: android/graphics/drawable/Icon
ViewDebug.getExportedPropertyMethods java.lang.NoClassDefFound android/graphics/drawable/Icon
我使用的是支持库27.0.0,compileSdkVersion 27,targetSdkVersion 25,buildToolsVersion '26 .0.2',android插件2.3.3,gradle 3.3,Android Studio 3.0。 (我猜这个问题与旧版本的gradle和插件无关?...)
我可以看到ViewStructure用在支持库中:
android.support.design.widget.TextInputLayout
android.support.design.testutils.ViewStructureImpl
但是,我在项目的任何地方都没有使用ViewStructure。
Fatal Exception: java.lang.NoClassDefFoundError: android/view/ViewStructure
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:855)
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)
Caused by java.lang.ClassNotFoundException: Didn't find class "android.view.ViewStructure" on path: DexPathList[[zip file "/data/app/package.name-1.apk"],nativeLibraryDirectories=[/data/app-lib/package.name-1, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
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:855)
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)
答案 0 :(得分:5)
此问题的最可能原因是用户不是普通用户,因为只有在连接了hierarchyviewer / ddm时才会出现这种情况。"
可在此处找到更多信息:
答案 1 :(得分:0)
我正在从25.3.1迁移到支持lib 27.1.1的过程中(是的,人们不会在这里移动得太快......)并且在充气时也面临同样的崩溃{{1 }}第
经过一番调查后发现我们有一个自定义TextInputLayout
,它遍历完整的View Hierarchy并在Guice的每个View中注入依赖关系(使用LayoutInflater
)(可能会影响匕首)以及)。这是必需的,因为我们有自定义视图,它具有通过injectMembers(View)
注入的依赖项。
由于Guice遍历该类并尝试在解析依赖关系时访问它的公共方法,因此它会遇到例如@Inject
,导致崩溃,因为TextInputLayout.dispatchProvideAutofillStructure(ViewStructure, int)
不可用在运行的设备上< API 23。
所以这是一个关于导致问题的原因的示例,我们还没有一个好的解决方案,但可能我们要么在自定义视图中删除注入,要么我们注释这些视图以便只注入这些视图遍历视图树时。