【问题标题】:Crash with java.lang.NoClassDefFoundError after migrating to AndroidX迁移到 AndroidX 后出现 java.lang.NoClassDefFoundError 崩溃
【发布时间】:2019-10-19 23:12:43
【问题描述】:

我正在尝试编译和运行一个为旧 Android 版本编写的演示应用程序。

我已更新所有文件以使用新的 androidx 库。这包括 gradle.build 清单和布局文件。 它编译正确,但在setContentView(R.layout.activity_main);上的主要活动上崩溃了

通过查看堆栈跟踪,我可以推断出它与 layout.xml 文件有关,因为应用程序在第一次设置时会崩溃。 但是在将 FloatingActionButton 从旧的设计库迁移到新的设计库后,我找不到布局文件的任何问题。

有什么想法吗?

堆栈:

I/zygote: 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;
        at void androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener(android.view.View, androidx.core.view.OnApplyWindowInsetsListener) (ViewCompat.java:2423)
        at android.view.ViewGroup androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor() (AppCompatDelegateImpl.java:750)
        at void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:630)
        at void androidx.appcompat.app.AppCompatDelegateImpl.setContentView(int) (AppCompatDelegateImpl.java:529)
        at void androidx.appcompat.app.AppCompatActivity.setContentView(int) (AppCompatActivity.java:161)
        at void com.example.android.emojify.MainActivity.onCreate(android.os.Bundle) (MainActivity.java:75)
        at void android.app.Activity.performCreate(android.os.Bundle) (Activity.java:6975)
        at void android.app.Instrumentation.callActivityOnCreate(android.app.Activity, android.os.Bundle) (Instrumentation.java:1213)
        at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2770)
        at void android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:2892)
I/zygote:     at void android.app.ActivityThread.-wrap11(android.app.ActivityThread, android.app.ActivityThread$ActivityClientRecord, android.content.Intent, java.lang.String) (ActivityThread.java:-1)
        at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1593)
I/zygote:     at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:105)
        at void android.os.Looper.loop() (Looper.java:164)
        at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6541)
        at java.lang.Object 

build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.android.emojify"
        minSdkVersion 26
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation 'com.google.android.material:material:1.1.0-alpha07'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'com.google.android.gms:play-services-vision:17.0.2'
    implementation 'com.jakewharton:butterknife:10.1.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'
    implementation 'com.jakewharton.timber:timber:4.7.1'
    testImplementation 'junit:junit:4.12'
}

和布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.android.emojify.MainActivity">

    <ImageView
        android:id="@+id/image_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="@dimen/view_margin"
        android:contentDescription="@string/imageview_description"
        android:scaleType="fitStart" />

    <TextView
        android:id="@+id/title_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/emojify_button"
        android:layout_centerHorizontal="true"
        android:layout_margin="@dimen/view_margin"
        android:text="@string/emojify_me"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1" />

    <Button
        android:id="@+id/emojify_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="@string/go"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"/>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/clear_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_clear"
        android:visibility="gone"
        app:backgroundTint="@android:color/white"
        app:fabSize="mini" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/save_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="@dimen/fab_margins"
        android:layout_marginEnd="@dimen/fab_margins"
        android:layout_marginRight="@dimen/fab_margins"
        android:src="@drawable/ic_save"
        android:visibility="gone"
        app:backgroundTint="@android:color/white" />

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:id="@+id/share_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginBottom="@dimen/fab_margins"
        android:layout_marginLeft="@dimen/fab_margins"
        android:layout_marginStart="@dimen/fab_margins"
        android:src="@drawable/ic_share"
        android:visibility="gone"
        app:backgroundTint="@android:color/white" />

</RelativeLayout>

【问题讨论】:

标签: java android


【解决方案1】:

我也遇到了同样的问题,将 build.grade 文件的依赖更新到 androidx.appcompat:appcompat:1.3.0-alpha02 后问题就解决了。

【讨论】:

    【解决方案2】:

    你正在使用材质组件

    com.google.android.material.floatingactionbutton.FloatingActionButton
    

    尝试在你的应用主题中使用材质主题

    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    

    希望这会有所帮助。

    【讨论】:

    【解决方案3】:

    你的测试实现是支持之一,改变

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    

    【讨论】:

    • 你说得对,我错过了这个,但它与错误无关。它仍在崩溃。
    • 所以尝试重做布局。一些组件将导入更改为 ConstraintsLayouts。让 Android Studio 自动完成它们,您将看到变化。您可以复制/粘贴边距和那些常见的东西,但重新放置布局
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多