未能解析:Landroid/databinding/databinding组件
我的项目中有一个kotlin android库模块,我正在尝试使用数据绑定库。我正在使用DataBindingComponent进行一些图像加载。编译时一切正常,生成的DataBindingComponent接口被创建,我可以实现它并将其注入。但是,在运行时,应用程序崩溃:未能解析:Landroid/databinding/databinding组件,android,kotlin,android-databinding,kapt,Android,Kotlin,Android Databinding,Kapt,我的项目中有一个kotlin android库模块,我正在尝试使用数据绑定库。我正在使用DataBindingComponent进行一些图像加载。编译时一切正常,生成的DataBindingComponent接口被创建,我可以实现它并将其注入。但是,在运行时,应用程序崩溃: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/databinding/DataBindingComponent; 通过检查应用程序的apk和库
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)
}
}
使用数据绑定组件
itemRecyclerAdapter.dataBindingComponent = object : DataBindingComponent {
override fun getImageBindingAdapter(): ImageBindingAdapter {
return ImageBindingAdapter({ imageView, url ->
loadImage(imageView, url)
})
}
}
以我的经验,这个问题只不过是转移视线。 我只是花了几天时间试图找出一个类似问题的根本原因 我正在将应用程序转换为库,结果发现,由于android-14,R.java中的常量不再是库的最终值 所以我必须确保在switch语句、注释等中没有使用R.id 很难找到根本原因,因为它被深深地隐藏在数据绑定库的大量错误中,因为大多数注释处理器都坏了 我建议您做的第一件事是增加错误显示限制。 在我的例子中,我有超过2400个项目错误 此Gradle片段保存了一天:
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xmaxerrs" << "10000"
options.compilerArgs << "-Xmaxwarns" << "10000"
}
gradle.projectsevaluate{
tasks.withType(JavaCompile){
options.compilerArgs这很可能是由于主应用程序模块中缺少数据绑定声明造成的:
dataBinding {
enabled = true
}
这很可能是由于主应用程序模块中缺少数据绑定{enabled=true}
造成的。除了添加到库模块中的类之外,您还需要将其添加到库模块中。这改变了错误。我现在在生成的绑定类(从布局文件创建)中获得ClassNotFound@sergejshafarenka你给我指出了正确的方向-我需要在我的依赖链中的每个build.gradle中添加数据绑定的东西-所以我有App->Lib->Lib,数据绑定的东西需要在所有3中进行是的,这是在多模块项目中正确启用数据绑定需要做的事情。