Як вирішити NoClassDefFoundError: Не вдалося вирішити: Landroid / view / View $ OnUnhandledKeyEventListener;


93

Я оновив свою Android Studio до

Android Studio 3.2
Build #AI-181.5540.7.32.5014246, built on September 17, 2018
JRE: 1.8.0_152-release-1136-b06 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Mac OS X 10.11.6

Я створюю новий проект, використовуючи шаблон «Порожня діяльність»

Sync Gradle
Clean
Build
Run

моя програма logcat показує цей виняток під час запуску

2018-09-27 13:51:41.116 22090-22090/? I/zygote64: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.view.ViewCompat$OnUnhandledKeyEventListenerWrapper>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.support.v4.view.ViewCompat.setBackground(android.view.View, android.graphics.drawable.Drawable) (ViewCompat.java:2341)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.support.v7.widget.ActionBarContainer.<init>(android.content.Context, android.util.AttributeSet) (ActionBarContainer.java:62)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at java.lang.Object java.lang.reflect.Constructor.newInstance0(java.lang.Object[]) (Constructor.java:-2)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:334)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.createView(java.lang.String, java.lang.String, android.util.AttributeSet) (LayoutInflater.java:647)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:790)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View, java.lang.String, android.content.Context, android.util.AttributeSet) (LayoutInflater.java:730)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser, android.view.View, android.content.Context, android.util.AttributeSet, boolean) (LayoutInflater.java:863)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser, android.view.View, android.util.AttributeSet, boolean) (LayoutInflater.java:824)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser, android.view.ViewGroup, boolean) (LayoutInflater.java:515)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup, boolean) (LayoutInflater.java:423)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup) (LayoutInflater.java:374)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.view.ViewGroup android.support.v7.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:607)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.support.v7.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:518)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.support.v7.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:466)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.support.v7.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:140)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void com.manacle.secondmanacle.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:11)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.Activity.performCreate(android.os.Bundle, android.os.PersistableBundle) (Activity.java:7009)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:7000)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1214)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2731)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2856)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1589)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.os.Looper.loop() (Looper.java:164)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6494)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:438)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64:     at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:807)
2018-09-27 13:51:41.116 22090-22090/? I/zygote64: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.manacle.secondmanacle-6Ra5peoMwc4HH30iTlEXCg==/base.apk"],nativeLibraryDirectories=[/data/app/com.manacle.secondmanacle-6Ra5peoMwc4HH30iTlEXCg==/lib/arm64, /system/lib64, /vendor/lib64]]

Я не вніс жодних змін у додаток-шаблон, створений Android Studio.

Чому програма створення шаблону не запускається чисто?

Я спробував перейти на androidX, проте проблема залишається абсолютно незмінною.

Чому Android Studio не може генерувати "чистий" шаблон-додаток?

Мої файли gradle мають такий вигляд: -

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'


        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

====

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.manacle.secondmanacle"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}

Відповіді:


45

Іноді після оновлення потрібно вивести з ладу та очистити кеш.

введіть тут опис зображення

У 3.2 є деякі відомі проблеми, тому також переконайтесь, що ви не користуєтеся інструментами Kotlin org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.70

оскільки це також викликає проблеми із заморожуванням. Якщо це не допомогло, видаліть рядки плагінів Google та бібліотеки підтримки, синхронізуйте та додайте їх знову та синхронізуйте. Іноді каталоги кешу просто виходять з ладу.


2
дивовижно, рада, що це спрацювало на вас. Це також рятувало мій приклад кілька разів;)
Сем

8
Нічого не допоможе. Я намагаюся використовувати Invalidate Caches / Restart. З Котліном і без нього. У мене є Android Studio 3.2.1.
Боберт

Привіт @Bobert, ти не той, хто задавав питання, тому я не маю уявлення, яка твоя ситуація. Будь ласка, опублікуйте питання зі своїм сценарієм, версіями, наборами інструментів та помилками, і я радий спробувати допомогти, якщо побачу проблему.
Сем

1
Привіт @Sam, це точно така ж проблема. Я створюю новий проект і починаю цей новий проект і стаю тим самим LogCat. Але я використовую Android Studio 3.2.1 Build # AI-181.5540.7.32.5056338, побудований 9 жовтня 2018 р. JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-Bit Server VM by JetBrains sro Windows 7 6.1
Боберт

