Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未能解析:Landroid/databinding/databinding组件_Android_Kotlin_Android Databinding_Kapt - Fatal编程技术网

未能解析:Landroid/databinding/databinding组件

未能解析: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和库

我的项目中有一个kotlin android库模块,我正在尝试使用数据绑定库。我正在使用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)
    }

}
使用数据绑定组件

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中进行是的,这是在多模块项目中正确启用数据绑定需要做的事情。