Не удается найти символ DataBindingComponent на Android Studio 3.2 Canary 16 Проект Kotlin

Я только что создал новый проект на Android Studio 3.2 Canary 16 с включенным Kotlin. Затем я также включил привязку данных, но я получаю сообщение об ошибке, что он не может найти класс DataBindingComponent.

Здесь мой проект gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext.kotlin_version = '1.2.41'
    ext.android_plugin_version = '3.2.0-alpha10'
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0-alpha16'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

Мой файл градиента модуля:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-kapt'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "net.julianonunes.myapp"
        minSdkVersion 22
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.squareup.okhttp3:okhttp:3.10.0'
    implementation 'com.android.support:design:27.1.1'
    kapt "com.android.databinding:compiler:3.1.2"
}

Моя активность xml:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>
        <variable
            name="data"
            type="net.julianonunes.myapp.RegisterData" />
    </data>

    ....
</layout>

И вот результат сборки:

Executing tasks: [clean, :app:assembleDebug]

Configuration on demand is an incubating feature.

> Configure project :app
app: 'annotationProcessor' dependencies won't be recognized as kapt annotation processors. Please change the configuration name to 'kapt' for these artifacts: 'androidx.databinding:databinding-compiler:3.2.0-alpha16'.

> Task :clean
> Task :app:clean
> Task :app:preBuild UP-TO-DATE
> Task :app:preDebugBuild
> Task :app:compileDebugAidl NO-SOURCE
> Task :app:compileDebugRenderscript
> Task :app:checkDebugManifest
> Task :app:generateDebugBuildConfig
> Task :app:prepareLintJar UP-TO-DATE
> Task :app:mainApkListPersistenceDebug
> Task :app:generateDebugResValues
> Task :app:generateDebugResources
> Task :app:mergeDebugResources
> Task :app:createDebugCompatibleScreenManifests
> Task :app:processDebugManifest
> Task :app:splitsDiscoveryTaskDebug
> Task :app:processDebugResources
> Task :app:generateDebugSources
> Task :app:dataBindingExportBuildInfoDebug
> Task :app:transformDataBindingBaseClassLogWithDataBindingMergeGenClassesForDebug
> Task :app:transformDataBindingWithDataBindingMergeArtifactsForDebug
> Task :app:dataBindingGenBaseClassesDebug
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.pom
Download https://dl.google.com/dl/android/maven2/com/android/databinding/compiler/3.1.2/compiler-3.1.2.jar
> Task :app:kaptGenerateStubsDebugKotlin
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:28: error: cannot find symbol
  protected ActivityMainBinding(DataBindingComponent _bindingComponent, View _root,
                                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:46: error: cannot find symbol
      @Nullable ViewGroup root, boolean attachToRoot, @Nullable DataBindingComponent component) {
                                                                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:57: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: /home/juliano/Documents/Projetos/myapp/app/build/generated/data_binding_base_class_source_out/debug/dataBindingGenBaseClassesDebug/out/net/julianonunes/myapp/databinding/ActivityMainBinding.java:68: error: cannot find symbol
      @Nullable DataBindingComponent component) {
                ^
  symbol:   class DataBindingComponent
  location: class ActivityMainBinding
e: [kapt] An exception occurred: java.lang.NullPointerException
    at java.io.File.<init>(File.java:277)
    at android.databinding.annotationprocessor.ProcessExpressions.onHandleStep(ProcessExpressions.java:77)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.runStep(ProcessDataBinding.java:203)
    at android.databinding.annotationprocessor.ProcessDataBinding$ProcessingStep.access$000(ProcessDataBinding.java:188)
    at android.databinding.annotationprocessor.ProcessDataBinding.doProcess(ProcessDataBinding.java:90)
    at android.databinding.annotationprocessor.ProcessDataBinding.process(ProcessDataBinding.java:65)
    at org.jetbrains.kotlin.kapt3.ProcessorWrapper.process(annotationProcessing.kt:131)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:794)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:705)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$1800(JavacProcessingEnvironment.java:91)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1035)
    at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1176)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1170)
    at com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1068)
    at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing(annotationProcessing.kt:87)
    at org.jetbrains.kotlin.kapt3.AnnotationProcessingKt.doAnnotationProcessing$default(annotationProcessing.kt:45)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.runAnnotationProcessing(Kapt3Extension.kt:257)
    at org.jetbrains.kotlin.kapt3.AbstractKapt3Extension.analysisCompleted(Kapt3Extension.kt:212)
    at org.jetbrains.kotlin.kapt3.ClasspathBasedKapt3Extension.analysisCompleted(Kapt3Extension.kt:95)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM$analyzeFilesWithJavaIntegration$2.invoke(TopDownAnalyzerFacadeForJVM.kt:97)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration(TopDownAnalyzerFacadeForJVM.kt:107)
    at org.jetbrains.kotlin.cli.jvm.compiler.TopDownAnalyzerFacadeForJVM.analyzeFilesWithJavaIntegration$default(TopDownAnalyzerFacadeForJVM.kt:84)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:374)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler$analyze$1.invoke(KotlinToJVMBytecodeCompiler.kt:64)
    at org.jetbrains.kotlin.cli.common.messages.AnalyzerWithCompilerReport.analyzeAndReport(AnalyzerWithCompilerReport.kt:101)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.analyze(KotlinToJVMBytecodeCompiler.kt:365)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinToJVMBytecodeCompiler.compileModules$cli(KotlinToJVMBytecodeCompiler.kt:130)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:161)
    at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:63)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:107)
    at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.java:51)
    at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:96)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:405)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$compile$1$1$2.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:920)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl$doCompile$$inlined$ifAlive$lambda$2.invoke(CompileServiceImpl.kt:98)
    at org.jetbrains.kotlin.daemon.common.DummyProfiler.withMeasure(PerfUtils.kt:137)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.checkedCompile(CompileServiceImpl.kt:950)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.doCompile(CompileServiceImpl.kt:919)
    at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:404)
    at sun.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

