Comment résoudre NoClassDefFoundError: Échec de la résolution de: Landroid / view / View $ OnUnhandledKeyEventListener;

92

J'ai mis à niveau mon Android Studio vers

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

Je crée un nouveau projet à l'aide du modèle d'activité vide

Sync Gradle
Clean
Build
Run

mon application logcat affiche cette exception au démarrage

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

Je n'ai apporté aucune modification au modèle d'application généré par Android Studio.

Pourquoi l'application de modèle de génération ne démarre-t-elle pas proprement?

J'ai essayé de migrer vers androidX, mais le problème reste exactement le même.

Pourquoi Android Studio ne peut-il pas générer une application de modèle «propre»?

Mes fichiers gradle ressemblent à ceci: -

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'
}
Hector
la source

Réponses:

45

Parfois, après une mise à niveau, vous devez invalider et vider le cache.

entrez la description de l'image ici

Il y a quelques problèmes connus dans la version 3.2, alors assurez-vous également que vous n'êtes pas sur les outils Kotlin org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.70

car cela provoque également des problèmes de gel. Si cela ne fonctionne pas, supprimez vos lignes de plug-in google et vos bibliothèques de support, synchronisez-les, ajoutez-les à nouveau et synchronisez-les. Parfois, les répertoires de cache se désagrègent.

Sam
la source
2
génial, content que cela a fonctionné pour toi. Cela m'a aussi sauvé les fesses plusieurs fois;)
Sam
8
Rien n'aide. J'essaye avec Invalidate Caches / Restart. Avec et sans Kotlin. J'ai Android Studio 3.2.1.
Bobert
Salut @Bobert, tu n'es pas celui qui a posé la question, donc je n'ai aucune idée de ta situation. Veuillez poster une question avec votre scénario, vos versions, vos ensembles d'outils et votre erreur et je serai heureux d'essayer de vous aider si je vois le problème.
Sam
1
Salut @Sam, c'est exactement le même problème. Je crée un nouveau projet et démarre ce nouveau projet et deviens les mêmes infos LogCat. Mais j'utilise Android Studio 3.2.1 Build # AI-181.5540.7.32.5056338, construit le 9 octobre 2018 JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-Bit Server VM by JetBrains sro Windows 7 6.1
Bobert
2
J'ai trouvé le problème de moi issuetracker.google.com/117685087 il fait la même erreur
Bobert
12

si vous utilisez android x essayez ceci (ajoutez ce segment de code au fichier Gradle au niveau de l'application)

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

si vous n'utilisez pas android x, essayez ce segment de code.

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
la source
Merci, mais cela n'a pas fonctionné pour moi :-( - Android Studio 3.5.3, Build # AI-191.8026.42.35.6010548, construit le 15 novembre 2019, JRE: 1.8.0_202-release-1483-b49-5587405 amd64 , JVM: VM serveur OpenJDK 64 bits par JetBrains sro, Linux 4.15.0-74-generic
legolas108
1
@ legolas108, avant de créer l'application, Invalidate Caches / Restart IDE, puis nettoyez le projet et reconstruisez l'APK de l'application. Cela a fonctionné pour moi.
ishara weerasekara le
1
Cela a aidé, un nouveau projet d'activité vide sans modifications démarre maintenant sans cette erreur après avoir suivi vos instructions supplémentaires. Merci beaucoup!
legolas108
Je suis sur Kotlin et mon targetSdk: 29et ça ne marche pas pour moi.
Anbuselvan Rocky
@Anbuselvan Rocky Je pense que cet article sera utile pour vous discuss.kotlinlang.org/t/kotlin-dependencies-in-gradle-projects/...~~V~~singular~~2nd
ishara weerasekara
8

Vous avez un problème similaire avec les dépendances androidx comme

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;

Résolu en ajoutant des configurations dans les fichiers Gradle comme ci-dessous

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
la source
cela a fonctionné pour moi aussi Android Studio 4.0.1
AllanRibas
A travaillé sur AS 4.1. Pour les autres noobs, j'ai ajouté ceci à build.gradle du module (celui dans le dossier de l'application).
Lodovik
3

J'ai résolu un problème similaire en collant ceci au bas de mon fichier 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

Roi de chiffon
la source
15
Pouvez-vous expliquer ce que cela fait?
Dan Loewenherz
1
cela oblige les bibliothèques de dépendance androidx / appcompat à cibler un niveau d'exécution sdk spécifique.
ShellDude
ce qui ne fonctionne pas, BTW. voir ici: stackoverflow.com/questions/51782548/…
ShellDude
3

Cette erreur peut être un leurre. Dans mon cas, l'erreur réelle s'est avérée être Resources$NotFoundExceptionquelque part dans le stacktrace. Lorsque j'ai remplacé un <androidx.appcompat.widget.AppCompatImageViewpar, ImageViewj'ai eu une erreur lisible qui était alors facile à résoudre.

Cristan
la source
3

Mon problème manquait l'importation androidx dans le build.gradle pour l'un des éléments d'affichage dans la mise en page qui était gonflé. L'ajout a implementation 'androidx.drawerlayout:drawerlayout:1.0.0 'résolu mon problème spécifique. J'imagine qu'il y a une vue androidx qui se trouve dans la mise en page de votre activité principale qui n'est pas importée. Tous les différents packages et versions se trouvent sur https://maven.google.com/web/index.html , recherchez simplement l'élément qui vous manque et ajoutez-le aux dépendances dans build.gradle de votre module.

rjferguson
la source
2

J'ai résolu un problème similaire

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"

Ajouter une dépendance dans build.gradle (au niveau de l'application)

implementation 'androidx.core:core:1.5.0-alpha04'
Shomu
la source
1

J'ai eu du mal avec la même exception mais uniquement lors du test de mon application sur un vrai appareil (Samsung Galaxy S9). La même application fonctionnait bien sur les appareils virtuels. Étant donné que le changement de configuration de build.gradle n'a pas été résolu, j'ai contourné le problème en déplaçant mon activité principale d'AppCompatActivity vers Activity. Cela ressemble à une rétrogradation de votre activité, mais si vous n'utilisez pas les fonctionnalités d'activité avancées - Voir ceci ( https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity ) - ce n'est pas un réel problème.

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

public class MainActivity /*extends AppCompatActivity*/ extends Activity
Pascal Chardon
la source