如何解决NoClassDefFoundError:无法解决以下问题:Landroid / view / View $ OnUnhandledKeyEventListener;


92

我已经将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'
}

Answers:


45

有时,升级后,您需要使缓存无效并清除缓存。

在此处输入图片说明

3.2中存在一些已知问题,因此请确保您还没有使用Kotlin工具org.jetbrains.kotlin:kotlin-gradle-plugin:1.2.70

因为这也会导致冻结问题。如果这不起作用,请删除您的Google插件行和支持库,进行同步,然后再次添加它们并进行同步。有时,缓存目录会变得异常混乱。


2
很棒,很高兴它为您服务。它也多次保存了我的屁股;)
山姆

8
没什么 我尝试使用无效缓存/重新启动。有无Kotlin。我有Android Studio 3.2.1。
博伯特

@Bobert,您好,您不是问这个问题的人,所以我不知道您的情况如何。请提出有关您的方案,版本,工具集和错误的问题,如果发现问题,我很乐意尝试并提供帮助。
山姆

1
嗨,@ Sam,这是完全一样的问题。我创建了一个新项目,并启动了这个新项目,并成为相同的LogCat信息。但是我使用的是Android Studio 3.2.1 Build#AI-181.5540.7.32.5056338,建于2018年10月9日JRE:1.8.0_152-release-1136-b06 amd64 JVM:JetBrains在Windows 7 6.1上运行OpenJDK 64位服务器VM
博伯特

2
我发现我的问题 Issuetracker.google.com/117685087产生了相同的错误
-Bobert

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,内部版本#AI-191.8026.42.35.6010548,建于2019年11月15日,JRE:1.8.0_202-release-1483-b49-5587405 amd64 ,JVM:JetBrains sro的OpenJDK 64位服务器VM,Linux 4.15.0-74-generic
legolas108

1
@ legolas108,在构建应用程序之前,请使缓存无效/重新启动IDE,然后清理项目并重新构建应用程序APK。它为我工作。
ishara weerasekara

1
有帮助的是,按照其他说明进行操作之后,现在就可以开始运行没有任何修改的新的无活动活动项目,而不会出现此错误。非常感谢!
legolas108

我在Kotlin和我上targetSdk: 29,对我不起作用。
Anbuselvan Rocky

@Anbuselvan Rocky我认为这篇文章对您的讨论
。kotlinlang.org/t/kotlin

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中(在app文件夹中)。
Lodovik

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
您能解释一下这是怎么回事吗?
Dan Loewenherz

1
它迫使androidx / appcompat依赖库定位到特定的sdk运行时级别。
ShellDude

顺便说一句,这不起作用。在这里看到: stackoverflow.com/questions/51782548/...
ShellDude

3

此错误可能是诱饵。在我的情况下,实际错误竟然Resources$NotFoundException是stacktrace中的某个地方。当我将替换为时 <androidx.appcompat.widget.AppCompatImageViewImageView我遇到一个可读错误,因此很容易解决。


3

我的问题是在build.gradle中缺少针对被夸大的布局中的视图元素之一的androidx导入。添加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

我为同样的异常而苦苦挣扎,但只有在真实设备(三星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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.