Ocorreu uma falha ao executar org.jetbrains.kotlin.gradle.internal.KaptExecution

131

De repente, começo a receber esse erro e não estou entendendo por que se alguém me informar onde está esse erro, será útil o suficiente. O máximo que consigo obter é por causa da nova atualização do Android Studio. Resumo detalhado do erro que estou recebendo.

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
fonte
mostre seu código no build.gradlearquivo.
Sergey
mostre o código DataBinderMapperImpl.java também.
Sergey
3
Você atualizou para o Android Studio 4? mesmo pb aqui
Samuel Eminet
2
Atualizei para o Android Studio 4 e tenho recebido o mesmo erro ao usar o Room. Consegui corrigi-lo temporariamente alterando uma das minhas consultas. Inicialmente eu tinha esta consulta: "SELECT case_name FROM SavedCases", e depois mudei para "SELECT * FROM SavedCases", e a mensagem de erro foi embora. Por algum motivo, só recebo esse erro quando tento consultar apenas colunas específicas. Esta não é uma solução ideal para o problema e espero que alguém tenha uma solução melhor.
Hani
Eu tive um erro semelhante e encontrei uma solução que funciona para mim. Você pode ter feito algo semelhante. stackoverflow.com/questions/63133657/…
Mustaqode

Respostas:

198

A IU do Android Studio estava apenas escondendo o erro ...

quando o erro ocorreu, ele destacou o item na exibição de lista e mostrou uma mensagem inútil na exibição do terminal. mal mal

para encontrar o erro real, selecione o item raiz na visualização de lista para que o Android Studio exiba toda a saída da compilação na visualização do terminal e, em seguida, role para localizar o erro. bom Bom

Eric
fonte
6
se você tiver um erro Room (DB) em tempo de compilação, ele mostrará assim - isso significa que uma ou algumas de suas consultas estão erradas
Idan Damri,
Eu acho que vai aparecer assim para qualquer erro de banco de dados em tempo de compilação ... no meu caso, foi um erro de banco de dados em tempo de compilação sobre um objeto de entidade configurado incorretamente ...
Eric
1
A julgar pelos votos positivos, a decisão da IU aqui não é boa
Daniel Wilson
1
Deve ser marcada a resposta correta
Mike6679
56

Talvez eu esteja um pouco atrasado para a resposta mas, de qualquer forma, estava recebendo o mesmo erro. A falha de construção pode ser causada por algum erro que o Android Studio falha em apontar, provavelmente devido ao tamanho do projeto ser muito grande.

Esta é a maneira fácil de apontar o erro exato.

  1. No Android Studio, acesse o menu Analisar e clique em Inspecionar Código ; verifique todo o projeto, clique em OK e aguarde a conclusão da inspeção.

    Inspecionar Código

  2. Agora você verá uma guia que apontará todos os erros, avisos, etc. e agora você pode resolver o problema real.

    Guia de erros

Ashir Mehmood
fonte
2
sim, está mostrando exatamente erro. (cometi um erro no XML)
Hari Shankar S
2
Não entendo por que o Android Studio não mostra o erro diretamente quando uma compilação falha, não faz sentido. Obrigado por isso, me ajudou muito
moyo
34

A maneira de descobrir qual é o problema subjacente é executar o seguinte comando:

./gradlew assembleDebug --stacktrace
toobsco42
fonte
17

Eu tive o mesmo problema, então tentei obter mais informações, fazendo

gradle-> app-> Tasks-> Build-> assemble

Depois disso, recebi o erro exato dizendo "Erro durante o processamento da anotação". Eu verifiquei minha classe DAO recentemente ajustada e descobri que um dos tipos de retorno do método não foi 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
fonte
3
gradle->app->Tasks->Build->assembleo que é isso?
usuário 25
@ user25 Janela da ferramenta Gradle
Ajay Gurappanavar
14

