Androidx和数据绑定

14
我正在将我的Android P测试的依赖项迁移到androidx依赖项。由于某些不太清楚的原因,我的项目无法编译(不,我不会提供细节以避免出现不同的问题)。我通过gradlew dependencies发现数据绑定使用了“旧版”依赖关系android.arch.lifecycle:runtime:1.0.3,而不是androidx.lifecycle:lifecycle-runtime:2.0.0-beta01。我猜这可能是一个原因。
请问如何强制使用新的包名称/依赖项呢?

2
你的 gradle.properties 文件中是否设置了 android.enableJetifier=trueandroid.useAndroidX=true - CommonsWare
@CommonsWare 没有,我没有使用那些标志。然而,设置这些标志并不会改变依赖关系 :/ - rekire
@CommonsWare 让 android.enableJetifier=true 不是真正的解决方案。这会增加构建时间。在最坏的情况下,每次构建时RAM使用量会暴增(我自己见过它多使用500mb)。相反,最好手动将每个库迁移到androidx。这也可以增强您对代码的信心。 - Pradeep Singh
6个回答

6
我曾经遇到过类似的问题,Data Binding库使用了支持库,某些类可能会与AndroidX冲突。目前我不得不先移除DataBinding
我刚刚读了这篇发布说明,它说这个问题已经被修复了,但我没有看到效果。

发布说明显示:“数据绑定库未更新为androidx”,我不确定如何理解它:D - Karol Kulbaka
我仍然遇到一些支持库的错误,比如android.support.v4.widget不存在。有解决方法吗? - Swapnil
@Swapnil,请发布你的代码,我会和你一起寻找解决方案。 - Dennis Lee

6

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

android.useAndroidX=true
android.enableJetifier=true

查看https://developer.android.com/jetpack/androidx#using_androidx

android.useAndroidX: 当设置为true时,Android插件将使用适当的AndroidX库而不是Support Library。如果未指定,则该标志默认为false。
android.enableJetifier: 当设置为true时,Android插件会通过重写二进制文件自动迁移现有的第三方库以使用AndroidX。如果未指定,则该标志默认为false。


4
检查布局文件,可能有一些视图仍在使用支持库而不是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">

2
我在网络连接较弱的情况下尝试更新Android Studio 3.2,结果失败了。这是我的错误。在升级过程中(解压缩花费了将近一个小时,不知道为什么),我还被要求升级构建工具到com.android.tools.build:gradle:3.2.0-beta04(或者是与你的Android Studio版本匹配的最新版本,但不建议安装3.3.0-alpha03),并将Gradle Wrapper升级到4.6。
现在依赖项已经消失,我很高兴。

2

1- Add this line into build.gradle

android {

    dataBinding {
        enabled = true
    }

}

2- gradle.properties(Project Properties)

android.databinding.enableV2=true

1
请注意,自Android Studio 3.2.0版本开始,本答案已不再适用。有关最新的安装说明,请参阅Android开发者网站上的“入门”页面:https://developer.android.com/topic/libraries/data-binding/start。 - Grease

1
在我的情况下,错误是因为迁移到AndroidX的工具并不完美。仍然有一些布局文件使用了一些旧的支持库。修复这些文件后,一切都顺利了 =)
为了解决问题,我将那些布局文件中使用的每个支持库都更改为正确的支持库,按照此链接进行操作:https://developer.android.com/jetpack/androidx/migrate

1
哪些 XML 文件出了问题,你是如何修复它们的?如果你能提供这些类型的信息,那么你的回答将会更有价值。 - GMB
@GMB,是布局文件的问题。我刚刚编辑了我的答案,以提供更多细节。 - Gabriel Guedes
你和@Ahmad-Aghazadeh的答案都是正确的,只是需要去查找那些引用! - anthropic android

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