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
android
android-studio
kotlin
Shubham Tater
źródło
źródło
build.gradle
pliku.Odpowiedzi:
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.
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.
źródło
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.
W Android studio przejdź do menu Analiza i kliknij Sprawdź kod ; sprawdź cały projekt, kliknij OK i poczekaj na zakończenie inspekcji.
Teraz zobaczysz kartę, która wskaże wszystkie błędy, ostrzeżenia itp. I możesz teraz rozwiązać prawdziwy problem.
źródło
Aby dowiedzieć się, na czym polega problem, należy uruchomić następujące polecenie:
źródło
Mam ten sam problem, więc próbowałem uzyskać więcej informacji, robiąc
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
źródło
gradle->app->Tasks->Build->assemble
co to jest?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”.
źródło
@Dao
w interfejsie My√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"
źródło
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`
źródło
Jak dla mnie, kilka błędów odniesienia i błąd w wyrażeniach XML
DataBinding
spowodował ten błąd.Usunąłem
<variable/>
wlayout
pliku, bo pomyślałem, że już go nie potrzebuję. Zapomniałem, że mam zmienną, do której odwołuje sięlayout
plik.Po zbudowaniu projektu spowodowało to błąd, w którym nie można było zaimportować
BindingImpl
klasy, ponieważ nie istnieje, a ten błąd był wyświetlany tylko jako ostrzeżenie równolegle do powyższegoKaptExecution
błę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
Fragment
plikach. Po naprawieniu również tych błędów, kompilacja zakończyła się dla mnie bez błędów i ostrzeżeń.źródło
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
SELECT
oś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
źródło
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
źródło
spróbuj zbudować swój projekt z
kapt.use.worker.api=false
w pliku ustawień gradle.properties
Źródła: https://youtrack.jetbrains.com/issue/KT-40750
źródło
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.
źródło
Po wielu bólach postanowiłem spróbować
annotationProcessor
zamiastkapt
mieć 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łądkapt
sam w sobie. Więc wypróbuj to rozwiązanie, a może pomóc.źródło
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łegoplugin: 'kotlin-android-extensions'
powiązaniem widoku ( https://developer.android.com/topic/libraries/view-binding )źródło
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
@Bindable
adnotację 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.
źródło
Co ciekawe, otrzymywałem ten błąd, ponieważ dodałem opis retrofitu. Uważaj, aby nie pomylić opisu pokoju i modernizacji.
źródło
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.
źródło
W moim przypadku: problem rozwiązany
Kroki:
<variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
Wyczyść projekt i przekompiluj.
Dodaj zmienną viewModel - w projekcie XML & Build .
< variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
- Mam nadzieję, że u Ciebie też się uda.
źródło
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.
źródło
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.
źródło
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
źródło
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.
źródło
Przy tej metodzie przychodzi mi na myśl wszystko co jest problem z
Room
bazą danych aCoroutines
nawet 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ć
suspend
funkcją 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.
źródło
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.
źródło
Właśnie mi się to przydarzyło. Inny programista nie zakończył poprawnie scalania, więc ta linia była w kodzie
Zamiast otrzymywać błąd kompilacji, otrzymałem błąd KaptExecution.
źródło
Miałem ten sam błąd. Miałem dwa problemy.
Może być konieczne dodanie
implementacja „androidx.room:room-ktx:2.2.5”
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.
źródło
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 stronyRoom database
z:@TypeConverters(TypeConverter.class)
.źródło
W moim przypadku zapomniałem dodać @PrimaryKey w klasie Entity.
źródło
w niektórych przypadkach może to pomóc gradle.properties
kapt.include.compile.classpath=true
źródło
w moim przypadku dodałem tę linię
android { . . . kapt.includeCompileClasspath = false }
źródło