数据绑定设置:
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)
...
答案 0 :(得分:4)
有点晚了,但是我通过添加带有kapt作为测试依赖项的DataBinding编译器解决了这个问题:
kaptAndroidTest 'androidx.databinding:databinding-compiler:3.3.2'
或者如果您的项目尚未使用Jetpack,则不是AndroidX版本。
答案 1 :(得分:1)
添加
kaptTest "androidx.databinding:databinding-compiler:+"
到您所有模块的dependencies
文件上的build.gradle
。
答案 2 :(得分:0)
我遇到了这个错误。我做了两件事: 1.在gradle中添加了kaptAndroidTest'androidx.databinding:databinding-compiler:3.5.1' 2.使用了数据绑定,也就是说,我创建了一个假的bool变量并将其注入视图中。似乎您不能仅使用数据绑定来检索视图,而不能发出可怕的findViewById。您必须在模块中至少使用一次。一旦使用它,您就可以使用模块中的所有其他类。
答案 3 :(得分:0)
我有同样的问题,并通过添加
来解决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"
}
}
答案 4 :(得分:-1)
尝试按照this stackoverflow回答添加android-apt插件:
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'