Eu tive o mesmo erro por um tempo, então comecei a verificar os outros pacotes que descobri que cometi um erro de digitação no código do meu banco de dados. Portanto, "Vá até o seu banco de dados e outros arquivos da classe de atividades e pode encontrar alguns erros lá."

ShankarAnand
fonte
4
Que tipo de erros?
Mustaqode
No meu caso, esqueci de adicionar a @Daointerface MyDao
Ishaan Kumar
13

mudança

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

Para

 implementation "androidx.room:room-runtime:2.2.5"
 kapt  "androidx.room:room-compiler:2.2.5"
tuanvn91
fonte
incrível, ajudou
usuário 25
8

Se você atualizou para o classpath 'com.android.tools.build:gradle:4.0.0' Substitua a versão anterior

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

And Change gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`
Mujeeb Rahaman T
fonte
20
Esta não é a solução adequada
Shubham Tater
2
@ShubhamTater Esta é a solução até que gradle4.0.0 seja consertado. Esta é a solução temporária. Assim que gradle4.0.0 for corrigido. Podemos atualizar o gradle 4.0 ou mais
Mujeeb Rahaman T
4
Eu peguei essa exceção em 4.0.1
Ярослав Нестеров
8

Para mim, um monte de erros de referência e um erro nas expressões XML DataBindingproduziram esse erro.

Excluí um <variable/>em um layoutarquivo porque pensei: não preciso mais dele. Eu esqueci que tinha a variável referenciada nolayout arquivo.

Após a construção do projeto, este gerou um erro, onde não foi possível importar a BindingImplclasse, pois ela não existe e esse erro só foi mostrado como um aviso paralelo aoKaptExecution erro .

Depois de pesquisar por um tempo, encontrei esse erro e resolvi. Então, um monte de erros de referência foram mostrados, porque eu renomei algo e ele não renomeei nos Fragmentarquivos. Depois de resolver esses erros também, a compilação foi concluída para mim sem erros ou avisos.

René Spies
fonte
1
Certo, este erro está sempre relacionado ao arquivo XML que nosso databinding está usando.
Shubham Tater
4

Eu tive o mesmo problema. Deixe-me mostrar um exemplo de como resolvi o problema e a maneira como o resolvi. Talvez você possa ter uma visão maior.

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
)

No DAO

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

O erro que recebi foi

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

Então eu cavei mais fundo e encontrei a mensagem abaixo

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

Removi o campo IsUpdated do POJO ModuleSession e o adicionei à tabela de sessão

Depois das mudanças

@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 outro lado, verifique se há algum campo na SELECTdeclaração que seja suspeito de causar problemas ou você pode anotá-lo com@Ignore

No entanto, você pode postar seu código se ainda não estiver confortável.

Espero que possa ajudar

Todos
fonte
Eu tenho a solução para o meu problema, não sei se vai funcionar para você ou não, mas a alma é verificar seu arquivo XML que você está vinculando, o binding é um sistema de tempo de compilação e funciona para o arquivo XML, então verifique se o seu se houver algum erro nele ele mostrará esse tipo de erro. Corrijo meu arquivo XML e tudo funciona perfeitamente.
Shubham Tater
2
Sim por favor. como você cavou mais fundo?
Simo Nyathi
2
@LeonardoSibela desculpe por isso, o que eu quis dizer é adicionar a opção --stacktrace ao compilar para que eu possa obter mais informações sobre o erro.
Ali
Você pode adicionar a opção --stacktrace em Arquivo-> Configurações-> Compilar, Execução, Implementação-> Compilador-> Opções de linha de comando Btw, no meu caso, estava faltando uma dependência: implementação "androidx.room:room-ktx:$ room_version "
Amber
4

No meu caso, usei room e um dos meus métodos databasDao tem um parâmetro não utilizado e, infelizmente, o android studio não me avisa corretamente

vahid
fonte
no meu caso, esqueci de dar @PrimaryKey para um dos meus alunos
varotariya vajsi
4

Eu tive o mesmo problema. No meu caso, o problema era sobre Banco de Dados. eu tive que mudar esta linha de código @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

Eu adicionei outra tabela no banco de dados, mas esqueci de adicionar a tabela na linha acima.

Konstantinos Evangelidis
fonte
2

Depois de muita dor, decidi tentar ao annotationProcessorinvés de kaptesperar que pudesse pelo menos mostrar uma mensagem de erro ou qualquer coisa que possa me ajudar a localizar a fonte. Mas felizmente (ou infelizmente; por causa do tempo perdido), ele foi construído com sucesso e sem erros. É principalmente um bug em kaptsi mesmo. Portanto, experimente esta solução e pode ajudar.

Salih Kavaf
fonte
obrigado por isso. Troquei para usar 'annotationProcessor' e foi construído com sucesso. Então mudei de volta para 'kapt' e ele foi capaz de construir novamente.
Mark Lapasa
2

Este problema também acontece se você instalou um novo plugin kotlin ( 1.4.20-release-Studio4.1-1) e tem o dagger ( kapt 'com.google.dagger:dagger-compiler:2.30'). Nesse caso, uma solução pode substituir o uso suspenso plugin: 'kotlin-android-extensions'pela vinculação de visualização ( https://developer.android.com/topic/libraries/view-binding )

Kairat Doshekenov
fonte
1

Grite para a resposta de @Rene Spies acima, também recebi este erro ao trabalhar com ligação de dados. Acontece que o mecanismo de construção não gosta quando você coloca a @Bindableanotação em um campo no construtor principal de umdata class em Kotlin.

Portanto, nunca faça o seguinte,

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

em vez disso, o que você precisa fazer é

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

Bônus: lembre-se de verificar os mesmos valores antes de definir o valor para o campo se você estiver tentando usar a vinculação bidirecional como eu, para evitar o loop infinito de configuração e obtenção.

EAM
fonte
Eu tenho a solução para o meu problema, não sei se vai funcionar para você ou não, mas a alma é verificar seu arquivo XML que você está vinculando, o binding é um sistema de tempo de compilação e funciona para o arquivo XML, então verifique se o seu se houver algum erro nele ele mostrará esse tipo de erro. Corrijo meu arquivo XML e tudo funciona perfeitamente.
Shubham Tater
1

Curiosamente, estava recebendo esse erro porque adicionei a descrição do Retrofit. Tenha cuidado para não confundir a descrição de Sala e Retrofit.

snorlax
fonte
1

No meu caso, foi porque eu não estava implementando Observable em meu ViewModel. Eu adicionei um EditText ao layout de restrição comandroid:text="@={addProductViewModel.inputProductName}"

Assim que implementei Observable em minha classe ViewModel, o erro foi embora

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

Exemplo completo para ligação de dados MVVM usando fragmentos

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

Espero que isso ajude R

BRDroid
fonte
1

No meu caso: problema resolvido

Passos:

  1. Remova a variável viewModel - em XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Removidas todas as referências de ligação viewModel - em XML .
android:text="@{viewModel.simName}"
  1. Removida a referência da instância viewModel para o mapeamento de ligação - Em atividade
binding.viewModel = viewModel
  1. Limpe o projeto e recompile.

  2. Adicionar a variável viewModel - No projeto XML & Build .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Adicionar referência de instância de viewModel ao mapeamento de ligação - Em atividade e projeto de compilação
binding.viewModel = viewModel
  1. Adicione todas as referências de ligação viewModel - No projeto XML e Build. .
    android:text="@{viewModel.simName}"
  1. Vai funcionar agora.

- Espero que funcione para você também.

V-9- द
fonte
1

Eu tive o mesmo problema com o Room e não estava usando o viewBinding .
Eu corrigi- lo usando exportSchema para false na minha classe de banco de dados.

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

Lembre-se: exportScehma pode variar de acordo com o seu caso de uso, geralmente permanece falso, então eu o coloco como falso.

USMAN osman
fonte
1

No meu caso, mudei globalmente uma variável UserManager para NetWorkManager e em todos os lugares onde havia classes do UserManager, elas passaram a ser NetworkManager.

Como estou usando o Hilt, tive que construir o projeto novamente.

Limpei o projeto e Kotlin mostrou onde estavam os erros.

Dimitri de Jesus
fonte
1

Eu também fui encontrado com o mesmo problema, então por apenas tentar eu apaguei a pasta .idea e a pasta .gradle do projeto, então eu também apaguei a pasta build dentro da pasta do app e reiniciei o IDE do Android Studio e funcionou para mim

fahad.t
fonte
1

Para mim, o problema era ter 2 chaves primárias definidas no 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,

Tive que reconstruir o projeto e mudar um pouco a classe Dao para acionar a mensagem sobre o problema.

Denis Korobitsin
fonte
1

Esse método me ocorre tudo que há um problema com Roombanco de dados e Coroutines, até mesmo erros ortográficos. Por último foi ao tentar retornar um único valor com um Fluxo após a coluna inserida, por: Flow<Long>das classes DAOs.

Deve ser uma suspendfunção e apenas Longdigitar para retornar após a coluna inserida.

Esses problemas são ambíguos às vezes, então tente ler todas as mensagens do Build Output, a mensagem que me ajudou foi: error: Not sure how to handle insert method's return type.

MohammadL
fonte
1

Nada funcionou, tentei de tudo e finalmente encontrei um pequeno erro que estava criando um grande problema.

Volte a cada arquivo recém-criado para banco de dados e verifique o código linha por linha de cada arquivo com cuidado.

Verifique a classe de banco de dados e verifique se Dao é declarado como por exemplo,

abstract val commentDatabaseDao: CommentDatabaseDao

declare como val not var , isso foi no meu caso e finalmente para isso resolvido.

Sachin Harne
fonte
1

Eu simplesmente tive isso acontecendo comigo. Outro dev não completou uma mesclagem corretamente, então esta linha estava no código

<<<<<<< HEAD

Em vez de obter um erro de compilação, obtive o erro KaptExecution.

Kevin
fonte
1

Eu tive o mesmo erro. Eu tive dois problemas.

  1. Você pode precisar adicionar

    implementação 'androidx.room:room-ktx:2.2.5'

  2. Eu havia excluído um arquivo que era referenciado como membro em um dos arquivos activity_xml. O erro nunca me deu nenhuma pista até que mudei para annotationProcessor em vez de kapt, depois apontou o erro, encontrei o arquivo e, com certeza, tinha uma referência a um arquivo que não usava mais e foi excluído. Eu removi essa referência de dados do xml e ele limpou tudo. Então eu coloquei de volta no kapt.

Sam
fonte
0

em alguns casos, pode ajudar gradle.properties

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

no meu caso, eu adicionei esta linha

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }
Mojtaba Haddadi
fonte
0

Acabei de atualizar o IDE do Android Studio para a versão 4.1.1 e tive um problema semelhante.

O que eu percebi foi ...

... antes eu não tinha algumas *_Implaulas (eu sei sobre elas no material de Kotlin) e nem mesmo algumas novas*Tests aulas .

Então, depois de “rodar o mundo todo” para encontrar uma solução, fiz uma escolha intuitiva e justa: excluí todos os arquivos de meus pacotes "feitos à mão" que não estavam lá antes da atualização do Android Studio .

E adivinha?

Funcionou. Sem problemas, nem mesmo um problema sobrekapt .

Não estou dizendo que seja uma solução final. Mas pode funcionar para você.

Tenha um bom dia.

Thiengo
fonte
0

Sim, também recebi esse erro e era um Roomproblema relacionado.

Eu tinha definido o meu TypeConverters, mas não anotada meu Room databasecom: @TypeConverters(TypeConverter.class).

Izak
fonte