Se produjo un error al ejecutar org.jetbrains.kotlin.gradle.internal.KaptExecution

99

De repente, empiezo a recibir este error, y no tengo idea de por qué si alguien me deja saber dónde está este error, será lo suficientemente útil. Todo lo que puedo obtener es esto debido a la nueva actualización de Android Studio. Resumen detallado del error que recibo.

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
Shubham Tater
fuente
muestre su código en el build.gradlearchivo.
Sergey
muestre también el código DataBinderMapperImpl.java.
Sergey
3
¿Ha actualizado a Android Studio 4? mismo pb aquí
Samuel Eminet
2
Actualicé a Android Studio 4 y recibí el mismo error al usar Room, pude solucionarlo temporalmente cambiando una de mis consultas. Inicialmente tuve esta consulta: "SELECT case_name FROM SavedCases", y luego la cambié a "SELECT * FROM SavedCases", y el mensaje de error desapareció. Por alguna razón, solo obtengo este error cuando intento consultar solo columnas específicas. Esta no es una solución ideal para el problema y espero que alguien tenga una solución mejor.
Hani
Tuve un error similar y encontré una solución que funciona para mí. Podría haber hecho algo similar. stackoverflow.com/questions/63133657/…
Mustaqode

Respuestas:

135

La interfaz de usuario de Android Studio solo ocultaba el error ...

cuando ocurrió el error, resaltó el elemento en la vista de lista y mostró un mensaje inútil en la vista de terminal. malo malo

para encontrar el error real, seleccione el elemento raíz en la vista de lista para que Android Studio muestre todo el resultado de la compilación en la vista de terminal, luego desplácese para encontrar el error. bien bien

Eric
fuente
2
si tiene un error de sala de tiempo de compilación (DB), lo mostrará así, eso significa que una o algunas de sus consultas son incorrectas
Idan Damri
51

Tal vez llegué un poco tarde para la respuesta pero, de todos modos, recibí el mismo error. El error de compilación puede deberse a algún error que Android Studio no señala, probablemente debido a que el tamaño del proyecto es muy grande.

Esta es la manera fácil de señalar el error exacto.

  1. En Android Studio, vaya al menú Analizar y haga clic en Inspeccionar código ; Verifique todo el proyecto, haga clic en Aceptar y espere a que finalice la inspección.

    Inspeccionar código

  2. Ahora verá una pestaña que señalará todos los errores, advertencias, etc. y ahora puede resolver el problema real.

    Pestaña errores

Ashir Mehmood
fuente
2
sí, muestra exactamente un error. (Cometí un error en XML)
Hari Shankar S
1
No entiendo por qué Android Studio no muestra el error directamente cuando falla una compilación, no tiene sentido. Gracias por esto, me ayudó mucho
moyo
29

La forma de averiguar cuál es el problema subyacente es ejecutar el siguiente comando:

./gradlew assembleDebug --stacktrace
toobsco42
fuente
14

Tuve el mismo error por un tiempo, luego comencé a verificar los otros paquetes y me enteré de que había cometido un error tipográfico en el código de mi base de datos. Por lo tanto, "Revise su base de datos y otros archivos de clases de actividad y puede encontrar algunos errores allí".

ShankarAnand
fuente
4
¿Qué tipo de errores?
Mustaqode
Para mí fue un error en el gráfico de navegación
Jorge Casariego
En mi caso, olvidé agregar la @Daointerfaz
MyDao
14

Tuve el mismo problema, así que intenté obtener más información haciendo

gradle-> aplicación-> Tareas-> Construir-> ensamblar

Después de esto, obtuve el error exacto que decía "Error al procesar la anotación". Revisé mi clase DAO modificada recientemente y encontré que uno de los tipos de retorno del método no estaba definido.

//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
Ajay Gurappanavar
fuente
gradle->app->Tasks->Build->assemble¿que es eso?
user25
@ user25 Ventana de herramientas de Gradle
Ajay Gurappanavar
11

