111
votes

Une erreur s'est produite lors de l'exécution de org.jetbrains.kotlin.gradle.internal.KaptExecution

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


8 commentaires

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.


29 Réponses :


8
votes

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'
}


3 commentaires

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



14
votes

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."


3 commentaires

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



8
votes

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.


1 commentaires

Cette erreur est toujours liée au fichier XML que notre liaison de données utilise.



1
votes

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


4 commentaires

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 "



1
votes

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.


1 commentaires

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.



17
votes

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


3 commentaires

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



12
votes

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"


1 commentaires

incroyable, ça a aidé



1
votes

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.


0 commentaires

1
votes

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


0 commentaires

1
votes

Dans mon cas: problème résolu

Pas:

  1. Supprimer la variable viewModel - En XML .
    android:text="@{viewModel.simName}"
  1. Suppression de toutes les références de liaison viewModel - Dans XML .
binding.viewModel = viewModel
  1. Suppression de la référence d'instance viewModel au mappage de liaison - En activité
< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Nettoyer le projet et recompiler.

  2. Ajouter une variable viewModel - Dans un projet XML & Build .

binding.viewModel = viewModel
  1. Ajouter une référence d'instance viewModel au mappage de liaison - Dans le projet Activity & Build
android:text="@{viewModel.simName}"
  1. Ajouter toutes les références de liaison viewModel - Dans le projet XML & Build. .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Cela fonctionnera maintenant.

- J'espère que cela fonctionnera pour vous aussi.


0 commentaires

56
votes

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.

  1. 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.

    Inspecter le code

  2. Vous verrez maintenant un onglet qui pointera toutes les erreurs, avertissements, etc. et vous pouvez maintenant résoudre le problème réel.

    Onglet Erreurs


2 commentaires

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é



0
votes

dans certains cas, cela peut aider gradle.properties

kapt.include.compile.classpath=true


0 commentaires

1
votes

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.


0 commentaires

33
votes

La façon de savoir quel est le problème sous-jacent consiste à exécuter la commande suivante:

./gradlew assembleDebug --stacktrace


0 commentaires

0
votes

dans mon cas, j'ai ajouté cette ligne

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }


0 commentaires

1
votes

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.


0 commentaires

1
votes

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


0 commentaires

3
votes

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


0 commentaires

1
votes

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.


0 commentaires

4
votes

essayez de construire votre projet avec

kapt.use.worker.api=false 

dans votre fichier de paramètres gradle.properties

Référence: https://youtrack.jetbrains.com/issue/KT-40750


0 commentaires

164
votes

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. mauvais mauvais

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. bien bien


3 commentaires

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



1
votes

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.


0 commentaires

1
votes

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.


0 commentaires

1
votes

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.


0 commentaires

2
votes

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.


1 commentaires

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.



3
votes

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.


0 commentaires

1
votes

J'ai eu la même erreur. J'ai eu deux problèmes.

  1. Vous devrez peut-être ajouter

    implémentation 'androidx.room:room-ktx:2.2.5'

  2. 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.


0 commentaires

0
votes

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.


0 commentaires

2
votes

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 )


0 commentaires