> Task :app:kaptDebugKotlin FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0.
See https://docs.gradle.org/4.7/userguide/command_line_interface.html#sec:command_line_warnings

BUILD FAILED in 8s
20 actionable tasks: 19 executed, 1 up-to-date

Что не так с моим проектом?

PS: Проблема также возникает в Android Studio 3.1.2

Ответы

Ответ 1

Библиотеки привязки данных реорганизуются как часть рефакторинга androidx.

Я нашел ссылку на зависимость процессора аннотаций привязки из репозитория Google Maven здесь.

Я построил фактическую зависимость от gradle оттуда.

kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"

Обновление Начиная с Android Studio 3.2.0-бета01, привязка данных больше не нуждается в объявлении зависимостей процессора аннотаций в файле Gradle, поскольку привязка данных способна разрешить эту зависимость.

Ответ 2

Со следующей настройкой

Android Studio 3.2.1, сборка # AI-181.5540.7.32.5056338, построена 8 октября 2018 г. JRE: 1.8.0_152-release-1136-b06 x86_64 JVM: 64-битная виртуальная машина OpenJDK от JetBrains sro macOS 10.13.3

И DataBinding просто включить, имея это в моем приложении build.gradle

apply plugin: 'kotlin-kapt'

а потом

    dataBinding {
        enabled = true
    }

а также это в моих свойствах gradle.wrapper

android.databinding.enableV2=true

У меня были такие же ошибки:

could not find the DataBindingComponent class.

У меня было более 100 из них. Оказалось, что эти ошибки не были важны и что истинная основная ошибка не была показана в IDE. Поэтому я увеличил количество ошибок, которые может отображать компилятор Kotlin, добавив это в build.gradle:

dataBinding {
    enabled = true
}
kapt {
        javacOptions {
            // Increase the max count of errors from annotation processors.
            // Default is 100.
            option("-Xmaxerrs", 500)
        }
    }

Внезапно, прямо под всеми этими ложными ошибками, я увидел реальную ошибку, вызванную неудачным разрешением конфликта слияния 😔

Ответ 3

