Androidx 和数据绑定

Androidx and databinding

我正在将 Android P 测试的依赖项迁移到 androidx 依赖项。由于一些不太清楚的原因,我的项目不再编译(不,我不会提供详细信息以避免出现明显的问题)。我发现(通过 gradlew dependencies)数据绑定使用 "oldschool" 依赖项 android.arch.lifecycle:runtime:1.0.3 而不是 androidx.lifecycle:lifecycle-runtime:2.0.0-beta01。我想这可能是原因之一。

知道如何强制使用新包 names/dependencies 吗?

我遇到了类似的问题,Data Binding库使用支持库,一些类可能与AndroidX冲突。我现在必须删除 DataBinding

刚刚看了这个release note,说这个问题已经修复了,但是没看到效果

我在互联网连接较弱时尝试过,所以我跳过更新到 Android Studio 3.2。那是我的错。通过升级(解压缩花了将近一个小时不知道为什么)我还被要求将我的构建工具升级到 com.android.tools.build:gradle:3.2.0-beta04(或者任何与你的 Android Studio 版本匹配的最新版本(我不会安装 3.3.0-alpha03) 并将 gradle 包装器升级到 4.6.

现在依赖没有了,我很高兴。

在我的例子中,错误是因为迁移到 AndroidX 的工具不能完美运行。仍然有一些布局文件使用一些旧的支持库。修复这些文件后,一切顺利 =)

为了解决这些布局文件中使用的每个支持库,我在 link 之后更改为正确的库:https://developer.android.com/jetpack/androidx/migrate

检查布局文件,可能还有使用支持库而不是 androidx 的视图 例如

<android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

改为

<androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

gradle.properties 中启用 AndroidX 为我解决了这个问题:

android.useAndroidX=true
android.enableJetifier=true

参见https://developer.android.com/jetpack/androidx#using_androidx

android.useAndroidX: When set to true, the Android plugin uses the appropriate AndroidX library instead of a Support Library. The flag is false by default if it is not specified.
android.enableJetifier: When set to true, the Android plugin automatically migrates existing third-party libraries to use AndroidX by rewriting their binaries. The flag is false by default if it is not specified.

1- 将此行添加到 build.gradle

android {

    dataBinding {
        enabled = true
    }

}

2- gradle.properties(项目属性)

android.databinding.enableV2=true