Terjadi kegagalan saat menjalankan org.jetbrains.kotlin.gradle.internal.KaptExecution


101

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

tolong tunjukkan kode Anda dalam build.gradlefile.
Sergey

tolong tunjukkan kode DataBinderMapperImpl.java juga.
Sergey

3
Sudahkah Anda memperbarui ke Android Studio 4? pb yang sama di sini
Samuel Eminet

2
Saya memperbarui ke Android Studio 4 dan saya mendapatkan kesalahan yang sama dengan menggunakan Room, saya bisa memperbaikinya untuk sementara dengan mengubah salah satu kueri saya. Saya awalnya memiliki pertanyaan ini: "PILIH case_name FROM SavedCases", dan kemudian mengubahnya menjadi "SELECT * FROM SavedCases", dan pesan kesalahan hilang. Untuk beberapa alasan, saya hanya mendapatkan kesalahan ini ketika saya mencoba untuk menanyakan kolom tertentu saja. Ini bukanlah perbaikan yang ideal untuk masalah ini dan saya berharap seseorang memiliki perbaikan yang lebih baik.
Hani

Saya mengalami kesalahan serupa dan menemukan solusi yang berfungsi untuk saya. Anda mungkin pernah melakukan hal serupa. stackoverflow.com/questions/63133657/…
Mustaqode

Jawaban:


135

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. buruk buruk

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. bagus


3
jika Anda memiliki kesalahan Room (DB) waktu kompilasi, itu akan menunjukkannya seperti itu - itu berarti bahwa satu atau beberapa pertanyaan Anda salah
Idan Damri

51

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.

  1. Di studio Android, masuk ke menu Analisis dan klik Kode Inspeksi ; periksa seluruh proyek, klik OK dan tunggu hingga pemeriksaan selesai.

    Periksa Kode

  2. Sekarang Anda akan melihat tab yang akan menunjukkan semua kesalahan, peringatan dll dan sekarang Anda dapat menyelesaikan masalah sebenarnya.

    Tab kesalahan


2
ya, itu menunjukkan kesalahan persis. (Saya membuat beberapa kesalahan dalam XML)
Hari Shankar S

1
Saya tidak mengerti mengapa Android Studio tidak menampilkan kesalahan secara langsung saat build gagal, itu tidak masuk akal. Terima kasih untuk ini, banyak membantu saya
moyo

29

Cara untuk mengetahui apa masalah yang mendasarinya, adalah dengan menjalankan perintah berikut:

./gradlew assembleDebug --stacktrace

15

Saya mendapat masalah yang sama, jadi saya mencoba mendapatkan lebih banyak informasi, dengan melakukan

gradle-> app-> Tugas-> Build-> assemble

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

gradle->app->Tasks->Build->assembleapa itu?
pengguna25

@ pengguna25 Jendela alat Gradle
Ajay Gurappanavar

14

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."


4
Jenis kesalahan apa?
Mustaqode

Bagi saya adalah kesalahan dalam grafik navigasi
Jorge Casariego

Dalam kasus saya, saya lupa menambahkan @Daoantarmuka MyDao
Ishaan Kumar

11

Perubahan

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"

luar biasa, ini membantu
pengguna25