Просто удалите зависимость компилятора (kapt "com.android.databinding: compiler: $ gradleVersion), которая сработала для меня. По-видимому, она снабжена плагином привязки от 3.2.0.

Ответ 4

Если вы уже используете стабильную версию Android Studio 3.2, просто удалите зависимость, она уже включена.

Ответ 5

Для чего это стоит, у меня была аналогичная проблема, и это было связано с плохим запросом комнаты, который был связан с привязкой данных.

Ответ 6

Та же ошибка здесь, в Android Studio 3.3.1, нет Kotlin, чистая Java, с использованием androidx

build.gradle содержит

    dataBinding {
        enabled true
    }

gradle.properties содержит

android.useAndroidX=true
android.enableJetifier=true
android.databinding.enableV2=true

Я боролся с этой проблемой часами, а затем решил ее следующим образом:

Временно объявите пустой интерфейс для DataBindingComponent в вашем проекте (в src/main/java/androidx.databinding/DataBindingComponent.java)

package androidx.databinding;

public interface DataBindingComponent {
}

Пусть он скомпилируется и ошибка исчезнет. Но теперь будет выявлена фактическая ошибка root. Тот, который на самом деле вызывал все неприятности, но был как-то проглочен. В моем случае это было из AutoValue, указывающее, что я использовал его неправильно

error: Parameter type java.lang.Boolean of setter method should be boolean to match getter

исправление этого и затем удаление фиктивного интерфейса делает компилятор снова счастливым.

Ответ 7

В моем случае это была аннотация с плохим кинжалом. Я помещаю пользовательскую область в модуль вместо того, чтобы помещать его в метод предоставления.

¯\_(ツ)_/¯

Ответ 8

Я была такая же проблема.

Изменение Kapt на annotationProcessor только для DataBinding Kapt проблему для меня.

Ответ 9

Я сталкиваюсь с этой проблемой при обновлении до Android 3.2, я меняю плагин gradle от 3.2.0 до 3.1.4, и он отлично работает → я думаю, что это проблема с градиентом, она будет обновлена наверняка очень скоро

Ответ 10

Кинжал также может быть причиной. Изменение версии кинжала с 2.17 на 2.16 может решить эту проблему на данный момент.

Обсуждение: https://github.com/google/dagger/issues/1245.

Обновить

Dagger 2.18 отсутствует, но, к сожалению, он не будет работать после того, как я проверил (я что-то пропустил?).

Update2

Dagger 2.19 также не будет работать, и обсуждение заблокировано.

Но в google Issueracke есть решения/обходные пути. Я проверил, и они работали. Проверьте это, если вы хотите использовать последний Dagger.

Update3

Проблема с кинжалом была исправлена в Android Studio 3.3.

Ответ 11

Я, наконец, исправил свою проблему, потому что я использовал Android Annotations, и они выпустили новую версию 4.5.1 1 час назад, где они поддерживают Grade Plugin 3.2.0.

Я искал эту ошибку в течение недели, и теперь я счастлив. Надеюсь, это тоже поможет!

Ответ 12

Я пробовал classpath 'com.android.tools.build:gradle:3.2.0-beta05' с и без явной зависимости kapt "androidx.databinding:databinding-compiler:3.3.0-alpha06"

И все равно получаю то же исключение.

Я также пробовал 3.3.0-alpha06, но ничего не изменилось.

ОБНОВЛЕНИЕ: через 2 дня я решил проблему. Я сделал это, вручную исправляя все файлы с проблемами, из-за миграции на AndroidX (неправильные пакеты в импорте и XML и т.д.). Кроме того, мне нужно было обновить Glide с 4.7 до 4.8. Когда я исправил все красные файлы, проблема исчезла.

Ответ 13

Это моя самая глупая ошибка! Я на самом деле создал личную переменную для привязки данных, и это было причиной этой проблемы.

Просто используйте lateinit var binding и это lateinit var binding.

Это может помочь кому-то!

Ответ 14

Просто удалите зависимость kapt "com.android.databinding...". Если вы используете Android Studio 3.2 или более позднюю версию.

Ответ 15

Я исправляю это, обновляя Android Studio до Canary 16 И это в gradle.wrapper.properties distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip

Ответ 16

Я решил ошибку, добавив

android.useAndroidX=true
android.enableJetifier=true

в файле проекта gradle.properties

Ответ 17

Моя проблема заключалась в том, что я пытался включить привязку данных для моего модуля Login но не модуля App. После добавления:

dataBinding {
    enabled = true
}

в модуль App и удалил его из модуля Login, все заработало.

Ответ 18

В моем случае проблема была решена путем изменения:

androidExtensions.experimental = true

(т.е. Gradle DSL в качестве однострочника)

в

androidExtensions {
    experimental = true
}

кроме could not find the DataBindingComponent class я также был error: incompatible types: NonExistentClass cannot be converted to Annotation, связанную с kotlinx.android.parcel.Parcelize аннотации (@Parcelize)

Android Studio 3.3; Gradle-4.10.1-все; tools.build:gradle 3.3.0

Ответ 19

Что-то еще, чтобы попробовать :) Я пытался получить GithubBrowserSample в Android Studio 3.2 (RC3). Я продолжал получать множество странных ошибок при привязке данных, даже если в главном файле build.gradle не указаны версии привязки данных. Решение заключалось в том, чтобы удалить эти две строки из gradle.properties:

