我的项目中有一个kotlin android库模块,我正在尝试使用DataBinding库。我正在使用DataBindingComponent来进行一些图像加载。在编译时一切都很好,生成的DataBindingComponent接口已经创建,我可以实现它并将其注入。但是在运行时,应用程序崩溃了:
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBindingComponent;
从检查应用程序的apk和库模块的aar,它看起来不像DataBindingComponent。
一些代码段:
的build.gradle
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
...
android {
...
dataBinding {
enabled = true
}
}
dependencies {
...
kapt "com.android.databinding:compiler:3.1.1"
...
}
ImageBindingAdapter
class ImageBindingAdapter(private val loadImage: (ImageView, String) -> Unit) {
@BindingAdapter("imageUrl")
fun setImageUrl(view: ImageView, imageUrl: String) {
view.loadImageWhenLaidOut(imageUrl, loadImage)
}
}
使用DataBindingComponent
itemRecyclerAdapter.dataBindingComponent = object : DataBindingComponent {
override fun getImageBindingAdapter(): ImageBindingAdapter {
return ImageBindingAdapter({ imageView, url ->
loadImage(imageView, url)
})
}
}
答案 0 :(得分:0)
以我的经验,这个问题只是一个红色的鲱鱼。
我只是花了几天的时间来找出类似问题的根本原因。
我正在将应用程序转换为库,结果发现自android-14起,R.java中的常量不再是库的最终版本。
所以我必须确保在switch语句,注释等中未使用R.id。
很难找到根本原因,因为大多数注释处理器都被破坏,它被隐藏在数据绑定库的大量错误中。
我建议您做的第一件事是增加错误显示限制。 就我而言,该项目有2400多个错误。
这个Gradle片段挽救了这一天:
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "10000"
options.compilerArgs << "-Xmaxwarns" << "10000"
}
答案 1 :(得分:0)