315 votes

Un échec s'est produit lors de l'exécution de org.jetbrains.kotlin.gradle.internal.KaptExecution

Tout d'un coup, je commence à obtenir cette erreur, et je ne suis pas obtenir idée pourquoi si quelqu'un juste me faire savoir où cette erreur est, sera assez utile. Autant que je suis capable d'obtenir est ce en raison de la nouvelle mise à jour de Android studio. 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

2voto

BRDroid Points 763

Dans mon cas, c'était parce que je n'implémentais pas Observable dans mon ViewModel. J'ai ajouté un EditText à la disposition de la contrainte avec android:text="@={addProductViewModel.inputProductName}"

Une fois que j'ai mis en place Observable dans ma classe ViewModel l'erreur a disparu

ViewModel

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

<?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")
    }
}

J'espère que cela vous aidera R

2voto

V-9-द Points 301

Dans mon cas : Problème résolu

Des pas :

  1. Suppression de la variable viewModel - En XML .

    <variable name="viewModel" type="com.xx.AppViewModel" / >

  2. Suppression de toutes les références à la liaison viewModel. En XML .

    android:text="@{viewModel.simName}"

  3. Suppression de la référence à l'instance viewModel dans le mappage de liaison - En activité

    binding.viewModel = viewModel

  4. Projet propre y recompiler.

  5. Ajouter la variable viewModel - En XML & Projet de construction .

    < variable name="viewModel" type="com.xx.AppViewModel" / >

  6. Ajout de la référence de l'instance viewModel au mapping de liaison - Dans le projet Activity & Build

    binding.viewModel = viewModel

  7. Ajouter toutes les références de liaison du viewModel - Dans le projet XML & Build. .

    android:text="@{viewModel.simName}"
  8. Cela va fonctionner maintenant.

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

2voto

USMAN osman Points 647

J'ai eu le même problème avec Chambre et je n'utilisais pas viewBinding .
Je l'ai corrigé en utilisant exportSchema à 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 selon votre cas d'utilisation, généralement il reste faux donc je l'ai mis à faux.

2voto

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.

Comme j'utilise Hilt, j'ai dû reconstruire le projet.

J'ai nettoyé le projet et Kotlin a montré où étaient les erreurs.

2voto

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 modifier un peu la classe Dao pour déclencher le message sur le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X