"Ошибка получения иерархии представлений: непредвиденная ошибка: пустая иерархия представлений" при запуске Layout Inspector

Я получаю сообщение об ошибке при запуске Layout Inspector: "Ошибка получения иерархии представлений: непредвиденная ошибка: пустая иерархия представлений".

Также в Logcat есть исключение:

12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater I/art: Exception thrown by dispatcher for 0x56555254
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err: java.lang.NoClassDefFoundError: android.graphics.drawable.Icon
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at libcore.reflect.InternalNames.getClass(InternalNames.java:55)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.Class.getDexCacheType(Class.java:479)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.reflect.ArtMethod.getDexCacheType(ArtMethod.java:236)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.reflect.ArtMethod.getParameterTypes(ArtMethod.java:176)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.reflect.Method.getParameterTypes(Method.java:174)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.Class.getDeclaredMethods(Class.java:802)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.getExportedPropertyMethods(ViewDebug.java:1118)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.exportMethods(ViewDebug.java:1209)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:1155)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewProperties(ViewDebug.java:1141)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpView(ViewDebug.java:1058)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:997)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dumpViewHierarchy(ViewDebug.java:992)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.view.ViewDebug.dump(ViewDebug.java:855)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.ddm.DdmHandleViewDebug.dumpHierarchy(DdmHandleViewDebug.java:235)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at android.ddm.DdmHandleViewDebug.handleChunk(DdmHandleViewDebug.java:134)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at org.apache.harmony.dalvik.ddmc.DdmServer.dispatch(DdmServer.java:171)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.graphics.drawable.Icon" on path: DexPathList[[zip file "/data/app/com.tst.nikita.yandextranslater-2/base.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.tst.nikita.yandextranslater-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.tst.nikita.yandextranslater-2/lib/arm, /vendor/lib, /system/lib]]
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at libcore.reflect.InternalNames.getClass(InternalNames.java:53)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:    ... 24 more
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:    Suppressed: java.lang.ClassNotFoundException: android.graphics.drawable.Icon
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.Class.classForName(Native Method)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
12-10 23:46:56.812 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
12-10 23:46:56.822 18833-18840/com.tst.nikita.yandextranslater W/System.err:     at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
12-10 23:46:56.822 18833-18840/com.tst.nikita.yandextranslater W/System.err:        ... 26 more
12-10 23:46:56.822 18833-18840/com.tst.nikita.yandextranslater W/System.err:    Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available

Я использую Android Studio 3.0.1.

Устройство - Samsung Galaxy S4 GT-I9505 с Android 5.0.1.

Из файла манифеста:

compileSdkVersion 26
buildToolsVersion '26.0.3'
minSdkVersion 21
targetSdkVersion 26

1 ответ

Я заметил, что это также может происходить при использовании Bluetooth. Когда я выключил Bluetooth, чтобы мой код прекратил сканирование, я смог нормально захватить View Hierarchy.

Обновить

Проблема исправлена ​​в библиотеке поддержки 27.0.0. Если вы обновляетесь, не забудьте также изменить compileSdkVersion 27.

Что происходит?

В устройствах Samsung с Android 4.4 происходит сбой, когда классы, расширяющие View, определяют методы, которые возвращают или принимают параметры типов, которые не находятся в classpath.

Начиная с версии 25.4.0 библиотеки поддержки AppCompatImageView и AppCompatImageButton некорректно переопределяют метод setImageIcon(Icon). Поскольку класс Icon был представлен в API 23, приложение вылетает на устройствах Samsung с API 19.

Подобная вещь происходит, когда вы пытаетесь переопределить View.onApplyWindowInsets(WindowInsets).

Временное решение

Пока это не было исправлено официально, я создал модифицированную версию appcompat-v7, в которой удалены все следы методов setImageIcon. Это означает, что он не будет зависать на Samsung с 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.

Предупреждение: разбирайте код перед вставкой и всегда соблюдайте осторожность при получении кода из неизвестных источников!

ИЛИ ЖЕ

Плагин 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.

Ниже приведен код для устранения ошибки "Не удалось разрешить: com.android.support:appcompat-v7:27.+ (Ошибка зависимости) "

Найдите корневой файл build.gradle и добавьте репозиторий Google Maven в тег всех проектов.

repositories {
        mavenLocal()
        mavenCentral()
        maven {                                  // <-- Add this
            url 'https://maven.google.com/' 
            name 'Google'
        }
    } 

Лучше использовать конкретную версию вместо переменной версии

скомпилируйте 'com.android.support:appcompat-v7:27.0.0', если вы используете Android Studio 3.0 или более позднюю версию

repositories {
      mavenLocal()
      mavenCentral()
      google()        //---> Add this
} 

и ввести зависимость таким образом:

реализация 'com.android.support:appcompat-v7:27.0.0'

Надеюсь, это поможет вам.

Другие вопросы по тегам