Tout à coup, je commence à avoir cette erreur, et je ne comprends pas pourquoi si quelqu'un me fait simplement savoir où se trouve cette erreur, ce sera assez utile. Tout ce que je peux obtenir, c'est à cause de la nouvelle mise à jour du studio Android. Résumé détaillé de l'erreur que je reçois.
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
29 Réponses :
Si vous avez mis à niveau vers classpath 'com.android.tools.build:gradle:4.0.0', remplacez-le par la version précédente
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4- all.zip`
Et changez gradle-wrapper.properties
dependencies { classpath 'com.android.tools.build:gradle:3.6.3' }
Ce n'est pas la bonne solution
@ShubhamTater C'est une solution jusqu'à ce que gradle4.0.0 soit corrigé. C'est la solution temporaire. Une fois que gradle4.0.0 est corrigé. Nous pouvons mettre à jour le gradle 4.0 ou plus
J'ai attrapé cette exception sur 4.0.1
J'ai eu la même erreur pendant un moment, puis j'ai commencé à vérifier les autres packages.J'ai appris que j'avais fait une faute de frappe dans le code de ma base de données. Donc, "Parcourez votre base de données et d'autres fichiers de classe d'activité, vous pouvez y trouver des erreurs."
Quel genre d'erreurs?
Pour moi, il y avait une erreur dans le graphique de navigation
Dans mon cas, j'ai oublié d'ajouter @Dao
dans l'interface MyDao
Pour moi, un tas d'erreurs de référence et une erreur dans les expressions XML avec DataBinding
produit cette erreur.
J'ai supprimé une <variable/>
dans un fichier de layout
en layout
, car je pensais que je n'en avais plus besoin. J'ai oublié que j'avais la variable référencée dans le fichier de layout
en layout
.
Après la construction du projet, cela a produit une erreur, où il n'a pas été possible d'importer la classe BindingImpl
, car elle n'existe pas et cette erreur n'a été affichée que comme un avertissement parallèle à l'erreur KaptExecution
ci-dessus.
Après avoir cherché pendant un moment, j'ai trouvé cette erreur et l'ai résolue. Ensuite, un tas d'erreurs de référence ont été affichées, car j'ai renommé quelque chose et je ne l'ai pas renommé dans les fichiers Fragment
. Après avoir résolu ces erreurs également, la construction s'est terminée pour moi sans erreurs ni avertissements.
Cette erreur est toujours liée au fichier XML que notre liaison de données utilise.
J'ai eu le même problème. Permettez-moi de vous expliquer comment j'ai fini par résoudre le problème et comment je l'ai résolu. Vous pouvez peut-être avoir une vue d'ensemble.
Avant de résoudre
@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> )
Dans le DAO
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()
L'erreur que j'ai eue était
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
Alors j'ai creusé plus profondément et j'ai trouvé le message ci-dessous
@Transaction @Query("SELECT * FROM modules") abstract suspend fun getModuleSession(): List<ModuleSession>
J'ai supprimé le champ IsUpdated de POJO ModuleSession et l'ai ajouté à la table de session
Après les changements
@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 )
D'autre part, vérifiez s'il y a un champ dans l' SELECT
qui est suspect à l'origine de problèmes ou vous pouvez l'annoter avec @Ignore
Cependant, vous pouvez publier votre code si vous n'êtes toujours pas à l'aise.
J'espère que cela pourrait aider
J'ai la solution à mon problème, je ne sais pas si cela fonctionnera pour vous ou non, mais la soultion est de vérifier votre fichier XML que vous liez, la liaison est un système de compilation, et cela fonctionne pour le fichier XML, alors vérifiez-le si leur s'il y a une erreur, il affichera ce type d'erreur. Je corrige mon fichier XML puis tout fonctionne parfaitement.
Oui s'il vous plaît. comment avez-vous creusé plus profondément?
@LeonardoSibela désolé pour cela, ce que je voulais dire, c'est ajouter l'option --stacktrace lors de la construction afin que je puisse obtenir plus d'informations sur l'erreur.
Vous pouvez ajouter l'option --stacktrace depuis File-> Settings-> Build, Execution, Deployment-> Compiler-> Comman d-line Options Btw dans mon cas il me manquait une dépendance: implémentation "androidx.room:room-ktx : $ room_version "
Criez à la réponse de @Rene Spies ci-dessus, j'ai également eu cette erreur en travaillant avec la liaison de données. Il s'avère que le moteur de construction n'aime pas ça lorsque vous placez l'annotation @Bindable
sur un champ dans le constructeur principal d'une data class
dans Kotlin.
Alors ne fais jamais ce qui suit,
data class MyCorrectAwesomePojo( var lastname: String ):{ @get:Bindable var firstname: String set(value){ field = value } }
au lieu de cela, vous devez faire
data class MyAwesomePojo( @Bindable var firstname: String, var lastname: String )
Bonus: n'oubliez pas de vérifier les mêmes valeurs avant de définir value sur field si vous essayez d'utiliser la liaison bidirectionnelle comme moi pour éviter une boucle infinie de réglage et d'obtention.
J'ai la solution à mon problème, je ne sais pas si cela fonctionnera pour vous ou non, mais la soultion est de vérifier votre fichier XML que vous liez, la liaison est un système de compilation, et cela fonctionne pour le fichier XML, alors vérifiez-le si leur s'il y a une erreur, il affichera ce type d'erreur. Je corrige mon fichier XML puis tout fonctionne parfaitement.
J'ai eu le même problème, alors j'ai essayé d'obtenir plus d'informations, en faisant
gradle-> app-> Tâches-> Construire-> assembler
Après cela, j'ai eu une erreur exacte disant "Erreur lors du traitement des annotations". J'ai vérifié ma classe DAO récemment modifiée et j'ai trouvé que l'un des types de retour de méthode n'était pas défini.
//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
gradle->app->Tasks->Build->assemble
qu'est-ce que c'est?
@ user25 Fenêtre de l'outil Gradle
Ouais, cela vous donne des journaux d'erreurs plus détaillés
Changement
implementation "androidx.room:room-runtime:2.2.5" kapt "androidx.room:room-compiler:2.2.5"
À
implementation "android.arch.persistence.room:runtime:1.1.1" kapt "android.arch.persistence.room:compiler:1.1.1"
incroyable, ça a aidé
Fait intéressant, j'obtenais cette erreur parce que j'ai ajouté la description de la modernisation. Veillez à ne pas confondre la description de la pièce et de la rénovation.
Dans mon cas, c'était parce que je n'implémentais pas Observable dans mon ViewModel. J'ai ajouté un EditText à la mise en page des contraintes avec android:text="@={addProductViewModel.inputProductName}"
Une fois que j'ai implémenté Observable
dans ma classe ViewModel, l'erreur a disparu
VoirModèle
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") } }
Exemple complet de liaison de données MVVM à l'aide de fragments
Mise en page - add_product.xml
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 } }
AjouterProduitFragment
<?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>
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") } }
J'espère que cela aide R
Dans mon cas: problème résolu
Pas:
android:text="@{viewModel.simName}"
binding.viewModel = viewModel
< variable name="viewModel" type="com.xx.AppViewModel" / >
Nettoyer le projet et recompiler.
Ajouter une variable viewModel - Dans un projet XML & Build .
binding.viewModel = viewModel
android:text="@{viewModel.simName}"
<variable name="viewModel" type="com.xx.AppViewModel" / >
- J'espère que cela fonctionnera pour vous aussi.
Peut-être suis-je un peu en retard pour la réponse mais, de toute façon, j'obtenais la même erreur. L'échec de la construction peut être causé par une erreur qu'Android Studio ne parvient pas à signaler, probablement en raison de la taille du projet très importante.
Voici le moyen le plus simple de signaler l'erreur exacte.
Dans le studio Android, allez dans le menu Analyser et cliquez sur Inspecter le code ; vérifiez l'ensemble du projet, cliquez sur OK et attendez la fin de l'inspection.
Vous verrez maintenant un onglet qui pointera toutes les erreurs, avertissements, etc. et vous pouvez maintenant résoudre le problème réel.
oui, il montre exactement une erreur. (j'ai fait une erreur dans XML)
Je ne comprends pas pourquoi Android Studio n'affiche pas l'erreur directement lorsqu'une compilation échoue, cela n'a aucun sens. Merci pour cela, m'a beaucoup aidé
dans certains cas, cela peut aider gradle.properties
kapt.include.compile.classpath=true
J'ai eu le même problème avec Room et je n'utilisais pas viewBinding .
Je l'ai corrigé en utilisant exportSchema sur false dans ma classe de base de données.
@Database(entities = [ModelClass::class], version = 1, exportSchema = false) abstract class ModelDatabase: RoomDatabase() {}
Rappelez-vous: exportScehma peut varier en fonction de votre cas d'utilisation, généralement il reste faux donc je le mets à faux.
La façon de savoir quel est le problème sous-jacent consiste à exécuter la commande suivante:
./gradlew assembleDebug --stacktrace
dans mon cas, j'ai ajouté cette ligne
android { . . . kapt.includeCompileClasspath = false }
Dans mon cas, j'ai changé globalement une variable UserManager en NetWorkManager et partout où il y avait des classes UserManager, elles sont devenues NetworkManager.
Parce que j'utilise Hilt, j'ai dû reconstruire le projet.
J'ai nettoyé le projet et Kotlin a montré où se trouvaient les erreurs.
J'ai également rencontré le même problème, alors pour essayer, j'ai supprimé le dossier .idea et le dossier .gradle du projet, puis j'ai également supprimé le dossier de construction dans le dossier de l'application, puis redémarrez l'IDE de studio Android et cela fonctionne pour moi
Dans mon cas, j'ai utilisé room et l'une de mes méthodes databasDao a un paramètre inutilisé et malheureusement, android studio ne m'avertit pas correctement
Pour moi, le problème était d'avoir 2 clés primaires définies sur le modèle.
// 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,
J'ai dû reconstruire le projet et changer un peu la classe Dao pour déclencher le message sur le problème.
essayez de construire votre projet avec
kapt.use.worker.api=false
dans votre fichier de paramètres gradle.properties
L'interface utilisateur d'Android Studio cachait juste l'erreur ...
lorsque l'erreur s'est produite, il a mis en surbrillance l'élément dans la vue de liste et a montré un message inutile dans la vue du terminal.
pour trouver l'erreur réelle, sélectionnez l'élément racine dans la vue de liste afin qu'Android Studio affiche la totalité de la sortie de construction dans la vue du terminal, puis faites défiler pour trouver l'erreur.
si vous avez une erreur de salle (DB) lors de la compilation, elle l'affichera comme ça - cela signifie qu'une ou certaines de vos requêtes sont erronées
Je suppose que cela s'affichera comme ceci pour toute erreur de base de données au moment de la compilation ... dans mon cas, il s'agissait d'une erreur de base de données Realm lors de la compilation concernant un objet entité mal configuré ...
À en juger par les votes positifs, la décision relative à l'interface utilisateur n'est pas la bonne
Cette méthode me vient à l' Coroutines
tout ce qu'il y a un problème avec la base de données de la Room
et les Coroutines
, même les fautes d'orthographe. Enfin, lors de la tentative de retour d'une valeur unique avec un Flow après l'insertion de la colonne, par: Flow<Long>
partir des classes DAO.
Il doit s'agir d'une fonction de suspend
et uniquement de type Long
à renvoyer après l'insertion de la colonne.
Ces problèmes sont parfois ambigus, alors essayez de lire tous les messages de sortie de génération, le message qui m'aide était: error: Not sure how to handle insert method's return type.
Rien n'a fonctionné J'ai tout essayé et j'ai finalement trouvé une petite erreur qui créait un gros problème.
Revenez à chaque fichier nouvellement créé pour la base de données et vérifiez soigneusement le code ligne par ligne de chaque fichier.
Vérifiez la classe de base de données et vérifiez si Dao est déclaré comme par exemple,
abstract val commentDatabaseDao: CommentDatabaseDao
déclarer comme val not var , c'était dans mon cas et finalement pour cela résolu.
Je viens de me faire arriver cela. Un autre développeur n'avait pas terminé une fusion correctement, cette ligne était donc dans le code
<<<<<<< HEAD
Au lieu d'obtenir une erreur de compilation, j'ai eu l'erreur KaptExecution.
Après beaucoup de peine, j'ai décidé d'essayer annotationProcessor
au lieu de kapt
espérant qu'il afficherait au moins un message d'erreur ou tout ce qui pourrait m'aider à localiser la source. Mais heureusement (ou malheureusement; à cause du temps perdu), il a été construit avec succès sans aucune erreur. C'est principalement un bogue dans kapt
lui-même. Alors, essayez cette solution et cela peut vous aider.
merci pour cela. Je l'ai changé pour utiliser 'annotationProcessor' et il a été construit avec succès. Ensuite, je l'ai remis à «kapt» et il a pu se reconstruire.
J'ai eu le même problème. Dans mon cas, le problème concernait Database. j'ai dû changer cette ligne de code @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)
J'ai ajouté une autre table dans la base de données mais j'ai oublié d'ajouter une table dans la ligne ci-dessus.
J'ai eu la même erreur. J'ai eu deux problèmes.
Vous devrez peut-être ajouter
implémentation 'androidx.room:room-ktx:2.2.5'
J'avais supprimé un fichier référencé en tant que membre dans l'un des fichiers activity_xml. L'erreur ne m'a jamais donné aucun indice jusqu'à ce que je l'ai changé en annotationProcessor au lieu de kapt, puis il a signalé l'erreur, j'ai trouvé le fichier et, bien sûr, j'avais une référence à un fichier que je n'utilisais plus et qui a été supprimé. J'ai supprimé cette référence de données du xml et tout a été effacé. Ensuite, je l'ai remis à kapt.
Je viens de mettre à jour Android Studio IDE vers la version 4.1.1 et j'ai eu un problème similaire.
Ce que j'ai réalisé était ...
… Avant je n'avais pas de classes *_Impl
(je les connais dans Kotlin) et même pas de nouvelles classes *Tests
.
Donc, après avoir "run all the world" pour prendre une solution, j'ai juste fait un choix intuitif et juste: j'ai supprimé tous ces fichiers dans mes packages "construits à la main" qui n'étaient pas là avant la mise à jour d'Android Studio .
Et devine quoi?
Ça a marché. Aucun problème, pas même un problème avec kapt
.
Je ne dis pas que c'est une solution définitive. Mais cela peut fonctionner pour vous.
Passe un bon moment.
Ce problème se produit également si vous avez installé un nouveau plugin kotlin ( 1.4.20-release-Studio4.1-1
) et que vous avez dagger ( kapt 'com.google.dagger:dagger-compiler:2.30'
). Dans un tel cas, une solution pourrait remplacer le plugin: 'kotlin-android-extensions'
obsolète plugin: 'kotlin-android-extensions'
par une liaison de vue ( https://developer.android.com/topic/libraries/view-binding )
veuillez afficher votre code dans le fichier
build.gradle
.veuillez également afficher le code DataBinderMapperImpl.java.
Avez-vous mis à jour vers Android Studio 4? même pb ici
J'ai mis à jour vers Android Studio 4 et j'ai eu la même erreur avec l'utilisation de Room, j'ai pu le corriger temporairement en modifiant l'une de mes requêtes. J'ai initialement eu cette requête: "SELECT case_name FROM SavedCases", puis je l'ai changé en "SELECT * FROM SavedCases", et le message d'erreur est parti. Pour une raison quelconque, je reçois cette erreur uniquement lorsque j'essaie d'interroger uniquement des colonnes spécifiques. Ce n'est pas une solution idéale pour le problème et j'espère que quelqu'un a une meilleure solution.
J'ai eu une erreur similaire et j'ai trouvé une solution qui fonctionne pour moi. Vous avez peut-être fait quelque chose de similaire. stackoverflow.com/questions/63133657/...
pour moi, c'était le constructeur principal dans une classe d'entrée de base de données
J'obtiens cette erreur après la migration vers AndroidX
Il peut y avoir de nombreuses raisons car le message d'erreur n'est pas explicite. Le mien était de rendre un champ @Inject privé avec une poignée de poignard.