2
Я виявив, що випуск від мене Issetracker.google.com/117685087 робить ту саму помилку
Боберт,

12

якщо ви використовуєте android x, спробуйте це (додайте цей сегмент коду до файлу Gradle на рівні програми)

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == "androidx") {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion "${targetSdk}.+"
        }
    }
}}

якщо ви не використовуєте android x, спробуйте цей сегмент коду.

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == "com.android.support") {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion "26.+"
        }
    }
}}

Дякую, але у мене не вийшло :-( - Android Studio 3.5.3, Build # AI-191.8026.42.35.6010548, побудований 15 листопада 2019 р., JRE: 1.8.0_202-release-1483-b49-5587405 amd64 , JVM: OpenJDK 64-бітна серверна віртуальна машина від JetBrains sro, Linux 4.15.0-74-generic
legolas108

1
@ legolas108, перш ніж створювати додаток, анулюйте кеші / перезапустіть IDE, а потім очистіть проект та відновіть APK програми. У мене це спрацювало.
ishara weerasekara

1
що допомогло, новий проект «Порожня діяльність» без змін тепер запускається без цієї помилки, слідуючи вашим додатковим інструкціям. Велике спасибі!
legolas108

Я на Котліні, і у мене targetSdk: 29це не працює.
Анбусельван Рокі

@Anbuselvan Rocky Я думаю, що ця стаття буде корисною для вас обговорити
.kotlinlang.org/t/kotlin-dependencies-in-gradle-

8

Отримав подібну проблему із залежностями androidx, як подібну

Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;

Вирішено шляхом додавання конфігурацій у файли Gradle, як показано нижче

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "androidx.appcompat") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "1.+"
            }
        }
    }
}

це спрацювало і для мене Android Studio 4.0.1
AllanRibas,

Працював над AS 4.1. Для побратимів, я додав це до build.gradle модуля (того, що знаходиться всередині папки програми).
Лодовик

3

Я вирішив подібну проблему, вставивши це внизу мого файлу build.gradle

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "com.android.support") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "26.+"
            }
        }
    }
}

https://github.com/facebook/flipper/issues/146


15
Чи можете ви пояснити, що це робить?
Ден Ловенгерц,

1
це примушує бібліотеки залежностей androidx / appcompat націлюватись на певний рівень виконання sdk.
ShellDude

що не працює, до речі. дивіться тут: stackoverflow.com/questions/51782548 / ...
ShellDude

3

Ця помилка може бути приманкою. У моєму випадку фактична помилка виявилася Resources$NotFoundExceptionдесь у стеці. Коли я замінив <androidx.appcompat.widget.AppCompatImageViewз ImageViewя отримав читану помилку , яка потім було легко вирішити.


3

Моя проблема була відсутністю імпорту androidx у build.gradle для одного з елементів перегляду в макеті, який було завищено. Додавання implementation 'androidx.drawerlayout:drawerlayout:1.0.0 'вирішило мою конкретну проблему. Думаю, є якийсь вигляд androidx, який знаходиться в макеті вашої Основної діяльності, який не імпортується. Усі різні пакети та версії знаходяться на https://maven.google.com/web/index.html , просто знайдіть елемент, якого вам не вистачає, і додайте його до залежностей у build.gradle вашого модуля.


2

Я вирішив подібне питання

Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
 
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener"

Додавання залежності в build.gradle (рівень програми)

implementation 'androidx.core:core:1.5.0-alpha04'

1

Я боровся з тим самим винятком, але лише під час тестування мого додатка на реальному пристрої (Samsung Galaxy S9). Та сама програма працювала нормально на віртуальних пристроях. Оскільки зміна конфігурації build.gradle не вирішена, я вирішив проблему, перемістивши свою основну активність з AppCompatActivity на Activity. Я схоже на зниження вашої активності, але якщо ви не використовуєте розширені функції активності - див. Це ( https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity ) - це не справжня проблема.

//import androidx.appcompat.app.AppCompatActivity;
import android.app.Activity;

public class MainActivity /*extends AppCompatActivity*/ extends Activity
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.