org.gradle.jvmargs=-Xmx4536m
android.databinding.enableV2=true

Ответ 20

Моя ситуация:

Android Studio v3.2.1

com.android.tools.build:gradle:3.2.1

https://services.gradle.org/distributions/gradle-4.10.2-all.zip

Я обнаружил, что, удалив привязку данных из моего макета, перекомпилировав приложение, а затем добавив обратно привязку данных, он решил эту проблему.

Я изменил DataBindingUtil.setContentView(...) на setContentView(...) и сократил свой макет активности до минимума:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello"/>

</FrameLayout>

Затем добавьте привязку данных обратно по частям.

Ответ 21

В моем случае произошла ошибка импорта в одном из файлов. Простое открытие этого файла привело к автоматическому импорту, и после этого проект был собран.

Жаль, что AS не дал этому никакого указания, как и стек трассировки ошибок.

В случае, если ничего из опубликованного ответа не поможет - просто пролистайте все файлы в проекте и найдите файл с неверным оператором импорта.

Ответ 22

Это ошибка в Jetifier. Здесь пока есть обходной путь до следующего обновления. Поместите это в ваш проект gradle:

buildscript {
    dependencies {
        classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
    }
}

Ответ 23

Если вы используете библиотеку dataroom, проверьте аннотацию @Dao в ваших классах DAO. В моем случае я забыл добавить @Dao в мой интерфейс RoomDatabase'Dao.

Ответ 24

Ошибки сборки для сгенерированных интерфейсов, таких как DataBindingComponent, обычно вводят в заблуждение. Попробуйте найти другие ошибки сборки и сначала исправить их, а затем перекомпилировать.

Ответ 25

Была такая же проблема, когда я импортировал класс в привязке данных, который не существовал. Также используйте

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
}

для получения всех сообщений об ошибках, чтобы найти проблему. Для моего проекта он был ограничен 50.

Ответ 26

Мне пришлось удалить следующий импорт из Gradle,

androidx.room:room-compiler:2.1.0-alpha06

Даже при том, что это странная проблема, просто попробуйте удалить ненужный импорт, он должен работать.

Ответ 27

Если вы используете с базой данных комнат, проверьте все ваши классы Dao, если у вас есть проблема с импортом или вы не указали требуемый TypeConverter с использованием @TypeConverters, эта ошибка вводит в заблуждение и должна быть исправлена, если вы обновляете версию инструментов сборки gradle уровня проекта до последней версии. Я использовал classpath 'com.android.tools.build:gradle:3.4.0' и получил ошибку правильно.

Ответ 28

В моем случае, Если вы используете динамический функциональный модуль:

build.gradle(app)

dataBinding {
    enabled true
}

Это нужно включить как для корневых, так и для дочерних файлов gradle (не забудьте добавить плагин kapt).

Ответ 29

В моем случае произошла ошибка в классе Предметов базы данных комнат... Ошибка была связана с модификатором private, который должен быть открытым для переменных-членов класса Room db.

Используйте и изучите командную строку ./gradlew assemblyDebug, чтобы увидеть трассировку стека.

# Комната # База данных # Класс таблицы #DAO