8

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`

16
Ini bukan solusi yang tepat
Shubham Tater

2
@ShubhamTater Ini adalah solusi sampai gradle4.0.0 diperbaiki. Ini adalah solusi sementara. Setelah gradle4.0.0 diperbaiki. Kami dapat memperbarui gradle 4.0 atau lebih
Mujeeb Rahaman T

3
Saya menangkap pengecualian ini pada 4.0.1
Ярослав Нестеров

8

Bagi saya, banyak kesalahan referensi dan kesalahan dalam ekspresi XML dengan DataBindingmenghasilkan kesalahan ini.

Saya telah menghapus <variable/>dalam sebuah layoutfile, karena saya pikir, saya tidak membutuhkannya lagi. Saya lupa bahwa saya memiliki variabel yang direferensikan di layoutfile.

Setelah membangun proyek, ini menghasilkan kesalahan, di mana tidak mungkin untuk mengimpor BindingImplkelas, karena tidak ada dan kesalahan ini hanya ditampilkan sebagai peringatan yang sejajar dengan KaptExecutionkesalahan 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 Fragmentfile. Setelah mengatasi error ini juga, build selesai untuk saya tanpa error atau peringatan.


1
Benar kesalahan ini selalu terkait dengan file XML yang digunakan penyatuan data kami.
Shubham Tater


2

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


2

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.


1

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 SELECTpernyataan 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


Saya mendapat solusi untuk masalah saya, saya tidak tahu apakah itu akan bekerja untuk Anda atau tidak tetapi soultion adalah memeriksa file XML Anda yang Anda ikat, mengikat adalah sistem waktu kompilasi, dan itu berfungsi untuk file XML jadi periksa apakah mereka apakah ada kesalahan di dalamnya, itu akan menunjukkan jenis kesalahan ini. Saya memperbaiki file XML saya lalu semuanya bekerja dengan sempurna.
Shubham Tater

1
Ya silahkan. bagaimana kamu menggali lebih dalam?
Simo Nyathi

1
@LeonardoSibela mohon maaf untuk itu, yang ingin saya katakan adalah menambahkan opsi --stacktrace saat membangun sehingga saya bisa mendapatkan informasi lebih lanjut tentang kesalahan tersebut.
Ali

Anda dapat menambahkan opsi --stacktrace dari File-> Pengaturan-> Build, Execution, Deployment-> Compiler-> Command-line Options Btw dalam kasus saya, saya kehilangan ketergantungan: implementasi "androidx.room:room-ktx:$ room_version "
Amber

1

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 @Bindableanotasi pada bidang di konstruktor utama a data classdi 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.


Saya mendapat solusi untuk masalah saya, saya tidak tahu apakah itu akan bekerja untuk Anda atau tidak tetapi soultion adalah memeriksa file XML Anda yang Anda ikat, mengikat adalah sistem waktu kompilasi, dan itu berfungsi untuk file XML jadi periksa apakah mereka apakah ada kesalahan di dalamnya, itu akan menunjukkan jenis kesalahan ini. Saya memperbaiki file XML saya lalu semuanya bekerja dengan sempurna.
Shubham Tater

1

Menariknya, saya mendapatkan kesalahan ini karena saya menambahkan deskripsi Retrofit. Berhati-hatilah agar tidak bingung dengan deskripsi Kamar dan Retrofit.


1

Dalam kasus saya itu karena saya tidak mengimplementasikan Observable di ViewModel saya. Saya menambahkan EditText ke layout kendala denganandroid:text="@={addProductViewModel.inputProductName}"

Setelah saya menerapkan Observabledi kelas ViewModel saya, kesalahan itu hilang

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

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


1

Dalam Kasus Saya: Masalah teratasi

Langkah:

  1. Hapus variabel viewModel - Dalam XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Menghapus semua referensi pengikatan viewModel - Dalam XML .
android:text="@{viewModel.simName}"
  1. Referensi instance viewModel yang dihapus ke pemetaan pengikatan - Dalam Aktivitas
binding.viewModel = viewModel
  1. Bersihkan proyek dan kompilasi ulang.

  2. Tambahkan variabel viewModel - Dalam proyek XML & Build .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Tambahkan referensi instance viewModel ke pemetaan binding - Dalam project Activity & Build
binding.viewModel = viewModel
  1. Tambahkan semua referensi pengikatan viewModel - Dalam proyek XML & Build. .
    android:text="@{viewModel.simName}"
  1. Ini akan berhasil sekarang.

- Saya harap ini akan berhasil juga untuk Anda.


1

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.


1

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.


1

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


1

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.



1

Metode ini terjadi pada saya semua yang ada masalah dengan Roomdatabase dan Coroutines, 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 suspendfungsi dan hanya Longjenis 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.


1

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.


1

Saya baru saja ini terjadi pada saya. Pengembang lain belum menyelesaikan penggabungan dengan benar sehingga baris ini ada di kode

<<<<<<< HEAD

Alih-alih mendapatkan kesalahan kompilasi, saya mendapatkan kesalahan KaptExecution.


1

Setelah banyak kesakitan, saya memutuskan untuk mencoba annotationProcessordaripada kaptberharap 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 bug kaptitu sendiri. Jadi, coba solusi ini dan mungkin membantu.


1

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.


1

Saya mengalami kesalahan yang sama. Saya punya dua masalah.

  1. Anda mungkin perlu menambahkan

    implementasi 'androidx.room:room-ktx:2.2.5'

  2. 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.


0

dalam beberapa kasus ini dapat membantu gradle.properties

kapt.include.compile.classpath=true

0

dalam kasus saya, saya telah menambahkan baris ini

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }

0

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 *_Implkelas (saya tahu tentang mereka di Kotlin) dan bahkan beberapa *Testskelas 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.