【问题标题】:Error:Annotation processor '__gen.AnnotationProcessorWrapper_debug_android_databinding_annotationprocessor_ProcessDataBinding' not found错误:未找到注释处理器“__gen.AnnotationProcessorWrapper_debug_android_databinding_annotationprocessor_ProcessDataBinding”
【发布时间】:2017-03-03 18:17:43
【问题描述】:

所以,我正在尝试使用 Kotlin 构建我的 Android 项目并将 Android DataBinding 库添加到其中。在 Android Studio 2.2.3 中没有问题。但是在更新到最新的 Android Studio 版本 (2.3.0) 后,我在尝试运行应用程序时遇到了这个错误。

这是我项目的 build.gradle

buildscript {

    ext.kotlinVersion = '1.1.0'
    ext.androidGradlePluginVersion = '2.3.0'

    ...

    dependencies {
        classpath "com.android.tools.build:gradle:${androidGradlePluginVersion}"

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

...

这是我的 App 的 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"

    ...

    packagingOptions {
        exclude 'META-INF/rxjava.properties'
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
    dataBinding.enabled = true
}

dependencies {

    ...
    compile "com.google.dagger:dagger:${daggerVersion}"
    compile "com.google.dagger:dagger-compiler:${daggerVersion}"
    provided 'javax.annotation:jsr250-api:1.0'
    kapt "com.android.databinding:compiler:$androidGradlePluginVersion"
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion"
}

为了让 Kotlin 能够与 Android DataBinding 库一起使用,我需要更新什么内容吗?请帮忙。提前致谢。

编辑:

根据@Rene 的回答,我尝试将 kotlin-android-extensions 替换为 kotlin-kapt ,但是当我尝试同步 gradle 时又遇到了另一个错误。

这个错误有什么问题吗?谢谢

解决这个问题:

原来我只需要在我的 gradle 中更新一些与 Dagger2 相关的行。我从我的项目的 build.gradle 文件中删除了下面的这一行。

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

并将我应用的build.gradle文件中与Dagger2相关的依赖更新成这样。

compile "com.google.dagger:dagger:${daggerVersion}"
kapt "com.google.dagger:dagger-compiler:${daggerVersion}"
provided 'org.glassfish:javax.annotation:10.0-b28'

我从这个article得到这个设置

这是适合我的 build.gradle 内容。

项目的 build.gradle

buildscript {
    ext.kotlinVersion = '1.1.0'
    ext.androidGradlePluginVersion = '2.3.0'

    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:${androidGradlePluginVersion}"

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

应用的 build.gradle

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    dexOptions {
        maxProcessCount 2
        javaMaxHeapSize "2g"
    }
    defaultConfig {
        applicationId "my.application.id"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        multiDexEnabled true
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/rxjava.properties'
    }
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
    dataBinding.enabled = true
}

kapt {
    generateStubs = true
}

ext {
    supportLibVersion = '25.2.0'
    retrofitVersion = '2.2.0'
    daggerVersion = '2.7'
    googleServiceVersion = '10.2.0'
    rxJavaVersion = '2.0.6'
    rxAndroidVersion = '2.0.1'
    glideVersion = '3.7.0'
    constraintLayoutVersion = '1.0.1'
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'

    compile "com.squareup.retrofit2:retrofit:${retrofitVersion}"
    compile "com.squareup.retrofit2:converter-gson:${retrofitVersion}"
    compile "com.squareup.retrofit2:adapter-rxjava:${retrofitVersion}"
    compile 'com.squareup.okhttp3:logging-interceptor:3.3.0'

    compile "com.android.support:support-compat:${supportLibVersion}"
    compile "com.android.support:support-core-utils:${supportLibVersion}"
    compile "com.android.support:support-core-ui:${supportLibVersion}"

    compile "com.android.support:design:${supportLibVersion}"
    compile "com.android.support:appcompat-v7:${supportLibVersion}"
    compile "com.android.support:recyclerview-v7:${supportLibVersion}"
    compile "com.android.support:cardview-v7:${supportLibVersion}"
    compile "com.android.support.constraint:constraint-layout:${constraintLayoutVersion}"

    compile "com.google.dagger:dagger:${daggerVersion}"
    kapt "com.google.dagger:dagger-compiler:${daggerVersion}"
    provided 'org.glassfish:javax.annotation:10.0-b28'

    compile 'com.android.support:multidex:1.0.1'

    compile('com.mikepenz:fastadapter:1.8.2@aar') {
        transitive = true
    }
    compile 'com.mikepenz:fastadapter-extensions:1.8.0@aar'
    compile 'com.mikepenz:materialize:1.0.0@aar'


    compile "com.google.android.gms:play-services-location:${googleServiceVersion}"
    compile "com.google.android.gms:play-services-maps:${googleServiceVersion}"

    compile "io.reactivex.rxjava2:rxjava:${rxJavaVersion}"
    compile "io.reactivex.rxjava2:rxandroid:${rxAndroidVersion}"

    compile "com.github.bumptech.glide:glide:${glideVersion}"

    kapt "com.android.databinding:compiler:$androidGradlePluginVersion"
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlinVersion"

    compile 'de.hdodenhof:circleimageview:2.1.0'
}

repositories {
    mavenCentral()
}

谢谢。

【问题讨论】:

    标签: android android-studio kotlin dagger-2 android-databinding


    【解决方案1】:

    从 Kotlin 1.1 开始,我不得不切换到更新的 Kotlin 注释处理器。

    像这样应用它:

    apply plugin: 'com.android.application'
    apply plugin: 'kotlin-android'
    apply plugin: 'kotlin-android-extensions'
    apply plugin: 'kotlin-kapt'
    

    我在 kotlin-1-0-6-is-here 的 1.0.6 版本中发现它第一次被提及

    【讨论】:

    • 嗨@Rene 非常感谢您的回答,但在尝试应用您的建议后,我又遇到了另一个错误。你可以在我的帖子上查看更新。谢谢
    • 你可以保留其他插件,比如扩展,kapt 不会替换那个。
    • 嗨@Rene,实际上我在我的项目中也使用了Dagger2,但由于我认为它与问题无关,所以我不在我的问题中写它。但结果是在我的项目中评论了所有与 Dagger2 相关的内容,并且应用程序的级别 build.gradle 解决了这个问题。嗯:/
    【解决方案2】:
    1. 从构建脚本类路径中删除 android-apt 插件。
    2. 在您的依赖配置中使用kapt 而不是apt/annotationProcessor
    3. kapt 'com.android.databinding:compiler:2.3.0' 添加到您的依赖项中,因为带有数据绑定组合的 Kotlin + Android Build Plugin 2.3.0 已损坏。

    我认为发生的事情是 kapt 正在替换注释处理器,而不是使用 annotationProcessor 配置,这是自 2.3.0 以来数据绑定使用而不是 android-apt 插件。

    另请参阅:https://code.google.com/p/android/issues/detail?id=228983


    如果你没有使用 Kotlin:

    1. 从构建脚本类路径中删除 android-apt 插件。
    2. 在您的依赖配置中使用annotationProcessor 而不是apt

    【讨论】:

      【解决方案3】:

      今天升级到 Kotlin 1.1 时遇到了同样的问题。

      通过回滚到 gradle 2.2.3“修复”它

      我的项目中根本没有使用 apt,可能与数据绑定库有关。 我将 kapt 用于领域、黄油刀、匕首和数据绑定。

      【讨论】:

      • 嘿,既然我成功地让它与 2.3.0 一起工作,也许你可以检查我更新的答案,我只是将我的 build.gradle 文件复制粘贴到我的问题的底部。干杯
      • 是的,我正在使用 DataBinding。
      • 好吧,我看到的唯一区别是我使用kapt 'com.android.databinding:compiler:2.2.3',而您使用的版本与您的 gradle 插件版本相同。实际上可能就是这样。我会试试看,今晚回来报告
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 2011-01-06
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多