Jak rozwiązać problem NoClassDefFoundError: Nieudane rozwiązanie problemu: Landroid / view / View $ OnUnhandledKeyEventListener;

92

Zaktualizowałem moje Android Studio do

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

Tworzę nowy projekt przy użyciu szablonu pustego działania

Sync Gradle
Clean
Build
Run

mój logcat aplikacji pokazuje ten wyjątek podczas uruchamiania

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]]

Nie wprowadziłem żadnych zmian w aplikacji szablonu wygenerowanej przez Android Studio.

Dlaczego aplikacja do generowania szablonów nie uruchamia się poprawnie?

Próbowałem przejść na androidX, jednak problem pozostaje dokładnie taki sam.

Dlaczego Android Studio nie może wygenerować „czystej” aplikacji szablonowej?

Moje pliki gradle przypominają to: -

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'
}
Zabijaka
źródło

Odpowiedzi:

45

Czasami po aktualizacji musisz unieważnić i wyczyścić pamięć podręczną.

wprowadź opis obrazu tutaj

W 3.2 są znane problemy, więc upewnij się, że nie korzystasz z narzędzi Kotlin. Org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.70

ponieważ powoduje to również problemy z zamrażaniem. Jeśli to nie zadziała, usuń linie wtyczek Google i obsługuj biblioteki, zsynchronizuj i dodaj je ponownie i zsynchronizuj. Czasami katalogi pamięci podręcznej po prostu się psują.

Sam
źródło
2
super, cieszę się, że ci pomogło. Wiele razy uratowało mi to tyłek;)
Sam
8
Nic nie pomaga. Próbuję z Invalidate Caches / Restart. Z Kotlinem i bez niego. Mam Android Studio 3.2.1.
Bobert
Cześć @Bobert, to nie ty zadałeś to pytanie, więc nie mam pojęcia, jaka jest twoja sytuacja. Opublikuj pytanie dotyczące scenariusza, wersji, zestawów narzędzi i błędu, a jeśli napotkam problem, z przyjemnością spróbuję pomóc.
Sam
1
Cześć @Sam, to dokładnie ten sam problem. Tworzę nowy projekt i zaczynam nowy projekt i staję się tymi samymi informacjami o LogCacie. Ale używam Android Studio 3.2.1 Build # AI-181.5540.7.32.5056338, zbudowanego 9 października 2018 JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-bitowa maszyna wirtualna serwera firmy JetBrains sro Windows 7 6.1
Bobert
2
Znalazłem problem ode mnie issuetracker.google.com/117685087 popełnia ten sam błąd
Bobert
12

jeśli używasz Androida x, spróbuj tego (dodaj ten segment kodu do pliku Gradle na poziomie aplikacji)

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

jeśli nie używasz Androida x, wypróbuj ten segment kodu.

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    def requested = details.requested
    if (requested.group == "com.android.support") {
        if (!requested.name.startsWith("multidex")) {
            details.useVersion "26.+"
        }
    }
}}
ishara weerasekara
źródło
Dzięki, ale nie zadziałało :-( - Android Studio 3.5.3, kompilacja # AI-191.8026.42.35.6010548, zbudowana 15 listopada 2019 r., JRE: 1.8.0_202-release-1483-b49-5587405 amd64 , JVM: 64-bitowa maszyna wirtualna serwera OpenJDK firmy JetBrains sro, Linux 4.15.0-74-generic
legolas108
1
@ legolas108, zanim zbudujesz aplikację, unieważnij pamięć podręczną / uruchom ponownie IDE, a następnie wyczyść projekt i odbuduj plik APK aplikacji. U mnie to zadziałało.
ishara weerasekara
1
to pomogło, nowy projekt pustego działania bez modyfikacji teraz uruchamia się bez tego błędu po wykonaniu dodatkowych instrukcji. Dzięki wielkie!
legolas108
Jestem na Kotlinie i moim targetSdk: 29i to nie działa dla mnie.
Anbuselvan Rocky
@Anbuselvan Rocky Myślę, że ten artykuł będzie pomocny dla ciebie discuss.kotlinlang.org/t/kotlin-dependencies-in-gradle-projects/...
Ishara weerasekara
8

Masz podobny problem z zależnościami androidx, jak na przykład

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;

Rozwiązanie rozwiązane przez dodanie konfiguracji w plikach Gradle, jak poniżej

configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "androidx.appcompat") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "1.+"
            }
        }
    }
}
Krishna V
źródło
dla mnie też zadziałało Android Studio 4.0.1
AllanRibas
Pracował nad AS 4.1. Dla innych noobów dodałem to do build.gradle modułu (tego w folderze aplikacji).
Lodovik
3

Rozwiązałem podobny problem, wklejając to na dole mojego pliku 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

Rag King
źródło
15
Czy możesz wyjaśnić, co to robi?
Dan Loewenherz
1
wymusza to na bibliotekach zależności androidx / appcompat, aby kierowały się na określony poziom środowiska wykonawczego SDK.
ShellDude
co nie działa, BTW. zobacz tutaj: stackoverflow.com/questions/51782548/ ...
ShellDude
3

Ten błąd może być wabikiem. W moim przypadku rzeczywistym błędem okazał się plikResources$NotFoundException gdzieś w stosie śledzenia. Kiedy zastąpiła <androidx.appcompat.widget.AppCompatImageViewz ImageViewDostałem czytelny błąd, który następnie był łatwy do rozwiązania.

Cristan
źródło
3

Mój problem polegał na braku importu androidx w pliku build.gradle dla jednego z elementów widoku w układzie, który był nadmuchiwany. Dodanie implementation 'androidx.drawerlayout:drawerlayout:1.0.0 'rozwiązało mój konkretny problem. Wyobrażam sobie, że istnieje widok androidx, który znajduje się w układzie twojego głównego działania, który nie jest importowany. Wszystkie różne pakiety i wersje znajdują się pod adresem https://maven.google.com/web/index.html , po prostu znajdź brakujący element i dodaj go do zależności w pliku build.gradle swojego modułu.

rjferguson
źródło
2

Rozwiązałem podobny problem

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"

Dodawanie zależności w build.gradle (poziom aplikacji)

implementation 'androidx.core:core:1.5.0-alpha04'
Shomu
źródło
1

Z tym samym wyjątkiem walczyłem, ale tylko podczas testowania aplikacji na prawdziwym urządzeniu (Samsung Galaxy S9). Ta sama aplikacja działała dobrze na urządzeniach wirtualnych. Ponieważ zmiana konfiguracji build.gradle nie została rozwiązana, obejrzałem ten problem, przenosząc moją główną aktywność z AppCompatActivity do Activity. Brzmi jak obniżenie poziomu Twojej aktywności, ale jeśli nie korzystasz z zaawansowanych funkcji aktywności - Zobacz to ( https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity ) - to nie jest prawdziwy problem.

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

public class MainActivity /*extends AppCompatActivity*/ extends Activity
Pascal Chardon
źródło