วิธีการแก้ไข NoClassDefFoundError: Failed resolution of: Landroid / view / View $ OnUnhandledKeyEventListener;


93

ฉันได้อัปเกรด 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'
}

คำตอบ:


45

บางครั้งหลังจากการอัปเกรดคุณจำเป็นต้องยกเลิกการใช้งานและล้างแคช

ป้อนคำอธิบายภาพที่นี่

มีปัญหาที่ทราบบางอย่างใน 3.2 ดังนั้นตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้ Kotlin tools org.jetbrains.kotlin: kotlin-gradle-plugin: 1.2.70

ซึ่งทำให้เกิดปัญหาการค้างเช่นกัน หากไม่ได้ผลให้ลบบรรทัดปลั๊กอิน Google ของคุณและไลบรารีสนับสนุนซิงค์และเพิ่มอีกครั้งและซิงค์ บางครั้งไดเรกทอรีแคชก็หลุดออกจากการตี


2
ยอดเยี่ยมดีใจที่ได้ผลสำหรับคุณ มันช่วยก้นฉันได้หลายครั้งเหมือนกัน;)
แซม

8
ไม่มีอะไรช่วย. ฉันลองด้วย Invalidate Caches / Restart มีและไม่มี Kotlin ฉันมี Android Studio 3.2.1
Bobert

สวัสดี @ Bobert คุณไม่ใช่คนที่ถามคำถามดังนั้นฉันไม่รู้ว่าสถานการณ์ของคุณเป็นอย่างไร โปรดโพสต์คำถามพร้อมสถานการณ์เวอร์ชันชุดเครื่องมือและข้อผิดพลาดของคุณเรายินดีที่จะพยายามช่วยเหลือหากพบปัญหา
แซม

1
สวัสดี @Sam มันเป็นปัญหาเดียวกัน ฉันสร้างโปรเจ็กต์ใหม่และเริ่มโปรเจ็กต์ใหม่นี้และกลายเป็นข้อมูล LogCat เดียวกัน แต่ฉันใช้ Android Studio 3.2.1 Build # AI-181.5540.7.32.5056338 สร้างเมื่อ 9 ตุลาคม 2018 JRE: 1.8.0_152-release-1136-b06 amd64 JVM: OpenJDK 64-Bit Server VM โดย JetBrains sro Windows 7 6.1
Bobert

2
ฉันพบปัญหาจากฉัน Issetracker.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, Build # AI-191.8026.42.35.6010548, สร้างเมื่อ 15 พฤศจิกายน 2019, JRE: 1.8.0_202-release-1483-b49-5587405 amd64 , JVM: OpenJDK 64-Bit Server VM โดย JetBrains sro, Linux 4.15.0-74-generic
legolas108

1
@ legolas108 ก่อนสร้างแอปพลิเคชันให้ยกเลิกการตรวจสอบแคช / รีสตาร์ท IDE จากนั้นล้างโปรเจ็กต์และสร้างแอปพลิเคชัน APK ใหม่ มันได้ผลสำหรับฉัน
ishara weerasekara

1
ซึ่งช่วยได้โครงการกิจกรรมใหม่ที่ว่างเปล่าโดยไม่มีการแก้ไขจะเริ่มต้นขึ้นโดยไม่มีข้อผิดพลาดนี้หลังจากทำตามคำแนะนำเพิ่มเติมของคุณ ขอบคุณมาก!
legolas108

ฉันอยู่ที่ Kotlin targetSdk: 29และมันไม่ได้ผลสำหรับฉัน
Anbuselvan Rocky

@Anbuselvan ร็อคกี้ผมคิดว่าบทความนี้จะเป็นประโยชน์สำหรับคุณdiscuss.kotlinlang.org/t/kotlin-dependencies-in-gradle-projects/...
Ishara weerasekara

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 สำหรับ noobs เพื่อนฉันได้เพิ่มสิ่งนี้ลงในbuild.gradleของโมดูล (อันที่อยู่ในโฟลเดอร์แอพ)
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
มันบังคับให้ libs การพึ่งพา androidx / appcompat กำหนดเป้าหมายระดับรันไทม์ sdk ที่เฉพาะเจาะจง
ShellDude

ซึ่งใช้ไม่ได้ BTW ดูที่นี่: stackoverflow.com/questions/51782548/…
ShellDude

3

ข้อผิดพลาดนี้อาจเป็นตัวล่อ ในกรณีของฉันข้อผิดพลาดจริงกลายเป็นที่Resources$NotFoundExceptionใดที่หนึ่งใน stacktrace เมื่อฉันแทนที่ <androidx.appcompat.widget.AppCompatImageViewด้วยImageViewฉันได้รับข้อผิดพลาดที่อ่านได้ซึ่งง่ายต่อการแก้ไข


3

ปัญหาของฉันไม่มีการนำเข้า androidx ใน build.gradle สำหรับหนึ่งในองค์ประกอบมุมมองในเลย์เอาต์ที่มีการขยาย การเพิ่ม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

ฉันต่อสู้กับข้อยกเว้นเดียวกัน แต่เฉพาะเมื่อทดสอบแอปพลิเคชันของฉันบนอุปกรณ์จริง (Samsung Galaxy S9) แอปพลิเคชันเดียวกันทำงานได้ดีบนอุปกรณ์เสมือน เนื่องจากการเปลี่ยนแปลงการกำหนดค่า build.gradle ไม่ได้รับการแก้ไขฉันจึงแก้ไขปัญหาโดยย้ายกิจกรรมหลักของฉันจาก AppCompatActivity ไปยังกิจกรรม ฉันดูเหมือนจะลดระดับกิจกรรมของคุณ แต่ถ้าคุณไม่ได้ใช้คุณสมบัติกิจกรรมขั้นสูง - ดูสิ่งนี้ ( 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.