Cách giải quyết NoClassDefFoundError: Không giải quyết được: Landroid / view / View $ OnUnhandledKeyEventListener;


93

Tôi đã nâng cấp Android Studio của mình lên

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

Tôi tạo một Dự án mới bằng mẫu Hoạt động trống

Sync Gradle
Clean
Build
Run

logcat ứng dụng của tôi hiển thị ngoại lệ này khi khởi động

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

Tôi không thực hiện thay đổi nào đối với ứng dụng mẫu do Android Studio tạo.

Tại sao ứng dụng tạo mẫu không khởi động sạch sẽ?

Tôi đã thử di chuyển sang androidX, tuy nhiên vấn đề vẫn giống hệt nhau.

Tại sao Android Studio không thể tạo ứng dụng mẫu "sạch"?

Các tệp gradle của tôi giống như sau: -

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'
}

Câu trả lời:


45

Đôi khi sau khi nâng cấp, bạn cần vô hiệu hóa và xóa bộ nhớ cache.

nhập mô tả hình ảnh ở đây

Có một số vấn đề đã biết trong 3.2 vì vậy cũng hãy đảm bảo rằng bạn không sử dụng công cụ Kotlin org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.70

vì điều đó cũng gây ra các vấn đề đóng băng. Nếu điều đó không hiệu quả, hãy xóa các dòng plugin của google và các thư viện hỗ trợ, đồng bộ hóa và thêm lại chúng và đồng bộ hóa. Đôi khi các thư mục bộ nhớ cache chỉ thoát ra khỏi sự cố.


2
tuyệt vời, rất vui vì nó có hiệu quả với bạn. Nó cũng đã cứu mông tôi nhiều lần;)
Sam

8
Không có gì giúp đỡ. Tôi thử với Invalidate Caches / Restart. Có và không có Kotlin. Tôi có Android Studio 3.2.1.
Bobert

Xin chào @Bobert, bạn không phải là người đặt câu hỏi, vì vậy tôi không biết tình huống của bạn là gì. Vui lòng đăng câu hỏi với kịch bản, phiên bản, bộ công cụ và lỗi của bạn và tôi rất sẵn lòng thử trợ giúp nếu tôi gặp sự cố.
Sam

1
Xin chào @Sam, nó chính xác là vấn đề. Tôi tạo một projekt mới và bắt đầu dự án mới này và trở thành infos LogCat tương tự. Nhưng tôi sử dụng Android Studio 3.2.1 Build # AI-181.5540.7.32.5056338, được xây dựng vào ngày 9 tháng 10 năm 2018 JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-Bit Server VM của JetBrains sro Windows 7 6.1
Bobert

2
Tôi đã tìm thấy Vấn đề từ tôi Issuetracker.google.com/117685087 nó mắc cùng một lỗi
Bobert

12

nếu bạn đang sử dụng android x, hãy thử điều này (thêm đoạn mã này vào tệp Gradle cấp ứng dụng)

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

nếu bạn không sử dụng android x, hãy thử đoạn mã này.

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

Cảm ơn, nhưng không hiệu quả với tôi :-( - Android Studio 3.5.3, Build # AI-191.8026.42.35.6010548, được xây dựng vào ngày 15 tháng 11 năm 2019, JRE: 1.8.0_202-release-1483-b49-5587405 amd64 , JVM: OpenJDK 64-Bit Server VM của JetBrains sro, Linux 4.15.0-74-generic
legolas108

1
@ legolas108, trước khi bạn tạo ứng dụng, hãy Vô hiệu hóa bộ nhớ cache / Khởi động lại IDE, sau đó dọn dẹp dự án và xây dựng lại APK ứng dụng. Nó đã làm việc cho tôi.
ishara frorasekara

1
điều đó đã hữu ích, một dự án Hoạt động trống mới không có sửa đổi hiện bắt đầu mà không có lỗi này sau khi làm theo hướng dẫn bổ sung của bạn. Cảm ơn nhiều!
legolas108

Tôi đang sử dụng Kotlin và của tôi targetSdk: 29và nó không hiệu quả với tôi.
Anbuselvan Rocky

@Anbuselvan Rocky Tôi nghĩ rằng bài viết này sẽ rất hữu ích cho bạn discuss.kotlinlang.org/t/kotlin-dependencies-in-gradle-projects/...
Ishara weerasekara

8

Gặp sự cố tương tự với các phụ thuộc androidx như

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;

Giải quyết bằng cách thêm cấu hình trong tệp Gradle như bên dưới

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

nó cũng hoạt động với tôi Android Studio 4.0.1
AllanRibas

Làm việc trên AS 4.1. Đối với những người quen thuộc, tôi đã thêm điều này vào build.gradle của mô-đun (mô-đun bên trong thư mục ứng dụng).
Lodovik

3

Tôi đã giải quyết một vấn đề tương tự bằng cách dán vấn đề này vào cuối tệp build.gradle của mình

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
Bạn có thể giải thích điều này đang làm gì?
Dan Loewenherz

1
nó buộc các libs phụ thuộc androidx / appcompat nhắm mục tiêu đến một mức thời gian chạy sdk cụ thể.
ShellDude

mà không hoạt động, BTW. xem ở đây: stackoverflow.com/questions/51782548/…
ShellDude

3

Lỗi này có thể là một mồi nhử. Trong trường hợp của tôi, lỗi thực sự hóa ra là một Resources$NotFoundExceptionnơi nào đó trong stacktrace. Khi tôi thay thế một <androidx.appcompat.widget.AppCompatImageViewbằng ImageViewtôi nhận được một lỗi có thể đọc được, sau đó rất dễ giải quyết.


3

Sự cố của tôi là thiếu nhập androidx trong build.gradle cho một trong các phần tử chế độ xem trong bố cục đang bị thổi phồng. Thêm đã implementation 'androidx.drawerlayout:drawerlayout:1.0.0 'khắc phục sự cố cụ thể của tôi. Tôi tưởng tượng có một số chế độ xem androidx bên trong bố cục Hoạt động chính của bạn không được nhập. Tất cả các gói và phiên bản khác nhau đều có tại https://maven.google.com/web/index.html , chỉ cần tìm mục bạn thiếu và thêm nó vào phần phụ thuộc trong build.gradle của mô-đun của bạn.


2

Tôi đã giải quyết một vấn đề tương tự

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"

Thêm phụ thuộc vào build.gradle (cấp ứng dụng)

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

1

Tôi đã vật lộn với cùng một ngoại lệ nhưng chỉ khi thử nghiệm ứng dụng của mình trên một thiết bị thực (Samsung Galaxy S9). Ứng dụng tương tự đã chạy tốt trên các thiết bị ảo. Vì thay đổi cấu hình build.gradle không được giải quyết, tôi đã khắc phục sự cố bằng cách chuyển hoạt động chính của mình từ AppCompatActivity sang Hoạt động. Tôi nghe có vẻ như đang hạ cấp hoạt động của bạn, nhưng nếu bạn không sử dụng các tính năng hoạt động nâng cao - Hãy xem phần này ( https://developer.android.com/reference/androidx/appcompat/app/AppCompatActivity ) - đó không phải là vấn đề thực sự.

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

public class MainActivity /*extends AppCompatActivity*/ extends Activity
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.