迁移到androidx后出现类膨胀错误

11
我进行了Androidx迁移,但在迁移后,我遇到了以下错误:
 Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
 Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout

我研究了所有的资源并迁移到了Androidx,但是仍然有很多问题。 有人可以帮助我吗? 下面我将发布代码部分。
--------- 崩溃开始 ---------
2019-01-23 09:47:34.171 17578-17578/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ir.bijac.com.bijac, PID: 17578
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ir.bijac.com.bijac/ir.bijac.com.bijac.TestActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
     Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.design.widget.CoordinatorLayout
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
        at android.view.LayoutInflater.createView(LayoutInflater.java:645)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787)
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:964)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:518)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at ir.bijac.com.bijac.BaseActivity.onCreate(BaseActivity.java:43)
        at ir.bijac.com.bijac.TestActivity.onCreate(TestActivity.java:22)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/coreui/R$attr;
        at android.support.design.widget.CoordinatorLayout.<init>(CoordinatorLayout.java:202)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:430) 
        at android.view.LayoutInflater.createView(LayoutInflater.java:645) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787) 
        at android.view.LayoutInflater.parseInclude(LayoutInflater.java:964) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:854) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:821) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:518) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:426) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
        at ir.bijac.com.bijac.BaseActivity.onCreate(BaseActivity.java:43) 
        at ir.bijac.com.bijac.TestActivity.onCreate(TestActivity.java:22) 
        at android.app.Activity.performCreate(Activity.java:6679) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:7762019-01-23 09:47:34.171 17578-17578/? E/AndroidRuntime: Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.coreui.R$attr" on path: DexPathList[[zip file "/data/app/ir.bijac.com.bijac-2/base.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_dependencies_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_0_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_1_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_2_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_3_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_4_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_5_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_6_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_7_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_8_apk.apk", zip file "/data/app/ir.bijac.com.bijac-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/ir.bijac.com.bijac-2/lib/x86, /system/lib, /vendor/lib]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
            ... 27 more

构建Gradle:

apply plugin: 'com.android.application'
repositories {
    mavenCentral()
}

android {
    useLibrary 'org.apache.http.legacy'
    compileSdkVersion 28
    defaultConfig {
        applicationId "ir.bijac.com.bijac"
        minSdkVersion 18
        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.2'
    implementation 'com.google.android.material:material:1.1.0-alpha02'
    implementation 'androidx.legacy:legacy-support-core-utils:1.0.0'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.recyclerview:recyclerview:1.0.0'
    implementation 'androidx.test.espresso:espresso-core:3.1.1'
    androidTestImplementation 'androidx.test:runner:1.1.1'
    androidTestUtil 'androidx.test:orchestrator:1.1.1'
    configurations.all { resolutionStrategy.force 'com.android.support:support-v4:28.0.0' }
    implementation 'com.theartofdev.edmodo:android-image-cropper:2.8.0'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    implementation 'com.nineoldandroids:library:2.4.0'
    implementation 'com.daimajia.slider:library:1.1.5@aar'
    implementation "cz.msebera.android:httpclient:4.4.1.2"
    implementation 'org.apache.httpcomponents:httpcore:4.4.10'
    implementation 'com.androidadvance:topsnackbar:1.1.1'
    implementation 'co.ronash.android:pushe-base:1.4.1'
    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
    implementation 'com.google.android.gms:play-services-location:16.0.0'
    implementation('com.crashlytics.sdk.android:crashlytics:2.9.4@aar') {
        transitive = true;
    }

}

--------- 主活动界面.xml ---------

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start"
    >

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

只需转到重构->迁移到AndroidX,这将检查是否存在未处理的任何资源,如果没有,则只需删除根项目中的 .idea 文件夹并重新开始,应该可以正常工作。 - vikas kumar
1
谢谢你的答复,但我已经尝试了 refactor->migrate to androidx 并且做出了相应的更改。 - hassan abbasi
你尝试过删除 .idea 文件夹以清除旧缓存吗? - vikas kumar
对我没用。 - hassan abbasi
8个回答

9

您可能在一些xml布局文件中有一个对 android.support.design.widget.CoordinatorLayout 的引用。

按下 CTRL + SHIFT + F 或转到 Edit/Find/Find in Path 并搜索 android.support.design.widget.CoordinatorLayout,将其替换为 androidx.coordinatorlayout.widget.CoordinatorLayout

您可以使用 CTRL + SHIFT + REdit/Find/Replace in Path 替换所有匹配项。


6
在XML文件中,替换


androidx.appcompat.widget.RecyclerView

使用:

androidx.recyclerview.widget.RecyclerView

1

看起来应用程序正在尝试从支持库中膨胀 android.support.design.widget.CoordinatorLayout,而不是 androidx 库。尝试做以下事情并检查是否有效。

  • 进行 clean and build 操作。
  • 尝试 Invalidate Cache and Restart

还要确保您没有在任何其他地方使用来自支持库的 coordinator layout。


谢谢你的回答,但我测试了两种方法,都不适用于我。 - hassan abbasi
请确保您在任何其他XML文件中没有使用来自支持库的CoordinatorLayout。 - karan
我确定没有使用支持库中的CoordinatorLayout的其他XML。 - hassan abbasi

1

请确保在您的活动和片段中,导入部分没有引用旧的支持库。请确保所有布局也不使用旧的支持小部件。


0

0

编辑 --> 查找 --> 在路径中查找 全部替换以下内容

  • android.support.v7.widget.CardView --> androidx.cardview.widget.CardView

  • android.support.design.widget.TextInputLayout --> com.google.android.material.textfield.TextInputLayout

  • android.support.v4.widget.NestedScrollView --> androidx.core.widget.NestedScrollView

  • android.support.v4.view.ViewPager --> androidx.viewpager.widget.ViewPager

  • androidx.constraintlayout.ConstraintLayout --> androidx.constraintlayout.widget.ConstraintLayout

  • androidx.core.view.ViewPager --> androidx.viewpager.widget.ViewPager

  • androidx.core.widget.SwipeRefreshLayout --> androidx.swiperefreshlayout.widget.SwipeRefreshLayout

  • android.support.design.widget.AppBarLayout --> com.google.android.material.appbar.AppBarLayout

  • android.support.design.widget.CollapsingToolbarLayout --> com.google.android.material.appbar.CollapsingToolbarLayout

  • android.support.v7.widget.Toolbar --> androidx.appcompat.widget.Toolbar


0
只需转到XML文件(在`res/layout`中)并替换即可。
androidx.appcompat.widget.RecyclerView

与之:
androidx.recyclerview.widget.RecyclerView

0

1
谢谢回答,但我已经在gradle.properties文件中添加了这两行。 - hassan abbasi
@hassanabbasi,你试过1.清除缓存并重启2.清理和重新构建项目吗? - Jay Dangar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接