Ошибка при выполнении org.jetbrains.kotlin.gradle.internal.KaptExecution


100

Внезапно я начинаю получать эту ошибку, и я не понимаю, почему, если кто-то просто сообщит мне, где эта ошибка, будет достаточно полезно. Насколько я могу получить, это благодаря новому обновлению студии Android. Я получаю подробный отчет об ошибке.

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 здесь
Samuel Eminet

2
Я обновился до Android Studio 4, и у меня такая же ошибка при использовании Room, я смог временно исправить ее, изменив один из моих запросов. Первоначально у меня был такой запрос: «ВЫБРАТЬ имя_к случая из SavedCases», а затем он изменился на «ВЫБРАТЬ * ИЗ SavedCases», и сообщение об ошибке исчезло. По какой-то причине я получаю эту ошибку, только когда пытаюсь запросить только определенные столбцы. Это не идеальное решение проблемы, и я надеюсь, что у кого-то есть решение получше.
Хани

У меня была аналогичная ошибка, и я нашел решение, которое мне подходит. Вы могли сделать что-то подобное. stackoverflow.com/questions/63133657/…
Mustaqode

Ответы:


135

Пользовательский интерфейс Android Studio просто скрывал ошибку ...

при возникновении ошибки он выделял элемент в представлении списка и показывал бесполезное сообщение в представлении терминала. плохо плохо

чтобы найти реальную ошибку, выберите корневой элемент в представлении списка, чтобы Android Studio отображала весь вывод сборки в представлении терминала, затем прокрутите, чтобы найти ошибку. хорошо хорошо


2
если у вас есть ошибка комнаты (DB) во время компиляции, она покажет это так - это означает, что один или несколько ваших запросов неверны
Идан Дамри

51

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

Вот простой способ указать точную ошибку.

  1. В студии Android перейдите в меню « Анализировать» и нажмите « Проверить код» ; проверьте весь проект, нажмите ОК и дождитесь завершения проверки.

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

  2. Теперь вы увидите вкладку, на которой будут указаны все ошибки, предупреждения и т. Д., И теперь вы можете решить настоящую проблему.

    Вкладка "Ошибки"


2
да, он показывает именно ошибку. (Я допустил ошибку в XML)
Хари Шанкар С.

1
Я не понимаю, почему Android Studio не показывает ошибку напрямую при сбое сборки, это не имеет смысла. Спасибо за это, мне очень помогло
moyo

29

Чтобы узнать, в чем заключается основная проблема, выполните следующую команду:

./gradlew assembleDebug --stacktrace

14

Некоторое время у меня была такая же ошибка, затем я начал проверять другие пакеты, которые, как я узнал, допустил опечатку в коде своей базы данных. Итак, «Просмотрите свою базу данных и другие файлы классов активности, и вы можете найти там ошибки».


4
Какие ошибки?
Мустакоде,

Для меня была ошибка в графике навигации
Хорхе Касариего

В моем случае я забыл добавить @Daoв интерфейс
MyDao

14

У меня такая же проблема, поэтому я попытался получить дополнительную информацию, выполнив

gradle-> app-> Задачи-> Сборка-> собрать

После этого я получил точную ошибку «Ошибка при обработке аннотации». Я проверил свой недавно измененный класс 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это что?
user25

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

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

Если вы обновили путь к классам 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 или более
Муджиб Рахаман Т.

3
Я поймал это исключение 4.0.1
Ярослав Нестеров

8

На мой взгляд, кучу справочных ошибок и ошибку в выражениях XML DataBindingпривели к этой ошибке.

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

После сборки проекта это привело к ошибке, при которой было невозможно импортировать BindingImplкласс, потому что он не существует, и эта ошибка отображалась только как предупреждение, параллельное указанной выше KaptExecutionошибке.

После некоторого поиска я нашел эту ошибку и решил ее. Затем была показана куча справочных ошибок, потому что я что-то переименовал, а он не переименовал это в Fragmentфайлах. После устранения этих ошибок сборка завершилась для меня без ошибок и предупреждений.


1
Эта ошибка всегда связана с XML-файлом, который использует наша привязка данных.
Shubham Tater,


2

В моем случае я использовал комнату, и один из моих методов databasDao имеет неиспользуемый параметр, и, к сожалению, студия Android не предупреждает меня правильно


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-файл, и все работает отлично.
Shubham Tater,

1
Да, пожалуйста. как ты копал глубже?
Симо Ньяти,

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

Вы можете добавить параметр --stacktrace из Файл-> Настройки-> Сборка, Выполнение, Развертывание-> Компилятор-> Параметры командной строки Кстати, в моем случае мне не хватало зависимости: реализация "androidx.room:room-ktx:$ room_version "
Янтарь

1

Передайте ответ @Rene Spies выше, я также получил эту ошибку при работе с привязкой данных. Оказывается, механизму сборки не нравится, когда вы помещаете @Bindableаннотацию в поле в основном конструкторе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-файл, и все работает отлично.
Shubham Tater,

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

Надеюсь, это поможет R


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, затем я также удалил папку сборки внутри папки приложения, а затем перезапустил Android Studio IDE, и это работает для меня


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 после вставленного столбца с помощью: Flow<Long>из классов DAO.

Это должна быть suspendфункция и толькоLong тип, возвращаемый после вставленного столбца.

Иногда эти проблемы неоднозначны, поэтому попробуйте прочитать все сообщения Build Output. Мне помогло следующее сообщение: error: Not sure how to handle insert method's return type.


1

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

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

Проверьте класс базы данных и проверьте, объявлен ли Дао, например,

abstract val commentDatabaseDao: CommentDatabaseDao

объявить как val not 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

Я только что обновил Android Studio IDE до версии 4.1.1 и получил аналогичную проблему.

Я понял…

… Раньше у меня не было некоторых *_Implклассов (я знаю о них по материалам Kotlin) и даже не было каких-то новых *Testsклассов.

Итак, после «бега по всему миру», чтобы принять решение, я просто сделал интуитивно понятный и справедливый выбор: я удалил все те файлы внутри своих «собранных вручную» пакетов, которых не было до обновления Android Studio .

И угадайте, что?

Это сработало. Никаких проблем, ни одной проблемы kapt.

Я не говорю, что это окончательное решение. Но это может сработать для вас.

Всего хорошего.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.