代码之家  ›  专栏  ›  技术社区  ›  Hector

如何解决NoClassDefFoundError:解析失败:Landroid/view/view$OnUnhandledKeyEventListener;

  •  20
  • Hector  · 技术社区  · 7 年前

    我已经把我的Android工作室升级到

    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,但是问题仍然完全相同。

    我的gradle档案this:-

    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'
    }
    
    1 回复  |  直到 7 年前
        1
  •  56
  •   Sam    7 年前

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

    enter image description here

    org.jetbrains公司。kotlin:kotlin-gradle-plugin:1.2.70

    因为这也会导致冻结问题。 如果这不起作用,删除你的谷歌插件行和支持库,同步并再次添加它们和同步。有时缓存目录会出问题。

        2
  •  17
  •   Shomu    5 年前

    我解决了一个类似的问题

    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"
    

    implementation 'androidx.core:core:1.5.0-alpha04'
    
        3
  •  13
  •   Supun Ishara    5 年前

    如果您使用的是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}.+"
            }
        }
    }}
    

    如果您不使用androidx,请尝试以下代码段。

    configurations.all {
    resolutionStrategy.eachDependency { DependencyResolveDetails details ->
        def requested = details.requested
        if (requested.group == "com.android.support") {
            if (!requested.name.startsWith("multidex")) {
                details.useVersion "26.+"
            }
        }
    }}
    
        4
  •  10
  •   Krishna V    5 年前

    对于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.+"
                }
            }
        }
    }
    
        5
  •  8
  •   Amos    4 年前

    gradle 将解决问题,为我工作:

    implementation 'androidx.appcompat:appcompat:1.3.0-alpha02'
    

    请注意1.2.0甚至不起作用

        6
  •  3
  •   Rag King    6 年前

    我在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

        7
  •  3
  •   Cristan    5 年前

    Resources$NotFoundException 在stacktrace的某个地方。当我换了一个 <androidx.appcompat.widget.AppCompatImageView 具有 ImageView 我得到了一个可读的错误,然后很容易解决。

        8
  •  3
  •   rjferguson    5 年前

    我的问题是在build.gradle中缺少对正在膨胀的布局中的一个视图元素的androidx导入。添加 implementation 'androidx.drawerlayout:drawerlayout:1.0.0 ' 修复了我的特定问题。我想在主活动的布局中有一些androidx视图没有导入。所有不同的软件包和版本都在 https://maven.google.com/web/index.html ,只需找到丢失的项并将其添加到模块的build.gradle中的依赖项。

        9
  •  1
  •   Pascal Chardon    5 年前

    我也遇到了同样的问题,但只有在真正的设备(三星Galaxy S9)上测试我的应用程序的时候。同一个应用程序在虚拟设备上运行良好。 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