Не вдалося виконати org.jetbrains.kotlin.gradle.internal.KaptExecution


101

Раптом я починаю отримувати цю помилку, і я не здогадуюся, чому якщо хтось просто дасть мені знати, де ця помилка, буде досить корисним. Скільки я можу отримати, це через нове оновлення андроїд-студії. Детальний підсумок помилки, яку я отримую.

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

будь ласка, покажіть свій код у build.gradleфайлі.
Сергій

будь-ласка, також покажіть код DataBinderMapperImpl.java.
Сергій

3
Ви оновили Android Studio 4? той самий pb тут
Самуель Емінет

2
Я оновився до Android Studio 4, і я отримав ту ж помилку з використанням кімнати, я зміг тимчасово виправити це, змінивши один із своїх запитів. Спочатку у мене був такий запит: "SELECT case_name FROM SavedCases", а потім змінив його на "SELECT * FROM SavedCases", і повідомлення про помилку зникло. З якоїсь причини ця помилка з’являється лише тоді, коли я намагаюся запитувати лише певні стовпці. Це не ідеальне вирішення проблеми, і я сподіваюся, хтось вирішить краще.
Хані

Я мав подібну помилку і знайшов рішення, яке мені підходить. Ви могли б зробити щось подібне. stackoverflow.com/questions/63133657 / ...
Mustaqode

Відповіді:


138

Інтерфейс користувача Android Studio просто приховував помилку ...

коли сталася помилка, вона виділила елемент у поданні списку та показала непомітне повідомлення у вигляді терміналу. погано погано

щоб знайти справжню помилку, виберіть кореневий елемент у поданні списку, щоб Android Studio відображала весь вивід збірки у вигляді терміналу, а потім прокрутіть, щоб знайти помилку. добре-добре


3
якщо у вас є помилка під час компіляції (DB), вона це покаже так - це означає, що один або деякі ваші запити помилкові
Айдан Дамрі,

Я думаю, це буде відображатися так для будь-якої помилки БД під час компіляції ... у моєму випадку це була помилка БД Realm під час компіляції щодо неправильно встановленого об'єкта сутності ...
Ерік

51

Можливо, я трохи запізнився з відповіддю, але, як би там не було, я отримував ту ж помилку. Помилка збірки може бути викликана якоюсь помилкою, на яку не вказує Android Studio, ймовірно через велику величину проекту.

Ось найпростіший спосіб вказати на точну помилку.

  1. У студії Android перейдіть до меню Аналіз і натисніть на Перевірити код ; перевірте весь проект, натисніть OK і почекайте, поки перевірка закінчиться.

    Перевірити код

  2. Тепер ви побачите вкладку, яка вказуватиме всі помилки, попередження тощо, і тепер ви зможете вирішити справжню проблему.

    Вкладка Помилки


2
так, він показує саме помилку. (я зробив якусь помилку в XML)
Харі Шанкар S

1
Я не розумію, чому Android Studio не відображає помилку безпосередньо при збої збірки, це не має сенсу. Дякую за це, мені дуже допомогло
moyo

29

Спосіб з’ясувати основну проблему - це виконати таку команду:

./gradlew assembleDebug --stacktrace

15

Я отримав те саме випуск, тому намагався отримати більше інформації, виконуючи

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

Після цього я отримав точну помилку, сказавши "Помилка під час обробки анотацій". Я перевірив свій нещодавно налаштований клас DAO і виявив, що один із типів повернення методу не був визначений.

//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->assembleщо це?
користувач25

Вікно інструменту @ user25 Gradle
Аджай Гураппанавар

14

Деякий час у мене траплялася та сама помилка, а потім я почав перевіряти інші пакети, про які я дізнався, що я допустив помилку друкарської помилки в коді бази даних. Отже, "Перегляньте вашу базу даних та інші файли класів активності, і там ви можете знайти деякі помилки."


4
Що за помилки?
Mustaqode

Для мене була помилка в навігаційному графіку
Хорхе Касарієго

У моєму випадку я забув додати @Daoв інтерфейс
MyDao

11

Зміна

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

До

 implementation "androidx.room:room-runtime:2.2.5"
 kapt  "androidx.room:room-compiler:2.2.5"

дивно, це допомогло
user25

8

Якщо ви оновили до classpath 'com.android.tools.build:gradle:4.0.0' Замінити попередню версію

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

І змініть gradle-wrapper.properties

distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-   all.zip`

16
Це не правильне рішення
Шубхем Татер,

2
@ShubhamTater Це рішення до виправлення gradle4.0.0. Це тимчасове рішення. Після виправлення gradle4.0.0. Ми можемо оновити gradle 4.0 або більше
Mujeeb Rahaman T

3
Я знайшов цей виняток 4.0.1
Ярослав Нестеров,

8

Для мене купа помилок посилань та помилка у XML-виразах, що DataBindingспричинили цю помилку.

Я видалив файл <variable/>у layoutфайлі, оскільки вважав, що він мені більше не потрібен. Я забув, що у layoutфайлі є посилання на змінну .

Після побудови проекту це призвело до помилки, при якій неможливо було імпортувати BindingImplклас, оскільки він не існує, і ця помилка була показана лише як попередження паралельно вищеKaptExecution помилці.

Трохи шукаючи, я знайшов цю помилку та вирішив її. Потім, там було вказано купу помилок посилань, оскільки я щось перейменовував, і воно не перейменовувало його у Fragmentфайлах. Після усунення цих помилок збірка закінчилася для мене без помилок та попереджень.


1
Справа ця помилка завжди пов’язана з XML-файлом, який використовує наш прив’язок даних.
Шубхем Тейтер,


2

У моєму випадку я використовував room і один із моїх методів databasDao має невикористаний параметр, і, на жаль, андроїд-студія не попереджає мене правильно


2

У мене була та сама проблема. У моєму випадку проблема полягала в базі даних. мені довелося змінити цей рядок коду @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

Я додав ще одну таблицю в базу даних, але забув додати таблицю в рядку вище.


1

У мене була та сама проблема. Дозвольте мені ознайомити вас із прикладом того, як я вирішив проблему і як я її вирішив, можливо, ви можете отримати більш широке уявлення.

Перед вирішенням

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

У DAO

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

Я отримав помилку

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

Тож я поглибився і знайшов повідомлення нижче

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

Я видалив поле IsUpdated із POJO ModuleSession і додав його до таблиці сеансів

Після змін

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

З іншого боку, перевірте, чи є у SELECTвиписці якесь поле, яке є підозрілим, що спричиняє проблеми, або ви можете помітити його@Ignore

Однак ви можете опублікувати свій код, якщо вам все одно не комфортно.

Сподіваюся, це може допомогти


Я отримав рішення для своєї проблеми, я не знаю, чи буде воно працювати для вас чи ні, але думка - перевірити ваш файл XML, який ви прив'язуєте, прив'язка - це система часу компіляції, і вона працює для файлу XML, тому перевірте, чи є будь-яка помилка в ній, вона покаже такий тип помилок. Я виправляю свій XML-файл, тоді все працює ідеально.
Шубхем Тейтер,

1
Так, будь ласка. як ти копав глибше?
Сімо Няті

1
@LeonardoSibela вибачте за це, я хотів сказати, що додаю опцію --stacktrace під час створення, щоб я міг отримати більше інформації про помилку.
Алі

Ви можете додати параметр --stacktrace з Файл-> Налаштування-> Збірка, виконання, розгортання-> Компілятор-> Параметри командного рядка До речі, у моєму випадку мені не вистачало залежності: реалізація "androidx.room:room-ktx:$ room_version "
Ембер

1

Накричіть відповідь @Rene Spies вище, я також отримав цю помилку під час роботи з прив'язкою даних. Виявляється, двигуну збірки не подобається, коли ви розміщуєте @Bindableанотацію на полі в первинному конструкторі a data classу Kotlin.

Тому ніколи не робіть наступного,

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

натомість те, що вам потрібно зробити, це

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

Бонус: пам’ятайте перевірити однакові значення перед тим, як встановлювати значення на поле, якщо ви намагаєтесь використовувати двосторонній зв'язок, як я, щоб запобігти нескінченному циклу встановлення та отримання.


Я отримав рішення для своєї проблеми, я не знаю, чи буде воно працювати для вас чи ні, але думка - перевірити ваш файл XML, який ви прив'язуєте, прив'язка - це система часу компіляції, і вона працює для файлу XML, тому перевірте, чи є будь-яка помилка в ній, вона покаже такий тип помилок. Я виправляю свій XML-файл, тоді все працює ідеально.
Шубхем Тейтер,

1

Цікаво, що я отримав цю помилку, оскільки додав опис модернізації. Будьте обережні, щоб не переплутати опис кімнати та модернізації.


1

У моєму випадку це було тому, що я не впроваджував Observable у своєму ViewModel. Я додав EditText до макета обмежень за допомогоюandroid:text="@={addProductViewModel.inputProductName}"

Після реалізації Observableв класі ViewModel помилка зникла

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

Повний приклад прив'язки даних MVVM за допомогою фрагментів

Макет - 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")
    }
}

Сподіваюся, це допомагає Р.


1

У моєму випадку: проблема вирішена

Кроки:

  1. Видалити змінну viewModel - у форматі XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Видалено всі посилання на прив'язку viewModel - у XML .
android:text="@{viewModel.simName}"
  1. Видалено посилання на екземпляр viewModel на відображення прив’язки - In Activity
binding.viewModel = viewModel
  1. Чистий проект і перекомпілювати.

  2. Додати змінну viewModel - у проекті XML & Build .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. Додайте посилання на екземпляр viewModel до зіставлення прив’язок - у проекті Activity & Build
binding.viewModel = viewModel
  1. Додайте всі посилання на прив'язку viewModel - у проекті XML & Build. .
    android:text="@{viewModel.simName}"
  1. Зараз це спрацює.

- Сподіваюсь, це спрацює і у вас.


1

У мене була та ж проблема з Room, і я не використовував viewBinding .
Я виправив це з використанням exportSchema на false у моєму класі бази даних.

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

Пам’ятайте: exportScehma може відрізнятися залежно від вашого випадку використання, як правило, він залишається помилковим, тому я ставлю його false.


1

У моєму випадку я змінив глобально одну змінну UserManager на NetWorkManager, і скрізь, де існували класи UserManager, вони стали NetworkManager.

Оскільки я використовую Hilt, мені довелося будувати проект знову.

Я очистив проект, і Котлін показав, де були помилки.


1

У мене також зіткнулася з тією ж проблемою, тому просто спробуйте видалити папку .idea проекту та папку .gradle, а потім також видалив папку збірки всередині папки програми, а потім перезапустити IDE Android Studio, і це працює для мене


1

Для мене проблема полягала в тому, що на моделі було визначено 2 первинні ключі.

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

Мені довелося відновити проект і трохи змінити клас Dao, щоб викликати повідомлення про проблему.



1

Цей метод мені спадає на думку, коли виникають проблеми з Roomбазою даних і Coroutinesнавіть помилки при написанні. Нарешті, це було при спробі повернути одне значення з потоком після вставленого стовпця, від: Flow<Long>з класів DAOs.

Це має бути suspendфункція і лишеLong тип, який повертається після вставленого стовпця.

Ці проблеми часом неоднозначні, тому спробуйте прочитати всі повідомлення Build Output, повідомлення, яке мені допомогло, було: error: Not sure how to handle insert method's return type.


1

Нічого не вийшло, я спробував усе і нарешті знайшов невелику помилку, яка створювала велику проблему.

Поверніться до кожного щойно створеного файлу для бази даних і ретельно перевірте наявність рядка за рядком кожного файлу.

Перевірте клас бази даних і перевірте, чи оголошено Dao як, наприклад,

abstract val commentDatabaseDao: CommentDatabaseDao

оголосити val не var , це було в моєму випадку і нарешті це вирішено.


1

Щойно зі мною це сталося. Інший розробник не виконав злиття належним чином, тому цей рядок був у коді

<<<<<<< HEAD

Замість отримання помилки компіляції я отримав помилку KaptExecution.


1

Після великого болю, я вирішив спробувати, annotationProcessorзамість kaptсподівання, що воно може принаймні відображати повідомлення про помилку або щось, що може допомогти мені знайти джерело. Але на щастя (або на жаль; через марно витрачений час), він був побудований успішно без помилок. Це здебільшого помилка kaptсама по собі. Отже, спробуйте це рішення, і воно може допомогти.


1

Справді, проблема полягає у типографіці у вашому коді. Що стосується мене, мені довелося припинити використання плагіна kapt. Потім я перейшов на використання annotationProcessor. У ньому було чітко зазначено, яка помилка була після побудови.

Потім після повернення помилки можна повернутися до використання kapt.

Для мене помилкою було те, що я помилково спробував двостороннє прив'язку даних у текстовому поданні.


1

У мене була та ж помилка. У мене було два питання.

  1. Можливо, вам доведеться додати

    реалізація 'androidx.room: room-ktx:2.2.5'

  2. Я видалив файл, на який посилався як член в одному з файлів Activity_xml. Помилка ніколи не давала мені підказки, поки я не замінив її на annotationProcessor замість kapt, тоді вона вказала на помилку, я знайшов файл і, звичайно, мав посилання на файл, який я більше не використовував і був видалений. Я видалив це посилання на дані з xml, і це все очистило. Потім я повернув його до Капта.




0

Я щойно оновив IDE Android Studio до версії 4.1.1 і отримав подібну проблему.

Те, що я зрозумів, було ...

... раніше у мене не було деяких *_Implзанять (я знаю про них у Котліні) і навіть не нових *Testsзанять.

Отже, після того, як “запустити весь світ”, щоб прийняти рішення, я просто зробив інтуїтивний та справедливий вибір: я видалив усі ті файли в моїх “рукотворних” пакетах, яких не було до оновлення Android Studio .

І, вгадайте що?

Це спрацювало. Жодних проблем, навіть жодної проблеми kapt.

Я не кажу, що це остаточне рішення. Але це може працювати для вас.

Майте хороший.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.