Plötzlich bekomme ich diesen Fehler und ich bekomme keine Ahnung, warum es hilfreich genug ist, wenn jemand mich nur wissen lässt, wo dieser Fehler liegt. So viel ich bekommen kann, ist dies aufgrund des neuen Updates von Android Studio. Detaillierte Zusammenfassung des Fehlers, den ich erhalte.
Task :app:kaptDebugKotlin
ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1ANTLR Tool version 4.5.3 used for code generation does not match the current runtime version 4.7.1ANTLR Runtime version 4.5.3 used for parser compilation does not match the current runtime version 4.7.1C:\Users\shubh\Downloads\MarginCalculator\app\build\generated\source\kapt\debug\com\kotlin_developer\margincalculator\DataBinderMapperImpl.java:10: error: cannot find symbol
import com.kotlin_developer.margincalculator.databinding.FragmentCalculatorScreenBindingImpl;
symbol: class FragmentCalculatorScreenBindingImpl
Task :app:kaptDebugKotlin FAILED
location: package com.kotlin_developer.margincalculator.databinding
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:kaptDebugKotlin'.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> java.lang.reflect.InvocationTargetException (no error message)
* 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
BUILD FAILED in 17s
29 actionable tasks: 27 executed, 2 up-to-date
android
android-studio
kotlin
Shubham Tater
quelle
quelle
build.gradle
Datei.Antworten:
Die Benutzeroberfläche von Android Studio hat den Fehler nur ausgeblendet ...
Wenn der Fehler auftrat, wurde das Element in der Listenansicht hervorgehoben und in der Terminalansicht eine nicht hilfreiche Meldung angezeigt.
Um den tatsächlichen Fehler zu finden, wählen Sie das Stammelement in der Listenansicht aus, damit Android Studio die gesamte Build-Ausgabe in der Terminalansicht anzeigt, und scrollen Sie dann, um den Fehler zu finden.
quelle
Vielleicht bin ich etwas spät dran für die Antwort, aber trotzdem habe ich den gleichen Fehler bekommen. Der Build-Fehler kann durch einen Fehler verursacht werden, auf den Android Studio wahrscheinlich aufgrund der sehr großen Projektgröße nicht hinweist.
Hier ist der einfache Weg, um auf den genauen Fehler hinzuweisen.
Gehen Sie in Android Studio zum Menü Analysieren und klicken Sie auf Code überprüfen . Überprüfen Sie das gesamte Projekt, klicken Sie auf OK und warten Sie, bis die Inspektion abgeschlossen ist.
Jetzt sehen Sie eine Registerkarte, die alle Fehler, Warnungen usw. anzeigt, und Sie können jetzt das eigentliche Problem beheben.
quelle
Um herauszufinden, was das zugrunde liegende Problem ist, führen Sie den folgenden Befehl aus:
quelle
Ich habe das gleiche Problem, also habe ich versucht, mehr Informationen zu erhalten
Danach bekam ich den genauen Fehler "Fehler bei der Verarbeitung von Anmerkungen". Ich habe meine kürzlich optimierte DAO-Klasse überprüft und festgestellt, dass einer der Methodenrückgabetypen nicht definiert wurde.
//Before @Query("SELECT countryName FROM country_table WHERE countryCode= :code") fun getCountryNameForCode(code: String) //After @Query("SELECT countryName FROM country_table WHERE countryCode= :code") fun getCountryNameForCode(code: String): String
quelle
gradle->app->Tasks->Build->assemble
was ist das?Ich hatte den gleichen Fehler für eine Weile, dann begann ich die anderen Pakete zu überprüfen, von denen ich erfuhr, dass ich einen Tippfehler in meinem Datenbankcode gemacht habe. Also, "Durchsuchen Sie Ihre Datenbank und andere Aktivitätsklassendateien und finden Sie dort möglicherweise einige Fehler."
quelle
@Dao
in MyDao-Schnittstelle hinzuzufügenVeränderung
implementation "android.arch.persistence.room:runtime:1.1.1" kapt "android.arch.persistence.room:compiler:1.1.1"
Zu
implementation "androidx.room:room-runtime:2.2.5" kapt "androidx.room:room-compiler:2.2.5"
quelle
Wenn Sie ein Upgrade auf den Klassenpfad 'com.android.tools.build:gradle:4.0.0' durchgeführt haben, ersetzen Sie die vorherige Version
dependencies { classpath 'com.android.tools.build:gradle:3.6.3' }
Und ändern Sie gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4- all.zip`
quelle
Für mich haben eine Reihe von Referenzfehlern und ein Fehler in den XML-Ausdrücken
DataBinding
diesen Fehler verursacht.Ich habe ein
<variable/>
in einerlayout
Datei gelöscht , weil ich dachte, ich brauche es nicht mehr. Ich habe vergessen, dass ich die Variable in derlayout
Datei referenziert hatte .Nach dem Erstellen des Projekts wurde ein Fehler ausgegeben, bei dem die
BindingImpl
Klasse nicht importiert werden konnte , da sie nicht vorhanden ist und dieser Fehler nur als Warnung parallel zum obigenKaptExecution
Fehler angezeigt wurde .Nachdem ich eine Weile gesucht hatte, fand ich diesen Fehler und löste ihn. Dann wurde eine Reihe von Referenzfehlern angezeigt, da ich etwas umbenannt habe und es in den
Fragment
Dateien nicht umbenannt wurde . Nachdem auch diese Fehler behoben wurden, wurde der Build für mich ohne Fehler oder Warnungen beendet.quelle
Versuchen Sie, Ihr Projekt mit zu erstellen
kapt.use.worker.api=false
in Ihrer gradle.properties-Einstellungsdatei
Referenz: https://youtrack.jetbrains.com/issue/KT-40750
quelle
Ich hatte das gleiche Problem. In meinem Fall ging es um die Datenbank. Ich musste diese Codezeile ändern
@Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)
Ich habe eine weitere Tabelle in der Datenbank hinzugefügt, aber vergessen, eine Tabelle in der obigen Zeile hinzuzufügen.
quelle
In meinem Fall habe ich Raum verwendet und eine meiner databaseDao-Methoden hat einen nicht verwendeten Parameter und leider warnt mich Android Studio nicht richtig
quelle
Ich hatte das gleiche Problem. Lassen Sie mich Ihnen das Beispiel zeigen, wie ich zu dem Problem gekommen bin und wie ich es gelöst habe. Vielleicht können Sie sich ein größeres Bild machen.
Vor dem Auflösen
@Entity(tableName = "modules") data class Module ( @PrimaryKey val id: Int, val name: String ) @Entity(tableName = "sessions") data class Session ( @PrimaryKey(autoGenerate = true) var id: Int, @ColumnInfo(name = "module_id") val moduleId: Int, @ColumnInfo(name = "start_time") val startTime: String, @ColumnInfo(name = "end_time") val endTime: String ) data class ModuleSession ( @Embedded val module: Module, @Relation( parentColumn = "id", entityColumn = "module_id" ) val sessions: List<Session>, @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false // The problem )
In der DAO
@Transaction @Query("SELECT * FROM modules") abstract suspend fun getModuleSession(): List<ModuleSession>
Der Fehler, den ich bekam, war
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
Also habe ich tiefer gegraben und die folgende Nachricht gefunden
The columns returned by the query does not have the fields [isUpdated] in com.gmanix.oncampusprototype.Persistence.ModuleSession even though they are annotated as non-null or primitive. Columns returned by the query: [id,name] public abstract java.lang.Object getModuleSession(@org.jetbrains.annotations.NotNull()
Ich habe das Feld IsUpdated aus der POJO ModuleSession entfernt und es der Sitzungstabelle hinzugefügt
Nach Änderungen
@Entity(tableName = "sessions") data class Session ( @PrimaryKey(autoGenerate = true) var id: Int, @ColumnInfo(name = "module_id") val moduleId: Int, @ColumnInfo(name = "start_time") val startTime: String, @ColumnInfo(name = "end_time") val endTime: String, @ColumnInfo(name = "is_updated") val isUpdated: Boolean = false ) data class ModuleSession ( @Embedded val module: Module, @Relation( parentColumn = "id", entityColumn = "module_id" ) val sessions: List<Session> )
Überprüfen Sie andererseits, ob die
SELECT
Anweisung ein Feld enthält, bei dem ein Verdächtiger Probleme verursacht, oder mit dem Sie es kommentieren können@Ignore
Sie können Ihren Code jedoch veröffentlichen, wenn Sie sich immer noch nicht wohl fühlen.
Ich hoffe das könnte helfen
quelle
Rufen Sie die Antwort von @Rene Spies oben an, ich habe diesen Fehler auch beim Arbeiten mit der Datenbindung erhalten. Es stellt sich heraus, dass die Build-Engine es nicht mag, wenn Sie die
@Bindable
Annotation in ein Feld im primären Konstruktor von adata class
in Kotlin einfügen.Also mach niemals Folgendes:
data class MyAwesomePojo( @Bindable var firstname: String, var lastname: String )
Stattdessen müssen Sie Folgendes tun:
data class MyCorrectAwesomePojo( var lastname: String ):{ @get:Bindable var firstname: String set(value){ field = value } }
Bonus: Denken Sie daran, vor dem Setzen des Werts auf das Feld nach denselben Werten zu suchen, wenn Sie versuchen, eine bidirektionale Bindung wie ich zu verwenden, um eine Endlosschleife beim Setzen und Abrufen zu verhindern.
quelle
Interessanterweise wurde dieser Fehler angezeigt, weil ich die Beschreibung des Nachrüstens hinzugefügt habe. Achten Sie darauf, die Beschreibung von Raum und Nachrüstung nicht zu verwechseln.
quelle
In meinem Fall lag es daran, dass ich Observable nicht in meinem ViewModel implementiert habe. Ich habe dem Constraint-Layout mit einen EditText hinzugefügt
android:text="@={addProductViewModel.inputProductName}"
Nach der Implementierung
Observable
in meiner ViewModel-Klasse war der Fehler behobenViewModel
class AddProductViewModel ( private val repository: ProductRepository, private val context: Context ): ViewModel(), Observable { @Bindable val inputProductName = MutableLiveData<String>() fun addProduct() { //inputProductName.value } override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) { TODO("Not yet implemented") } override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) { TODO("Not yet implemented") } }
Vollständiges Beispiel für die MVVM-Datenbindung mit Fragmenten
Layout - add_product.xml
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android" > <data class=".AddProductBinding"> <variable name="addProductViewModel" type="com.rao.iremind.AddProductViewModel" /> </data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:id="@+id/editTextTextProductName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ems="10" android:hint="Product name" android:inputType="textPersonName" android:text="@={addProductViewModel.inputProductName}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout> </layout>
AddProductFragment
class AddProductFragment: Fragment() { private lateinit var binding: AddProductBinding private lateinit var addProductViewModel: AddProductViewModel override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = DataBindingUtil.inflate(inflater, R.layout.add_product, container, false) val dao = SubscriberDatabase.getInstance(requireActivity().applicationContext).productDAO val repository = ProductRepository(dao) val factory = AddProductViewModelFactory(repository, requireActivity().applicationContext) addProductViewModel = ViewModelProvider(this, factory).get(AddProductViewModel::class.java) binding.addProductViewModel = addProductViewModel binding.lifecycleOwner = this val view = binding.root return view } }
AddProductViewModel
class AddProductViewModel ( private val repository: ProductRepository, private val context: Context ): ViewModel(), Observable { @Bindable val inputProductName = MutableLiveData<String>() fun addProduct() { //inputProductName.value } override fun removeOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) { TODO("Not yet implemented") } override fun addOnPropertyChangedCallback(callback: Observable.OnPropertyChangedCallback?) { TODO("Not yet implemented") } }
Hoffe das hilft R.
quelle
In meinem Fall: Problem behoben
Schritte:
<variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
Projekt bereinigen und neu kompilieren.
ViewModel-Variable hinzufügen - Im XML & Build-Projekt .
< variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
- Ich hoffe es wird auch für dich funktionieren.
quelle
Ich hatte das gleiche Problem mit Room und habe viewBinding nicht verwendet .
Ich habe es behoben , indem ich exportSchema in meiner Datenbankklasse auf false gesetzt habe.
@Database(entities = [ModelClass::class], version = 1, exportSchema = false) abstract class ModelDatabase: RoomDatabase() {}
Denken Sie daran: exportScehma kann je nach Anwendungsfall variieren. Im Allgemeinen bleibt es falsch, also setze ich es auf false.
quelle
In meinem Fall habe ich eine Variable UserManager global in NetWorkManager geändert und überall dort, wo UserManager-Klassen vorhanden waren, wurden sie zu NetworkManager.
Da ich Hilt verwende, musste ich das Projekt erneut erstellen.
Ich habe das Projekt gereinigt und Kotlin hat gezeigt, wo die Fehler waren.
quelle
Ich hatte auch das gleiche Problem, also habe ich einfach versucht, den .idea-Ordner und den .gradle-Ordner des Projekts zu löschen. Dann habe ich auch den Build-Ordner im App-Ordner gelöscht und dann die Android Studio-IDE neu gestartet, und es funktioniert für mich
quelle
Für mich bestand das Problem darin, dass zwei Primärschlüssel im Modell definiert waren.
// before @field:ColumnInfo(name = "id") @field:PrimaryKey(autoGenerate = true) var id: Long = 0, @field:ColumnInfo(name = "name") @field:PrimaryKey var name: String, //after @field:ColumnInfo(name = "id") @field:PrimaryKey(autoGenerate = true) var id: Long = 0, @field:ColumnInfo(name = "name") @field:NotNull var name: String,
Ich musste das Projekt neu erstellen und die Dao-Klasse ein wenig ändern, um die Meldung über das Problem auszulösen.
quelle
Für mich war es der primäre Konstruktor in einer Datenbankeintragsklasse
quelle
Diese Methode fällt mir alles ein, wo es ein Problem mit der
Room
Datenbank gibt undCoroutines
sogar Rechtschreibfehler. Zuletzt beim Versuch, einen einzelnen Wert mit einem Flow nach der eingefügten Spalte zurückzugeben, von:Flow<Long>
aus DAOs-Klassen.Es sollte eine
suspend
Funktion und nur einLong
Typ sein, der nach der eingefügten Spalte zurückgegeben wird.Diese Probleme sind manchmal nicht eindeutig. Versuchen Sie daher, alle Build Output-Nachrichten zu lesen. Die Nachricht, die mir geholfen hat, war:
error: Not sure how to handle insert method's return type.
quelle
Nichts hat funktioniert Ich habe alles versucht und schließlich einen kleinen Fehler gefunden, der ein großes Problem verursachte.
Gehen Sie zurück zu jeder neu erstellten Datei für die Datenbank und suchen Sie zeilenweise nach Code für jede Datei.
Überprüfen Sie die Datenbankklasse und prüfen Sie, ob Dao wie folgt deklariert ist:
abstract val commentDatabaseDao: CommentDatabaseDao
Als val not var deklarieren , das war in meinem Fall und schließlich dafür gelöst.
quelle
Mir ist das gerade passiert. Ein anderer Entwickler hatte eine Zusammenführung nicht ordnungsgemäß abgeschlossen, sodass diese Zeile im Code enthalten war
Anstatt einen Kompilierungsfehler zu erhalten, wurde der KaptExecution-Fehler angezeigt.
quelle
Nach vielen Schmerzen habe ich mich entschlossen, es zu versuchen,
annotationProcessor
anstatt zukapt
hoffen, dass zumindest eine Fehlermeldung oder etwas anderes angezeigt wird, das mir beim Auffinden der Quelle helfen kann. Aber zum Glück (oder leider; wegen der verschwendeten Zeit) wurde es ohne Fehler erfolgreich gebaut. Es ist meistens ein Fehler ankapt
sich. Probieren Sie diese Lösung aus und sie kann helfen.quelle
Wirklich liegt das Problem in der Typografie in Ihrem Code. Ich musste aufhören, das kapt-Plugin zu verwenden. Ich habe dann auf annotationProcessor umgestellt. Es wurde klar angegeben, was der Fehler nach dem Bau war.
Sie können dann wieder zur Verwendung von kapt wechseln, nachdem Sie den Fehler behoben haben.
Für mich war der Fehler, dass ich versehentlich versucht habe, Daten in einer Textansicht in beide Richtungen zu binden.
quelle
Ich hatte den gleichen Fehler. Ich hatte zwei Probleme.
Möglicherweise müssen Sie hinzufügen
Implementierung 'androidx.room:room-ktx:2.2.5'
Ich hatte eine Datei gelöscht, auf die in einer der Datei activity_xml als Mitglied verwiesen wurde. Der Fehler gab mir nie einen Hinweis, bis ich ihn in annotationProcessor anstelle von kapt änderte. Dann wies er auf den Fehler hin, fand die Datei und hatte mit Sicherheit einen Verweis auf eine Datei, die ich nicht mehr verwendete und die gelöscht wurde. Ich habe diese Datenreferenz aus der XML entfernt und sie hat alles geklärt. Dann habe ich es wieder auf kapt gesetzt.
quelle
In einigen Fällen kann es helfen, gradle.properties
kapt.include.compile.classpath=true
quelle
In meinem Fall habe ich diese Zeile hinzugefügt
android { . . . kapt.includeCompileClasspath = false }
quelle
Ich habe gerade die Android Studio IDE auf die Version 4.1.1 aktualisiert und ein ähnliches Problem festgestellt.
Was mir klar wurde war…
… Bevor ich keine
*_Impl
Klassen hatte (ich kenne sie in Kotlin) und nicht einmal einige neue*Tests
Klassen.Nachdem ich "all the world" ausgeführt hatte, um eine Lösung zu finden, traf ich eine intuitive und faire Entscheidung: Ich löschte alle Dateien in meinen "handgefertigten" Paketen, die vor dem Android Studio-Update nicht vorhanden waren .
Und rate was?
Es funktionierte. Keine Probleme, nicht einmal ein Problem
kapt
.Ich sage nicht, dass es eine endgültige Lösung ist. Aber es kann für Sie funktionieren.
Hab einen guten.
quelle