Я только что создал новый проект на 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
}
Мой файл модуля gradle:
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
android
kotlin
android-databinding
Жулиано Нуньес Сильва Оливейра
источник
источник
android.databinding.enableV2=false android.enableExperimentalFeatureDatabinding = false
. добавив этоgrade.properties
решить мою проблемуОтветы:
Библиотеки привязки данных реорганизуются как часть рефакторинга androidx.
Я нашел ссылку на зависимость процессора аннотаций привязки данных из репозитория maven Google здесь .
Я построил фактическую зависимость от Gradle оттуда.
kapt "androidx.databinding:databinding-compiler:3.2.0-alpha16"
Обновление Начиная с Android Studio 3.2.0-beta01, привязке данных больше не требуется объявлять зависимость процессора аннотаций в файле gradle, поскольку привязка данных способна разрешить эту зависимость.
источник
При следующей настройке
И 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) } }
Вдруг прямо под всеми этими фальшивыми ошибками я увидел настоящую, вызванную неудачным разрешением конфликта слияния
источник
Просто удалите зависимость компилятора (kapt "com.android.databinding: compiler: $ gradleVersion), которая у меня сработала. Видимо, она предоставляется с плагином привязки из 3.2.0.
источник
Если вы уже используете стабильную версию Android Studio 3.2 , просто удалите зависимость, она уже включена.
источник
Caused by: 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) ...
Такая же ошибка здесь, в 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 в своем проекте (in
src/main/java/androidx.databinding/DataBindingComponent.java
)package androidx.databinding; public interface DataBindingComponent { }
Пусть он скомпилируется, и ошибка исчезнет. Но теперь будет обнаружена настоящая корневая ошибка. Тот, который на самом деле создавал все проблемы, но был каким-то образом проглочен. В моем случае это было из AutoValue, указывающее, что я использовал его неправильно
error: Parameter type java.lang.Boolean of setter method should be boolean to match getter
исправление этого и последующее удаление фиктивного интерфейса снова делает компилятор счастливым.
источник
Как бы то ни было, у меня была аналогичная проблема, и она была результатом неправильного запроса Room, который был связан с привязкой данных.
источник
ArrayList
в качестве возврата к запросу, где должен бытьList
.В моем случае это была плохая аннотация кинжала. Я помещаю настраиваемую область в модуль вместо того, чтобы помещать ее в метод обеспечения.
¯\_(ツ)_/¯
источник
Я была такая же проблема.
Изменение
Kapt
кannotationProcessor
только DataBinding исправили проблему для меня.источник
Я сталкиваюсь с этой проблемой при обновлении до Android Studio 3.2, я меняю плагин gradle с 3.2.0 на 3.1.4, и он отлично работает -> я думаю, что это проблема с градиентом, он обязательно будет обновлен очень скоро
источник
Кинжал также может быть причиной.
Изменение версии dagger с 2.17 на 2.16 пока может решить эту проблему.Обсуждение: https://github.com/google/dagger/issues/1245
ОбновитьDagger 2.18 вышел, но, к сожалению, он все еще не работает после того, как я протестировал (я что-то пропустил?).Обновление2Dagger 2.19 тоже не подойдет и обсуждение заблокировано.Но в Google Issueetracke есть решения / обходные пути. Я тестировал, и они работали. Отметьте его, если хотите использовать последнюю версию Dagger.Обновление3
Проблема с кинжалом исправлена в Android Studio 3.3.
источник
Я наконец исправил свою проблему, потому что я использовал Android Annotations, и они выпустили новую версию 4.5.1 1 час назад, где они поддерживают подключаемый модуль Grade Plugin 3.2.0.
Я искал эту ошибку в течение недели и теперь счастлив. Надеюсь, это вам тоже поможет!
источник
Моя проблема заключалась в том, что я пытался включить привязку данных для своего
Login
модуля, но не дляApp
модуля. После добавления:dataBinding { enabled = true }
в
App
модуль и удалил его изLogin
модуля, все заработало.источник
Я пробовал
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. Когда я исправил все красные файлы, проблема исчезла.
источник
Это моя самая глупая ошибка! Я действительно создал частную переменную для привязки данных, и это вызывало эту проблему.
Просто используйте,
lateinit var binding
и это сработало.Это могло кому-то помочь!
источник
Просто удалите зависимость kapt "com.android.databinding ...". Если вы используете Android Studio 3.2 или более позднюю версию.
источник
В моем случае, если вы используете модуль динамических функций:
dataBinding { enabled true }
Это необходимо включить как в корневых, так и в дочерних файлах Gradle (не забудьте добавить плагин kapt).
источник
Я исправляю обновление Android Studio до Canary 16 И это в gradle.wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
источник
Я решил ошибку, добавив
android.useAndroidX=true android.enableJetifier=true
в файле моего проекта gradle.properties
источник
android.useAndroidX:
Если установлено значениеtrue
, этот флаг указывает, что вы хотите начать использовать AndroidX с этого момента. Если флаг отсутствует, Android Studio ведет себя так, как если бы флаг был установлен наfalse
.android.enableJetifier:
Если установлено значениеtrue
, этот флаг указывает на то, что вы хотите иметь поддержку инструмента (из плагина Android Gradle) для автоматического преобразования существующих сторонних библиотек, как если бы они были написаны для AndroidX. Если флаг отсутствует, Android Studio ведет себя так, как если бы флаг был установлен наfalse
.В моем случае проблема была решена путем изменения:
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
источник
Была такая же проблема, когда я импортировал класс в привязке данных, которого не существовало. Также используйте
allprojects { gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs << "-Xmaxerrs" << "1000" } } }
для получения всех сообщений об ошибках, чтобы найти проблему. Для моего проекта это было ограничено 50.
источник
Для меня в моем файле макета была ошибка. Я сослался на несуществующую функцию.
android:text="@{() -> sleepTrackerViewModel.nightStrings}"
Вот решение:
android:text="@{sleepTrackerViewModel.nightStrings}"
источник
Еще кое-что, чтобы попробовать :) Я пытался внедрить GithubBrowserSample в Android Studio 3.2 (RC3). Я продолжал получать много странных ошибок при связывании данных, даже несмотря на то, что он не указывает версии привязки данных в основном build.gradle. Решением было удалить эти две строки из gradle.properties:
org.gradle.jvmargs=-Xmx4536m android.databinding.enableV2=true
источник
Моя ситуация:
Я обнаружил, что, удалив привязку данных из моего макета, перекомпилировав приложение, а затем добавив обратно привязку данных, я решил эту проблему.
Я изменил его
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>
Затем добавляйте привязку данных по частям.
источник
В моем случае в одном из файлов произошла ошибка импорта . Простое открытие этого файла привело к автоматическому выполнению импорта, после чего проект был построен.
Жалко, что AS не дала никаких указаний на это, как и трассировка стека ошибок.
Если ничего из опубликованного ответа не помогает - просто просмотрите все файлы в проекте и найдите файл с неправильным оператором импорта.
источник
Это ошибка в jetifier. Вот обходной путь до следующего обновления. Поместите это в свой проект gradle:
buildscript { dependencies { classpath 'com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02' } }
источник
Если вы используете библиотеку dataroom, проверьте аннотацию @Dao в своих классах DAO. В моем случае я забыл добавить @Dao в свой интерфейс RoomDatabase'Dao.
источник
Ошибки сборки для сгенерированных интерфейсов
DataBindingComponent
обычно вводят в заблуждение. Попробуйте найти любые другие ошибки сборки и сначала исправить их, а затем перекомпилировать.источник
Мне пришлось удалить следующий импорт из Gradle,
androidx.room:room-compiler:2.1.0-alpha06
Несмотря на то, что это странная проблема, просто попробуйте удалить ненужный импорт, он должен работать.
источник
При использовании с базой данных комнат проверьте все свои классы Dao, если у вас есть какие-либо проблемы с импортом или не указан требуемый TypeConverter
@TypeConverters
, эта ошибка вводит в заблуждение и должна быть исправлена, если вы обновите версию инструментов сборки gradle на уровне проекта до последней. Я использовалclasspath 'com.android.tools.build:gradle:3.4.0'
и получил ошибку правильно.источник
В моем случае произошла ошибка в классе элемента базы данных комнаты ... Ошибка касалась частного модификатора, который должен быть общедоступным для переменных-членов класса элементов базы данных комнаты.
Используйте и исследуйте командную строку ./gradlew AssemblyDebug, чтобы увидеть трассировку стека.
# Комната # База данных # Таблица класса #DAO
источник