Wystąpił błąd podczas wykonywania org.jetbrains.kotlin.gradle.internal.KaptExecution

133

Nagle zaczynam otrzymywać ten błąd i nie mam pojęcia, dlaczego jeśli ktoś po prostu poinformuje mnie, gdzie jest ten błąd, będzie wystarczająco pomocny. Wszystko, co mogę uzyskać, to dzięki nowej aktualizacji studia Android. Szczegółowe podsumowanie błędu, który otrzymuję.

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
źródło
proszę pokazać swój kod w build.gradlepliku.
Siergiej
proszę również pokazać kod DataBinderMapperImpl.java.
Siergiej
3
Czy zaktualizowałeś system Android Studio 4? to samo pb tutaj
Samuel Eminet
2
Zaktualizowałem do Android Studio 4 i otrzymałem ten sam błąd podczas korzystania z Pokoju, udało mi się to tymczasowo naprawić, zmieniając jedno z moich zapytań. Na początku miałem takie zapytanie: „SELECT nazwa_ przypadku z zapisanych skrzynek”, a następnie zmieniłem je na „WYBIERZ * FROM zapisanych skrzynek” i komunikat o błędzie zniknął. Z jakiegoś powodu ten błąd pojawia się tylko wtedy, gdy próbuję przeszukiwać tylko określone kolumny. Nie jest to idealne rozwiązanie problemu i mam nadzieję, że ktoś ma lepsze rozwiązanie.
Hani
Miałem podobny błąd i znalazłem rozwiązanie, które działa dla mnie. Mogłeś zrobić coś podobnego. stackoverflow.com/questions/63133657/…
Mustaqode

Odpowiedzi:

199

Interfejs użytkownika Android Studio właśnie ukrywał błąd ...

gdy wystąpił błąd, podświetlał element w widoku listy i wyświetlał nieprzydatny komunikat w widoku terminala. zły zły

Aby znaleźć rzeczywisty błąd, wybierz element główny w widoku listy, aby Android Studio wyświetlił cały wynik kompilacji w widoku terminala, a następnie przewiń, aby znaleźć błąd. dobrze dobrze

Eric
źródło
6
jeśli masz błąd pokoju (DB) w czasie kompilacji, pokaże to w ten sposób - oznacza to, że jedno lub kilka twoich zapytań jest błędnych
Idan Damri
Wydaje mi się, że pokaże się tak dla każdego błędu bazy danych w czasie kompilacji ... w moim przypadku był to błąd bazy danych Realm w czasie kompilacji dotyczący nieprawidłowo skonfigurowanego obiektu encji ...
Eric
1
Sądząc po pozytywnych opiniach, decyzja UI tutaj nie jest dobra
Daniel Wilson,
1
To powinno być oznaczone jako poprawna odpowiedź
Mike6679
56

Może trochę się spóźniłem na odpowiedź, ale mimo wszystko otrzymywałem ten sam błąd. Błąd kompilacji może być spowodowany błędem, na który Android Studio nie wskazuje, prawdopodobnie ze względu na bardzo duży rozmiar projektu.

Oto prosty sposób na wskazanie dokładnego błędu.

  1. W Android studio przejdź do menu Analiza i kliknij Sprawdź kod ; sprawdź cały projekt, kliknij OK i poczekaj na zakończenie inspekcji.

    Sprawdź kod

  2. Teraz zobaczysz kartę, która wskaże wszystkie błędy, ostrzeżenia itp. I możesz teraz rozwiązać prawdziwy problem.

    Karta Błędy

Ashir Mehmood
źródło
2
tak, pokazuje dokładnie błąd. (popełniłem błąd w XML)
Hari Shankar S
2
Nie rozumiem, dlaczego Android Studio nie wyświetla błędu bezpośrednio, gdy kompilacja się nie powiedzie, nie ma to sensu. Dzięki za to, bardzo mi pomogło
moyo
34

Aby dowiedzieć się, na czym polega problem, należy uruchomić następujące polecenie:

./gradlew assembleDebug --stacktrace
toobsco42
źródło
17

Mam ten sam problem, więc próbowałem uzyskać więcej informacji, robiąc

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

Po tym wystąpił dokładny błąd „Błąd podczas przetwarzania adnotacji”. Sprawdziłem ostatnio zmodyfikowaną klasę DAO i stwierdziłem, że jeden z typów zwracanych metod nie został zdefiniowany.

