java.lang.NoClassDefFoundError:运行Espresso测试时的android.数据绑定. DataBinderMapperImpl

vptzau2j  于 2023-02-14  发布在  Android
关注(0)|答案(6)|浏览(171)

数据绑定设置:

apply plugin: 'kotlin-kapt'

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:3.1.0"
}

使用数据绑定的片段类:

class LandingFragment : Fragment(), Injectable {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                          savedInstanceState: Bundle?): View? {
        val dataBinding = LandingFragmentBinding.inflate(inflater, container, false)
        return dataBinding.root
    }
}

每次为这个片段运行Espresso测试时,我都会遇到以下异常:

java.lang.NoClassDefFoundError: android.databinding.DataBinderMapperImpl
at android.databinding.DataBindingUtil.<clinit>(DataBindingUtil.java:32)
at com.sc.databinding.LandingFragmentBinding.inflate(LandingFragmentBinding.java:42)
at com.sc.ui.landing.LandingFragment.onCreateView(LandingFragment.kt:32)
...
iovurdzv

iovurdzv1#

虽然有点晚,但我通过添加DataBinding编译器和kapt作为测试依赖项解决了这个问题:

kaptAndroidTest 'androidx.databinding:databinding-compiler:3.3.2'

或者如果您的项目尚未使用Jetpack,则使用非AndroidX版本。

fnx2tebb

fnx2tebb2#

kaptTest "androidx.databinding:databinding-compiler:+"

到所有模块的build.gradle文件上的dependencies

slhcrj9b

slhcrj9b3#

我遇到了这个错误。我做了两件事:1.在gradle中添加了kaptAndroidTest“androidx.databinding:databinding-compiler:3.5.1”2.使用了数据绑定,也就是说,我创建了一个伪bool变量,并将其真实的注入到视图中。看起来您不能只使用数据绑定来检索视图,而不是发出可怕的findViewById。您必须在模块中至少使用一次它。一旦使用它,您就可以在模块中使用所有其他类。

iqjalb3h

iqjalb3h4#

我也有同样的问题,通过添加得到了解决

kapt {
    generateStubs = true
}

在build.gradle应用程序中(如果使用dataBinding,则为所有模块)

apply plugin: 'kotlin-kapt'

android {
...
    dataBinding {
        enabled = true
    }
}

kapt {
    generateStubs = true
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    ...
    implementation "androidx.core:core-ktx:+"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    kapt "com.android.databinding:compiler:$android_plugin_version"

}

在build.gradle项目中

buildscript {
    ext.kotlin_version = '1.3.70'
    ext.android_plugin_version = '3.5.2'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath "com.android.tools.build:gradle:$android_plugin_version"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}
cs7cruho

cs7cruho5#

dataBinding = true添加到您的build.gradle文件中的android { },一切都会好起来,希望这对您有所帮助。
build.gradle:

android {

    // skip ..

    buildFeatures {
        //noinspection DataBindingWithoutKapt
        dataBinding = true
        viewBinding true
    }

    // skip ..
}
y0u0uwnf

y0u0uwnf6#

尝试按照this stackoverflow添加android-apt插件答案:

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

相关问题