Cambio

implementation "android.arch.persistence.room:runtime:1.1.1"
kapt "android.arch.persistence.room:compiler:1.1.1"

A

 implementation "androidx.room:room-runtime:2.2.5"
 kapt  "androidx.room:room-compiler:2.2.5"
tuanvn91
fuente
increíble, ha ayudado
user25
8

Si ha actualizado a classpath 'com.android.tools.build:gradle:4.0.0' Reemplace la versión anterior

dependencies {
    classpath 'com.android.tools.build:gradle:3.6.3'
}

Y cambiar gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`
Mujeeb Rahaman T
fuente
16
Esta no es la solución adecuada
Shubham Tater
2
@ShubhamTater Esta es la solución hasta que se arregle gradle4.0.0. Esta es la solución temporal. Una vez que se corrige gradle4.0.0. Podemos actualizar el gradle 4.0 o más
Mujeeb Rahaman T
3
Atrapé esta excepción en 4.0.1
Ярослав Нестеров
8

Para mí, un montón de errores de referencia y un error en las expresiones XML DataBindingprodujeron este error.

He eliminado un archivo <variable/>en un layoutarchivo porque pensé que ya no lo necesito. Olvidé que tenía la variable referenciada en el layoutarchivo.

Luego de construir el proyecto, esto produjo un error, donde no fue posible importar la BindingImplclase, porque no existe y este error solo se mostró como una advertencia paralela al KaptExecutionerror anterior .

Después de buscar por un tiempo, encontré este error y lo resolví. Luego, se mostraron un montón de errores de referencia, porque cambié el nombre de algo y no lo cambió en los Fragmentarchivos. Después de resolver estos errores también, la compilación finalizó sin errores ni advertencias.

René espías
fuente
1
A la derecha, este error siempre está relacionado con el archivo XML que utiliza nuestro enlace de datos.
Shubham Tater
2

En mi caso, utilicé room y uno de mis métodos de base de datos tiene un parámetro no utilizado y, lamentablemente, Android Studio no me advierte correctamente

vahid
fuente
1

Yo tuve el mismo problema. Permítanme explicarles el ejemplo de cómo terminé con el problema y la forma en que lo resolví.

Antes de resolver

@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
)

En el DAO

@Transaction
@Query("SELECT * FROM modules")
abstract suspend fun getModuleSession(): List<ModuleSession>

El error que obtuve fue

A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution

Así que investigué más y encontré el siguiente mensaje

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()

Eliminé el campo IsUpdated de POJO ModuleSession y lo agregué a la tabla de sesiones

Después de los cambios

@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>
)

Por otro lado, verifique si hay algún campo en la SELECTdeclaración que sea sospechoso que cause problemas o puede anotarlo con@Ignore

Sin embargo, puede publicar su código si aún no se siente cómodo.

Espero que pueda ayudar

Ali
fuente
Tengo la solución para mi problema, no sé si funcionará para usted o no, pero la solución es verificar el archivo XML que está vinculando, el enlace es un sistema de tiempo de compilación y funciona para el archivo XML, así que verifíquelo si su hay algún error en él, mostrará este tipo de error. Corregí mi archivo XML y luego todo funciona perfectamente.
Shubham Tater
1
Sí por favor. ¿Cómo profundizaste?
Simo Nyathi
1
@LeonardoSibela lo siento, lo que quise decir es agregar la opción --stacktrace al compilar para poder obtener más información sobre el error.
Ali
Puede agregar la opción --stacktrace desde Archivo-> Configuración-> Compilación, ejecución, implementación-> Compilador-> Opciones de línea de comandos Por cierto, en mi caso me faltaba una dependencia: implementación "androidx.room:room-ktx:$ room_version "
Ámbar
1

Grita la respuesta de @Rene Spies anterior, también recibí este error mientras trabajaba con el enlace de datos. Resulta que al motor de compilación no le gusta cuando pones la @Bindableanotación en un campo en el constructor principal de undata class en Kotlin.

Así que nunca hagas lo siguiente

data class MyAwesomePojo(
    @Bindable
    var firstname: String,
    var lastname: String
)

en cambio, lo que tienes que hacer es

data class MyCorrectAwesomePojo(
    var lastname: String
):{
    @get:Bindable
    var firstname: String
        set(value){
            field = value
        }
}

Bonificación: recuerde verificar los mismos valores antes de configurar el valor en el campo si está tratando de usar un enlace bidireccional como yo para evitar un bucle infinito de configuración y obtención.

EAM
fuente
Tengo la solución para mi problema, no sé si funcionará para usted o no, pero la solución es verificar el archivo XML que está vinculando, el enlace es un sistema de tiempo de compilación y funciona para el archivo XML, así que verifíquelo si su hay algún error en él, mostrará este tipo de error. Corregí mi archivo XML y luego todo funciona perfectamente.
Shubham Tater
1

Curiosamente, recibí este error porque agregué la descripción de Retrofit. Tenga cuidado de no confundir la descripción de Room y Retrofit.

kzncrda
fuente
1

En mi caso, fue porque no estaba implementando Observable en mi ViewModel. Agregué un EditText al diseño de restricción conandroid:text="@={addProductViewModel.inputProductName}"

Una vez que implementé Observableen mi clase ViewModel, el error desapareció

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

Ejemplo completo de enlace de datos MVVM usando fragmentos

Diseño: 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")
    }
}

Espero que esto ayude a R

BRDroid
fuente
1

En mi caso: problema resuelto

Pasos:

  1. Eliminar la variable viewModel: en XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Se eliminaron todas las referencias de enlace de viewModel: en XML .
android:text="@{viewModel.simName}"
  1. Se eliminó la referencia de instancia de viewModel a la asignación de enlace - En actividad
binding.viewModel = viewModel
  1. Proyecto limpio y recompilación.

  2. Agregar variable viewModel: en el proyecto XML & Build .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Agregar referencia de instancia de viewModel a la asignación de enlace: en el proyecto Activity & Build
binding.viewModel = viewModel
  1. Agregue todas las referencias de enlace de viewModel: en el proyecto XML & Build. .
    android:text="@{viewModel.simName}"
  1. Funcionará ahora.

- Espero que también funcione para ti.

V-9- द
fuente
1

Tuve el mismo problema con Room y no estaba usando viewBinding .
Lo arreglé usando exportSchema a falso en mi clase de base de datos.

@Database(entities = [ModelClass::class], version = 1, exportSchema = false)
abstract class ModelDatabase: RoomDatabase() {}

Recuerde: exportScehma podría variar según su caso de uso, generalmente permanece falso, así que lo puse en falso.

USMAN osman
fuente
1

En mi caso, he cambiado globalmente una variable UserManager a NetWorkManager y en todos los lugares donde había clases de UserManager se convirtieron en NetworkManager.

Como estoy usando Hilt, tuve que volver a construir el proyecto.

Limpié el Proyecto y Kotlin mostró dónde estaban los errores.

Dimitri de Jesus
fuente
1

También me encontré con el mismo problema, así que, por solo intentarlo, eliminé la carpeta .idea y la carpeta .gradle del proyecto, luego también eliminé la carpeta de compilación dentro de la carpeta de la aplicación y luego reinicié el IDE de Android Studio y me funciona

fahad.t
fuente
1

Para mí, el problema era tener 2 claves primarias definidas en el modelo.

// 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,

Tuve que reconstruir el proyecto y cambiar un poco la clase Dao para activar el mensaje sobre el problema.

Denis Korobitsin
fuente
1

para mí fue el constructor principal en una clase de entrada de base de datos

Dan Alboteanu
fuente
1

Este método se me ocurre todo, hay un problema con la Roombase de datos e Coroutines, incluso, errores ortográficos. Por último, al intentar devolver un valor único con un flujo después de la columna insertada, mediante:Flow<Long> de las clases de DAO.

Debe ser una suspendfunción y solo Longescribir para regresar después de la columna insertada.

Estos problemas son ambiguos en algún momento, así que intente leer todos los mensajes de Salida de compilación, el mensaje que me ayudó fue: error: Not sure how to handle insert method's return type.

MohammadL
fuente
1

Nada funcionó Probé todo y finalmente encontré un pequeño error que estaba creando un gran problema.

Regrese a cada archivo recién creado para la base de datos y verifique cuidadosamente el código línea por línea de cada archivo.

Verifique la clase de base de datos y verifique si Dao está declarado como, por ejemplo,

abstract val commentDatabaseDao: CommentDatabaseDao

declaro como val no var , esto fue en mi caso y finalmente para esto se resolvió.

Sachin Harne
fuente
1

Me acaba de pasar esto. Otro desarrollador no había completado una fusión correctamente, por lo que esta línea estaba en el código

<<<<<<< HEAD

En lugar de obtener un error de compilación, obtuve el error KaptExecution.

Kevin
fuente
1

Después de mucho dolor, decidí intentarlo en annotationProcessorlugar de kaptesperar que al menos muestre un mensaje de error o cualquier cosa que pueda ayudarme a localizar la fuente. Pero afortunadamente (o desafortunadamente, debido al tiempo perdido), se construyó con éxito sin errores. Es principalmente un error en kaptsí mismo. Entonces, pruebe esta solución y puede ayudar.

Salih Kavaf
fuente
1

En verdad, el problema radica en la tipografía de su código. En cuanto a mí, tuve que dejar de usar el complemento kapt. Luego cambié para usar annotationProcessor. Declaró claramente cuál fue el error después de la construcción.

Luego puede volver a usar kapt después de haber resuelto el error.

Para mí, el error que tuve fue que intenté por error la vinculación de datos bidireccional en una vista de texto.

Mohammed Ahmed
fuente
1

Yo tuve el mismo problema. En mi caso, el problema fue sobre la base de datos. tuve que cambiar esta línea de código @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

Agregué otra tabla en la base de datos pero olvidé agregar una tabla en la línea de arriba.

Konstantinos Evangelidis
fuente
1

Yo tenía el mismo error. Tuve dos problemas.

  1. Es posible que deba agregar

    implementación 'androidx.room:room-ktx:2.2.5'

  2. Había eliminado un archivo al que se hacía referencia como miembro en uno de los archivos activity_xml. El error nunca me dio ninguna pista hasta que lo cambié a annotationProcessor en lugar de kapt, luego señaló el error, encontré el archivo y, efectivamente, tenía una referencia a un archivo que ya no usaba y fue eliminado. Eliminé esta referencia de datos del xml y lo aclaré todo. Luego lo devolví a kapt.

Sam
fuente
0

en algunos casos puede ayudar a gradle.properties

kapt.include.compile.classpath=true
Sergei Maleev
fuente
0

en mi caso, he agregado esta línea

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }
Mojtaba Haddadi
fuente
0

Acabo de actualizar Android Studio IDE a la versión 4.1.1 y tuve un problema similar.

Lo que me di cuenta fue ...

… Antes no tenía algunas *_Implclases (las sé en cosas de Kotlin) y ni siquiera algunas *Testsclases nuevas .

Entonces, después de "ejecutar todo el mundo" para encontrar una solución, simplemente hice una elección intuitiva y justa: eliminé todos esos archivos dentro de mis paquetes "construidos a mano" que no estaban allí antes de la actualización de Android Studio .

¿Y adivina qué?

Funcionó. Sin problemas, ni siquiera un problema kapt.

No digo que sea una solución final. Pero puede funcionar para ti.

Tener una buena.

Thiengo
fuente