迁移到androidx之后:在路径:DexPathList上找不到类“ androidx.constraintlayout.ConstraintLayout”

时间:2019-02-19 02:11:36

标签: android androidx android-constraintlayout

我已经搜索了问题的答案,如该问题的标题所示,并找到了Error inflating class androidx.constraintlayout.ConstraintLayout after migration to androidx,它与Migrating to AndroidX中提供的正式迁移说明一致。我将信息视为要求我将android.support.constraint.ConstraintLayout更改为androidx.constraintlayout.widget.ConstraintLayout,但这对我不起作用。

我没有找到有关放入gradle文件中的依赖项的任何信息,所以我尝试了一下(这是黑暗中的镜头):

    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

这是可以接受的,但是当我尝试时:

    implementation 'androidx.constraintlayout.widget:constraintlayout:1.1.3'

我得到 错误:无法解决:androidx.constraintlayout.widget:constraintlayout:1.1.3 ,所以我使用了以前的实现指令。

这是我的XML文件:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    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"
    tools:context="com.example.jbiss.petminder.activities.MainActivity">

<!--<android.support.v7.widget.Toolbar-->
<androidx.appcompat.widget.Toolbar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/colorPrimaryDark"
    android:elevation="4dp"
    app:layout_constraintTop_toTopOf="parent"
    app:popupTheme="@style/AppTheme.PopupOverlay"/>

<TextView
    android:id="@+id/tvMsg"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="8dp"
    android:accessibilityLiveRegion="assertive"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.502"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/my_toolbar"
    tools:text="error message goes here"/>

<TextView
    android:id="@+id/tvEmVet"
    android:layout_width="wrap_content"
    android:layout_height="44dp"
    android:layout_marginBottom="8dp"
    android:layout_marginStart="20dp"
    android:layout_marginTop="8dp"
    android:text="@string/emergency_vet"
    android:textColor="@android:color/holo_red_dark"
    android:textSize="24sp"
    app:layout_constraintStart_toEndOf="@+id/phoneCallEmVet"
    app:layout_constraintTop_toBottomOf="@+id/recyclerview1"
    tools:textSize="24sp"/>

<ImageView
    android:id="@+id/phoneCallEmVet"
    android:layout_width="37dp"
    android:layout_height="44dp"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="24dp"
    android:layout_marginTop="8dp"
    android:onClick="callEmVet"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/recyclerview1"
    app:srcCompat="@android:drawable/sym_action_call"/>

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerview1"
    android:layout_width="368dp"
    android:layout_height="365dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:text="@string/pet_name"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/my_toolbar"/>
</androidx.constraintlayout.widget.ConstraintLayout>

运行我的应用程序会产生以下错误:

2019-02-18 19:43:36.031 458-458/com.example.jbiss.petminder E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.jbiss.petminder, PID: 458
android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.constraint.ConstraintLayout
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.constraint.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.example.jbiss.petminder-i-ubC_oLu_y7-aFpiqALqg==/base.apk", zip file "/data/app/com.example.jbiss

由于某些原因,遵循信息无效。迁移过程很艰难,但是我已经清理了很多问题,现在看来我已经完成了预期的工作,所以现在找不到原因。

3 个答案:

答案 0 :(得分:2)

我解决了我的问题。我发现Androidx迁移比我最初想象的要复杂得多。知道我已经更新了初始屏幕中使用的XML文件中ConstraintLayout元素的标签,因此我使用Windows GREP在整个项目中搜索“ android.support.constraint.ConstraintLayout ”。瞧,我发现了丢失的实例,因此我将XML文件引用更新为“ androidx.constraintlayout.widget.ConstraintLayout ”。

这使我的项目得以成功构建并在模拟器上启动。但是,在尝试访问另一个屏幕后,出现了与我最初的帖子中所示相同的错误,但出现了AppBarLayout。因此,我必须像处理ConstraintLayout一样进行此操作,然后再进行其他操作。

如果您要迁移,请准备比预期多的工作!

答案 1 :(得分:2)

迁移到androidX后,我遇到了同样的问题。尝试以上解决方案。但是,它没有用。我在项目级应用程序gradle中添加了mavenCentral()。

 repositories {
            jcenter()
            maven { url 'https://maven.google.com' }
            mavenCentral()
     }

进行以下更改

dependencies  {
    implementation 'com.google.android.material:material:1.0.0'
    implementation "androidx.constraintlayout:constraintlayout:1.1.3"
}

使用“ androidx.constraintlayout.widget.ConstraintLayout”

更新了“ android.support.constraint.ConstraintLayout” xml标签

最终成功了。

答案 2 :(得分:0)

如果像我一样使用“迁移到Androidx”工具后在Android Studio 3.6.3上遇到此问题,这对我有用:

我在布局XML文件中使用的是androidx.constraintlayout.ConstraintLayout,而不是androidx.constraintlayout.widget.ConstraintLayout

区别是在ConstraintLayout之前有一个小部件。我的应用程序级别build.gradle中的依赖项为:

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

当时的最新消息。