【问题标题】:Migration to androidX - can't import/find androidx.databinding.DatabindingUtil迁移到 androidX - 无法导入/找到 androidx.databinding.DatabindingUtil
【发布时间】:2019-02-09 22:15:58
【问题描述】:

我正在开发一个 Android MVVM 应用程序。我只是手动切换到 androidx 库。这是我的 build.gradle 中的库:

implementation 'com.google.code.gson:gson:2.8.5'
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.0.0-rc02'
implementation 'androidx.constraintlayout:constraintlayout:1.1.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0-rc02'
implementation 'com.google.android.material:material:1.0.0-rc01'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
implementation 'com.airbnb.android:lottie:2.5.5'
implementation 'androidx.recyclerview:recyclerview:1.0.0-rc02'
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-livedata:2.0.0-rc01'
implementation 'androidx.lifecycle:lifecycle-runtime:2.0.0-rc01'
implementation "androidx.lifecycle:lifecycle-common-java8:2.0.0-rc01"
implementation "androidx.lifecycle:lifecycle-reactivestreams:2.0.0-rc01"
testImplementation "androidx.arch.core:core-testing:2.0.0-rc01"
implementation "androidx.room:room-runtime:2.0.0-rc01"
annotationProcessor "androidx.room:room-compiler:2.0.0-rc01"
implementation "androidx.room:room-rxjava2:2.0.0-rc01"
implementation 'com.github.bumptech.glide:glide:4.8.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.8.0'

我更改了代码和布局文件中的所有内容,所有导入等。 Gradle 可以成功构建。

在我的 MainActivity 中,我有以下代码:

viewModel = ViewModelProviders.of(this).get(MainViewModel.class);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setVariable(BR.viewModel, viewModel);
binding.setLifecycleOwner(this);

这是我的 MainActivity 中唯一一个不会显示它的 androidx 版本的包:

导入android.databinding.DataBindingUtil;

每个其他包都显示了自己的androidx 版本。当我删除导入时,我只能选择android 版本而不是androidx

我收到一个错误:binding.setLifecycleOwner(this); 这是因为DatabindingUtil 仍然指的是android.databinding 包而不是androidx.databinding 包。我的 Android Studio 告诉我传递给方法 setLifecycleOwner 的参数必须是类型:anndroid.arch.lifecycle.LifecycleOwner

不知道为什么我不能导入androidx.databinding.DatabindingUtil 包。有谁知道我该如何解决这个问题?

我确实尝试过重建缓存并使缓存无效并重新启动。

【问题讨论】:

    标签: android gradle mvvm android-gradle-plugin androidx


    【解决方案1】:

    问题是我试图手动完成。所以我升级到了 Android Studio 3.2 RC 2。 之后我使用了 Android Studio 的迁移功能。

    对于 Android Studio 中的迁移功能,请转到 > 重构 > 迁移到 AndroidX...

    当 Android Studio 之后出现错误时,请尝试 Rebuild 或使用 > File > Invalidate Cache & Restart。

    正如@cchcc 所指出的,不要忘记将此添加到您的gradle.properties

    android.useAndroidX=true
    android.enableJetifier=true
    

    【讨论】:

    • gradle.properties在做Migrate to AndroidX的时候好像会被最近的AS自动更新,所以不需要人工干预。
    • 这让我发疯了,原来项目是从非迁移项目开始的,我们在 gradle 中手动添加了所需的实现内容。添加这个解决了这个问题。
    • @476rick 如果您(或 Android Studio)最终将导入 import android.databinding.DataBindingUtil; 更改为其他内容,您可以添加吗?我收到相同的错误消息,但我找不到命名空间 androidx.databindng... 你最终是否更改了它?
    • @BrunoBieri 正确的导入是:import androidx.databinding.DataBindingUtil;我不记得是 Android Studio 做的还是我手动做的。您可以尝试重建或:使缓存无效/重新启动
    【解决方案2】:

    我错过了

    android {
        dataBinding {
            enabled = true
        }
    }
    

    【讨论】:

    • 哈。我将 ViewBinding 与 Databinding 混淆了。
    【解决方案3】:
    1. 确保您使用的是 Android Studio 3.2 RC 2

    2. gradle.properties文件下面添加2行

      android.useAndroidX=true
      android.enableJetifier=true

    【讨论】:

    • 谢谢,我刚刚通过新的 Android Studio 3.2 RC2 修复了它。重要的是使用 > Refactor > Migrate to AndroidX...
    猜你喜欢
    • 2019-06-27
    • 2019-07-08
    • 2019-11-29
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2019-03-23
    相关资源
    最近更新 更多