java.lang.NoClassDefFoundError:运行Espresso测试时的android.databinding.DataBinderMapperImpl

mak*_*tar 9 data-binding android kotlin android-espresso

数据绑定设置:

apply plugin: 'kotlin-kapt'

android {
    dataBinding {
        enabled = true
    }
}

dependencies {
    kapt "com.android.databinding:compiler:3.1.0"
}
Run Code Online (Sandbox Code Playgroud)

使用数据绑定的fragment类:

class LandingFragment : Fragment(), Injectable {

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

每次为此片段运行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)
...
Run Code Online (Sandbox Code Playgroud)

Raf*_*edo 7

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

kaptAndroidTest 'androidx.databinding:databinding-compiler:3.3.2'
Run Code Online (Sandbox Code Playgroud)

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


DAI*_*RAV -2

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

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
Run Code Online (Sandbox Code Playgroud)

  • 我使用 kapt 注释处理器(你可以从我的 Gradle 配置中看到它)。为什么需要第三方注释处理器? (2认同)