Tiba-tiba saya mulai mendapatkan kesalahan ini, dan saya tidak mengerti mengapa jika ada yang memberi tahu saya di mana kesalahan ini, akan cukup membantu. Sebanyak yang bisa saya dapatkan adalah ini karena pembaruan baru dari studio android. Ringkasan detail kesalahan yang saya dapatkan.
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
sumber
sumber
build.gradle
file.Jawaban:
UI Android Studio baru saja menyembunyikan kesalahan ...
ketika kesalahan terjadi, itu menyorot item dalam tampilan daftar, dan menunjukkan pesan yang tidak membantu dalam tampilan terminal.
untuk menemukan kesalahan sebenarnya, pilih item root dalam tampilan daftar sehingga Android Studio akan menampilkan seluruh keluaran build dalam tampilan terminal, lalu scroll untuk menemukan kesalahan.
sumber
Mungkin saya agak terlambat untuk jawabannya tetapi, bagaimanapun, saya mendapatkan kesalahan yang sama. Kegagalan build dapat disebabkan oleh beberapa error yang gagal ditunjukkan oleh Android Studio, mungkin karena ukuran projectnya sangat besar.
Berikut adalah cara mudah untuk menunjukkan kesalahan sebenarnya.
Di studio Android, masuk ke menu Analisis dan klik Kode Inspeksi ; periksa seluruh proyek, klik OK dan tunggu hingga pemeriksaan selesai.
Sekarang Anda akan melihat tab yang akan menunjukkan semua kesalahan, peringatan dll dan sekarang Anda dapat menyelesaikan masalah sebenarnya.
sumber
Cara untuk mengetahui apa masalah yang mendasarinya, adalah dengan menjalankan perintah berikut:
sumber
Saya mendapat masalah yang sama, jadi saya mencoba mendapatkan lebih banyak informasi, dengan melakukan
Setelah ini saya mendapat kesalahan persis mengatakan "Kesalahan saat pemrosesan anotasi". Saya memeriksa kelas DAO saya yang baru-baru ini di-tweak dan menemukan bahwa salah satu tipe pengembalian metode tidak ditentukan.
//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
sumber
gradle->app->Tasks->Build->assemble
apa itu?Saya mengalami kesalahan yang sama untuk beberapa saat kemudian saya mulai memeriksa paket lain. Saya mengetahui bahwa saya telah membuat kesalahan ketik dalam kode database saya. Jadi, "Buka database Anda dan file kelas aktivitas lainnya, Anda mungkin menemukan beberapa kesalahan di sana."
sumber
@Dao
antarmuka MyDaoPerubahan
implementation "android.arch.persistence.room:runtime:1.1.1" kapt "android.arch.persistence.room:compiler:1.1.1"
Untuk
implementation "androidx.room:room-runtime:2.2.5" kapt "androidx.room:room-compiler:2.2.5"
sumber
Jika Anda telah meningkatkan ke classpath 'com.android.tools.build:gradle:4.0.0' Gantilah versi sebelumnya
dependencies { classpath 'com.android.tools.build:gradle:3.6.3' }
Dan Ubah gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4- all.zip`
sumber
Bagi saya, banyak kesalahan referensi dan kesalahan dalam ekspresi XML dengan
DataBinding
menghasilkan kesalahan ini.Saya telah menghapus
<variable/>
dalam sebuahlayout
file, karena saya pikir, saya tidak membutuhkannya lagi. Saya lupa bahwa saya memiliki variabel yang direferensikan dilayout
file.Setelah membangun proyek, ini menghasilkan kesalahan, di mana tidak mungkin untuk mengimpor
BindingImpl
kelas, karena tidak ada dan kesalahan ini hanya ditampilkan sebagai peringatan yang sejajar denganKaptExecution
kesalahan di atas .Setelah mencari beberapa saat, saya menemukan kesalahan ini dan mengatasinya. Kemudian, banyak kesalahan referensi ditampilkan, karena saya mengganti nama sesuatu dan tidak mengganti namanya di
Fragment
file. Setelah mengatasi error ini juga, build selesai untuk saya tanpa error atau peringatan.sumber
cobalah untuk membangun proyek Anda dengan
kapt.use.worker.api=false
di file pengaturan gradle.properties Anda
Referensi: https://youtrack.jetbrains.com/issue/KT-40750
sumber
Dalam kasus saya, saya menggunakan room dan salah satu metode databasDao memiliki parameter yang tidak terpakai dan sayangnya studio android tidak memperingatkan saya dengan benar
sumber
Saya memiliki masalah yang sama. Dalam kasus saya, masalahnya adalah tentang Database. saya harus mengubah baris kode ini
@Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)
Saya menambahkan tabel lain di Database tetapi lupa menambahkan tabel di baris di atas.
sumber
Saya memiliki masalah yang sama. Izinkan saya memandu Anda melalui contoh tentang bagaimana saya berakhir dengan masalah dan cara saya menyelesaikannya mungkin Anda bisa mendapatkan gambaran yang lebih besar.
Sebelum menyelesaikan
@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 )
Di DAO
@Transaction @Query("SELECT * FROM modules") abstract suspend fun getModuleSession(): List<ModuleSession>
Kesalahan yang saya dapatkan adalah
A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
Jadi saya menggali lebih dalam dan menemukan pesan di bawah ini
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()
Saya menghapus bidang IsUpdated dari POJO ModuleSession dan menambahkannya ke tabel sesi
Setelah perubahan
@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> )
Di sisi lain, periksa kembali jika ada bidang pada
SELECT
pernyataan yang dicurigai menyebabkan masalah atau Anda dapat menjelaskannya dengan@Ignore
Namun Anda dapat memposting kode Anda jika Anda masih merasa tidak nyaman.
Saya harap itu bisa membantu
sumber
Berteriak kepada jawaban @Rene Spies di atas, saya juga mendapatkan kesalahan ini saat bekerja dengan penyatuan data. Ternyata mesin build tidak menyukainya ketika Anda meletakkan
@Bindable
anotasi pada bidang di konstruktor utama adata class
di Kotlin.Jadi jangan pernah melakukan hal berikut,
data class MyAwesomePojo( @Bindable var firstname: String, var lastname: String )
sebaliknya yang perlu Anda lakukan adalah
data class MyCorrectAwesomePojo( var lastname: String ):{ @get:Bindable var firstname: String set(value){ field = value } }
Bonus: ingatlah untuk memeriksa nilai yang sama sebelum menyetel nilai ke bidang jika Anda mencoba menggunakan pengikatan dua arah seperti saya untuk mencegah pengulangan pengaturan dan pengambilan yang tak terbatas.
sumber
Menariknya, saya mendapatkan kesalahan ini karena saya menambahkan deskripsi Retrofit. Berhati-hatilah agar tidak bingung dengan deskripsi Kamar dan Retrofit.
sumber
Dalam kasus saya itu karena saya tidak mengimplementasikan Observable di ViewModel saya. Saya menambahkan EditText ke layout kendala dengan
android:text="@={addProductViewModel.inputProductName}"
Setelah saya menerapkan
Observable
di kelas ViewModel saya, kesalahan itu hilangViewModel
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") } }
Contoh lengkap untuk Penyatuan Data MVVM menggunakan Fragmen
Tata letak - 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") } }
Semoga ini bisa membantu R
sumber
Dalam Kasus Saya: Masalah teratasi
Langkah:
<variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
Bersihkan proyek dan kompilasi ulang.
Tambahkan variabel viewModel - Dalam proyek XML & Build .
< variable name="viewModel" type="com.xx.AppViewModel" / >
android:text="@{viewModel.simName}"
- Saya harap ini akan berhasil juga untuk Anda.
sumber
Saya memiliki masalah yang sama dengan Room dan saya tidak menggunakan viewBinding .
Saya memperbaikinya dengan menggunakan exportSchema menjadi false di kelas database saya.
@Database(entities = [ModelClass::class], version = 1, exportSchema = false) abstract class ModelDatabase: RoomDatabase() {}
Ingat: exportScehma dapat bervariasi sesuai dengan kasus penggunaan Anda, umumnya tetap salah jadi saya taruh di salah.
sumber
Dalam kasus saya, saya telah mengubah secara global satu variabel UserManager ke NetWorkManager dan di mana pun ada kelas UserManager, mereka berubah menjadi NetworkManager.
Karena saya menggunakan Hilt, saya harus membangun proyek itu lagi.
Saya membersihkan Project dan Kotlin menunjukkan letak kesalahannya.
sumber
Saya juga mengalami masalah yang sama jadi untuk mencoba saja saya menghapus folder .idea proyek dan folder .gradle kemudian saya juga menghapus folder build di dalam folder aplikasi dan kemudian restart android studio IDE dan itu berfungsi untuk saya
sumber
Bagi saya, masalahnya adalah memiliki 2 kunci utama yang ditentukan pada model.
// 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,
Saya harus membangun kembali proyek dan mengubah kelas Dao sedikit untuk memicu pesan tentang masalah ini.
sumber
bagi saya itu adalah konstruktor utama dalam satu kelas entri database
sumber
Metode ini terjadi pada saya semua yang ada masalah dengan
Room
database danCoroutines
, bahkan kesalahan ejaan. Terakhir adalah ketika mencoba mengembalikan nilai tunggal dengan aliran setelah kolom yang disisipkan, oleh:Flow<Long>
dari kelas DAO.Ini harus menjadi
suspend
fungsi dan hanyaLong
jenis untuk kembali setelah kolom yang disisipkan.Masalah ini terkadang ambigu, jadi cobalah untuk membaca semua pesan Output Build, pesan yang membantu saya adalah:
error: Not sure how to handle insert method's return type.
sumber
Tidak ada yang berhasil. Saya mencoba semuanya dan akhirnya menemukan kesalahan kecil yang menimbulkan masalah besar.
Kembali ke setiap file yang baru dibuat untuk database dan periksa kode baris demi baris setiap file dengan hati-hati.
Periksa kelas Database dan periksa apakah Dao dideklarasikan sebagai contoh,
abstract val commentDatabaseDao: CommentDatabaseDao
menyatakan sebagai val not var , ini adalah kasus saya dan akhirnya masalah ini diselesaikan.
sumber
Saya baru saja ini terjadi pada saya. Pengembang lain belum menyelesaikan penggabungan dengan benar sehingga baris ini ada di kode
Alih-alih mendapatkan kesalahan kompilasi, saya mendapatkan kesalahan KaptExecution.
sumber
Setelah banyak kesakitan, saya memutuskan untuk mencoba
annotationProcessor
daripadakapt
berharap setidaknya menampilkan pesan kesalahan atau apapun yang dapat membantu saya menemukan sumbernya. Tapi untungnya (atau sayangnya; karena waktu yang terbuang), itu dibangun dengan sukses tanpa kesalahan. Itu sebagian besar bugkapt
itu sendiri. Jadi, coba solusi ini dan mungkin membantu.sumber
Sungguh, masalahnya terletak pada tipografi di kode Anda. Bagi saya, saya harus berhenti menggunakan plugin kapt. Saya kemudian beralih menggunakan annotationProcessor. Itu menyatakan dengan jelas apa kesalahan itu setelah membangun.
Anda kemudian dapat beralih kembali menggunakan kapt setelah Anda menyelesaikan kesalahan.
Bagi saya, kesalahan yang saya alami adalah karena saya secara tidak sengaja mencoba pengikatan data dua arah pada tampilan teks.
sumber
Saya mengalami kesalahan yang sama. Saya punya dua masalah.
Anda mungkin perlu menambahkan
implementasi 'androidx.room:room-ktx:2.2.5'
Saya telah menghapus file yang direferensikan sebagai anggota di salah satu file activity_xml. Kesalahan tidak pernah memberi saya petunjuk apa pun sampai saya mengubahnya menjadi annotationProcessor alih-alih kapt, kemudian menunjukkan kesalahan, saya menemukan file tersebut, dan cukup yakin saya memiliki referensi ke file yang tidak lagi saya gunakan dan telah dihapus. Saya menghapus referensi data ini dari xml dan itu membersihkan semuanya. Lalu saya mengembalikannya ke kapt.
sumber
dalam beberapa kasus ini dapat membantu gradle.properties
kapt.include.compile.classpath=true
sumber
dalam kasus saya, saya telah menambahkan baris ini
android { . . . kapt.includeCompileClasspath = false }
sumber
Saya baru saja memperbarui Android Studio IDE ke versi 4.1.1 dan mendapat masalah serupa.
Apa yang saya sadari adalah…
… Sebelumnya saya tidak memiliki beberapa
*_Impl
kelas (saya tahu tentang mereka di Kotlin) dan bahkan beberapa*Tests
kelas baru .Jadi, setelah "menjalankan seluruh Dunia" untuk mengambil solusi, saya baru saja membuat pilihan yang intuitif dan adil: Saya menghapus semua file di dalam paket "buatan tangan" saya yang tidak ada sebelum pembaruan Android Studio .
Dan coba tebak?
Berhasil. Tidak ada masalah, bahkan tidak satu pun masalah
kapt
.Saya tidak mengatakan bahwa ini adalah solusi akhir. Tapi itu bisa berhasil untuk Anda.
Selamat bersenang-senang.
sumber