//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
źródło
3
gradle->app->Tasks->Build->assembleco to jest?
user25
@ user25 Okno narzędzia Gradle
Ajay Gurappanavar
14

Przez jakiś czas miałem ten sam błąd, a potem zacząłem sprawdzać inne pakiety i dowiedziałem się, że popełniłem błąd w kodzie bazy danych. Tak więc, „Przejrzyj swoją bazę danych i inne pliki klas aktywności, możesz znaleźć tam błędy”.

ShankarAnand
źródło
4
Jakie błędy?
Mustaqode
W moim przypadku zapomniałem dodać @Daow interfejsie My√
Ishaan Kumar
13

Zmiana

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

Do

 implementation "androidx.room:room-runtime:2.2.5"
 kapt  "androidx.room:room-compiler:2.2.5"
tuanvn91
źródło
niesamowite, pomogło
użytkownik25
8

Jeśli zaktualizowałeś do classpath „com.android.tools.build:gradle:4.0.0” Zastąp poprzednią wersję

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

I zmień gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`
Mujeeb Rahaman T
źródło
20
To nie jest właściwe rozwiązanie
Shubham Tater
2
@ShubhamTater To jest rozwiązanie do naprawy gradle4.0.0. To jest rozwiązanie tymczasowe. Po naprawieniu gradle4.0.0. Możemy zaktualizować gradle 4.0 lub
nowszy
4
Złapałem ten wyjątek 4.0.1
Ярослав Нестеров
8

Jak dla mnie, kilka błędów odniesienia i błąd w wyrażeniach XML DataBindingspowodował ten błąd.

Usunąłem <variable/>w layoutpliku, bo pomyślałem, że już go nie potrzebuję. Zapomniałem, że mam zmienną, do której odwołuje się layoutplik.

Po zbudowaniu projektu spowodowało to błąd, w którym nie można było zaimportować BindingImplklasy, ponieważ nie istnieje, a ten błąd był wyświetlany tylko jako ostrzeżenie równolegle do powyższego KaptExecutionbłędu.

Po dłuższych poszukiwaniach znalazłem ten błąd i rozwiązałem go. Następnie pojawiło się kilka błędów odwołań, ponieważ zmieniłem nazwę czegoś i nie zmieniłem nazwy w Fragmentplikach. Po naprawieniu również tych błędów, kompilacja zakończyła się dla mnie bez błędów i ostrzeżeń.

René Spies
źródło
1
Tak, ten błąd jest zawsze powiązany z plikiem XML, którego używa nasze powiązanie z danymi.
Shubham Tater
4

Miałem ten sam problem. Pozwólcie, że przedstawię wam przykład, w jaki sposób doszedłem do problemu i jak go rozwiązałem, być może możesz uzyskać szerszy obraz.

Przed rozwiązaniem

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

W DAO

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

Otrzymałem błąd

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

Poszedłem więc głębiej i znalazłem poniższą wiadomość

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

Usunąłem pole IsUpdated z POJO ModuleSession i dodałem je do tabeli sesji

Po zmianach

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

Z drugiej strony sprawdź krzyżowo, czy w SELECToświadczeniu jest jakieś pole, które jest podejrzanym przyczyną problemów lub możesz dodać do niego adnotację@Ignore

Możesz jednak opublikować kod, jeśli nadal nie czujesz się komfortowo.

Mam nadzieję, że to pomoże

Ali
źródło
Mam rozwiązanie mojego problemu, nie wiem, czy to zadziała dla ciebie, czy nie, ale dusza jest taka, aby sprawdzić plik XML, który wiążesz, powiązanie jest systemem czasu kompilacji i działa dla pliku XML, więc sprawdź, czy ich jeśli wystąpi jakiś błąd, pokaże ten typ błędu. Poprawiam plik XML i wszystko działa idealnie.
Shubham Tater
2
Tak proszę. jak kopałeś głębiej?
Simo Nyathi
2
@LeonardoSibela przepraszam za to, chciałem powiedzieć, że dodałem opcję --stacktrace podczas budowania, aby uzyskać więcej informacji na temat błędu.
Ali
Możesz dodać opcję --stacktrace z Plik-> Ustawienia-> Build, Execution, Deployment-> Compiler-> Command-line Options Btw w moim przypadku brakowało mi zależności: implementacja "androidx.room:room-ktx:$ room_version "
Bursztynowy
4

W moim przypadku użyłem room i jedna z moich metod Databas TX ma nieużywany parametr i niestety android studio nie ostrzega mnie poprawnie

vahid
źródło
w moim przypadku zapomniałem podać @PrimaryKey jednej z moich klas
varotariya vajsi
4

Miałem ten sam problem. W moim przypadku problem dotyczył bazy danych. musiałem zmienić tę linię kodu @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

Dodałem kolejną tabelę w bazie danych, ale zapomniałem dodać tabelę w linii powyżej.

Konstantinos Evangelidis
źródło
2

Po wielu bólach postanowiłem spróbować annotationProcessorzamiast kaptmieć nadzieję, że może przynajmniej pokazać komunikat o błędzie lub cokolwiek, co pomoże mi zlokalizować źródło. Ale na szczęście (lub niestety; z powodu straconego czasu) został pomyślnie zbudowany bez żadnych błędów. To głównie błąd kaptsam w sobie. Więc wypróbuj to rozwiązanie, a może pomóc.

Salih Kavaf
źródło
dzięki za to. Zmieniłem go na 'annotationProcessor' i udało mi się zbudować. Potem przełączyłem go z powrotem na „kapt” i mógł znowu się budować.
Mark Lapasa
2

Ten problem występuje również, jeśli zainstalowałeś nową wtyczkę kotlin ( 1.4.20-release-Studio4.1-1) i masz dagger ( kapt 'com.google.dagger:dagger-compiler:2.30'). W takim przypadku jednym rozwiązaniem może być zastąpienie przestarzałego plugin: 'kotlin-android-extensions'powiązaniem widoku ( https://developer.android.com/topic/libraries/view-binding )

Kairat Doshekenov
źródło
1

Krzyczeć na powyższą odpowiedź @Rene Spies. Również dostałem ten błąd podczas pracy z wiązaniem danych. Okazuje się, że silnik kompilacji nie lubi tego, gdy umieścisz @Bindableadnotację w polu w głównym konstruktorze plikudata class w Kotlinie.

Więc nigdy nie wykonuj następujących czynności,

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

zamiast tego musisz zrobić

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

Bonus: pamiętaj, aby sprawdzić te same wartości przed ustawieniem wartości na pole, jeśli próbujesz użyć dwustronnego wiązania, takiego jak ja, aby zapobiec nieskończonemu zapętleniu ustawiania i pobierania.

EAM
źródło
Mam rozwiązanie mojego problemu, nie wiem, czy to zadziała dla ciebie, czy nie, ale dusza jest taka, aby sprawdzić plik XML, który wiążesz, powiązanie jest systemem czasu kompilacji i działa dla pliku XML, więc sprawdź, czy ich jeśli wystąpi jakiś błąd, pokaże ten typ błędu. Poprawiam plik XML i wszystko działa idealnie.
Shubham Tater
1

Co ciekawe, otrzymywałem ten błąd, ponieważ dodałem opis retrofitu. Uważaj, aby nie pomylić opisu pokoju i modernizacji.

snorlax
źródło
1

W moim przypadku było tak, ponieważ nie implementowałem Observable w moim ViewModel. Dodałem EditText do układu ograniczeń za pomocąandroid:text="@={addProductViewModel.inputProductName}"

Raz wdrożyłem Observable w mojej klasie ViewModel błąd zniknął

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

Kompletny przykład dla wiązania danych MVVM przy użyciu fragmentów

Układ - 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")
    }
}

Mam nadzieję, że to pomoże R.

BRDroid
źródło
1

W moim przypadku: problem rozwiązany

Kroki:

  1. Usuń zmienną viewModel - w formacie XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Usunięto wszystkie odwołania do powiązań viewModel - w formacie XML .
android:text="@{viewModel.simName}"
  1. Usunięto odwołanie do wystąpienia viewModel do mapowania powiązań - w działaniu
binding.viewModel = viewModel
  1. Wyczyść projekt i przekompiluj.

  2. Dodaj zmienną viewModel - w projekcie XML & Build .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Dodaj odwołanie do wystąpienia viewModel do mapowania powiązań - w projekcie działania i kompilacji
binding.viewModel = viewModel
  1. Dodaj wszystkie odwołania do powiązań viewModel - w projekcie XML & Build. .
    android:text="@{viewModel.simName}"
  1. Teraz zadziała.

- Mam nadzieję, że u Ciebie też się uda.

V-9- द
źródło
1

Miałem ten sam problem z pokojem i nie używałem viewBinding . Naprawiłem
to używając exportSchema do false w mojej klasie bazy danych.

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

Pamiętaj: exportScehma może się różnić w zależności od twojego przypadku użycia, generalnie pozostaje fałszywa, więc ustawiam ją na false.

USMAN osman
źródło
1

W moim przypadku zmieniłem globalnie jedną zmienną UserManager na NetWorkManager i wszędzie tam, gdzie były klasy UserManager, okazało się, że jest to NetworkManager.

Ponieważ używam Hilt, musiałem ponownie zbudować projekt.

Wyczyściłem Projekt i Kotlin pokazał, gdzie są błędy.

Dimitri de Jesus
źródło
1

Napotkano również ten sam problem, więc po prostu spróbuj usunąć folder .idea projektu i folder .gradle, a następnie usunąłem również folder kompilacji w folderze aplikacji, a następnie ponownie uruchomiłem IDE Android Studio i działa dla mnie

fahad.t
źródło
1

Dla mnie problem polegał na tym, że w modelu zdefiniowano 2 klucze podstawowe.

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

Musiałem odbudować projekt i trochę zmienić klasę Dao, aby wywołać komunikat o problemie.

Denis Korobitsin
źródło
1

Przy tej metodzie przychodzi mi na myśl wszystko co jest problem z Roombazą danych a Coroutinesnawet błędy ortograficzne. Ostatecznie miało to miejsce podczas próby zwrócenia pojedynczej wartości za pomocą przepływu po wstawionej kolumnie, przez:Flow<Long> z klas DAO.

Powinien być suspendfunkcją i tylkoLong typ do zwrócenia po wstawieniu kolumny.

Te problemy są czasami niejednoznaczne, więc spróbuj przeczytać wszystkie komunikaty Build Output, komunikat, który mi pomógł, brzmiał: error: Not sure how to handle insert method's return type.

MohammadL
źródło
1

Nic nie działało. Spróbowałem wszystkiego i ostatecznie znalazłem mały błąd, który powodował duży problem.

Wróć do każdego nowo utworzonego pliku bazy danych i dokładnie sprawdź kod wiersz po wierszu każdego pliku.

Sprawdź klasę bazy danych i sprawdź, czy Dao jest zadeklarowane jako na przykład

abstract val commentDatabaseDao: CommentDatabaseDao

zadeklarować jako val nie var , tak było w moim przypadku i ostatecznie rozwiązano.

Sachin Harne
źródło
1

Właśnie mi się to przydarzyło. Inny programista nie zakończył poprawnie scalania, więc ta linia była w kodzie

<<<<<<< HEAD

Zamiast otrzymywać błąd kompilacji, otrzymałem błąd KaptExecution.

Kevin
źródło
1

Miałem ten sam błąd. Miałem dwa problemy.

  1. Może być konieczne dodanie

    implementacja „androidx.room:room-ktx:2.2.5”

  2. Usunąłem plik, do którego odwołano się jako członek w jednym z plików activity_xml. Błąd nigdy nie dał mi żadnej wskazówki, dopóki nie zmieniłem go na annotationProcessor zamiast kapt, a następnie wskazał błąd, znalazłem plik i na pewno miałem odniesienie do pliku, którego już nie używałem i został usunięty. Usunąłem to odniesienie do danych z xml i to wszystko wyczyściło. Potem włożyłem go z powrotem do kapt.

Sam
źródło
1

Tak, też dostałem ten błąd i to też był plik Room problem z tym związany.

Miałem zdefiniowane Moje strony TypeConverters, ale nigdy odnotowany Moje strony Room databasez: @TypeConverters(TypeConverter.class).

Izak
źródło
1

W moim przypadku zapomniałem dodać @PrimaryKey w klasie Entity.

Ahmet
źródło
0

w niektórych przypadkach może to pomóc gradle.properties

kapt.include.compile.classpath=true
Siergiej Maleev
źródło
0

w moim przypadku dodałem tę linię

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }
Mojtaba Haddadi
źródło