org.jetbrains.kotlin.gradle.internal.KaptExecution을 실행하는 동안 실패가 발생했습니다.


133

갑자기이 오류가 발생하기 시작하고 누군가이 오류가 어디에 있는지 알려 주면 왜 도움이 될지 알 수 없습니다. 내가 얻을 수있는 것은 안드로이드 스튜디오의 새로운 업데이트 때문입니다. 내가 받고있는 오류에 대한 자세한 요약.

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파일에 코드를 보여주세요 .
Sergey

DataBinderMapperImpl.java 코드도 보여주세요.
Sergey

3
Android Studio 4로 업데이트하셨습니까? 여기에 같은 pb
Samuel Eminet

2
Android Studio 4로 업데이트했는데 Room을 사용할 때 동일한 오류가 발생했습니다. 내 쿼리 중 하나를 변경하여 일시적으로 수정할 수있었습니다. 처음에 "SELECT case_name FROM SavedCases"라는 쿼리가 있었는데 "SELECT * FROM SavedCases"로 변경하고 오류 메시지가 사라졌습니다. 어떤 이유로 특정 열만 쿼리하려고 할 때만이 오류가 발생합니다. 이것은 문제에 대한 이상적인 해결책이 아니며 누군가가 더 나은 해결책을 가지고 있기를 바랍니다.
Hani

비슷한 오류가 발생하여 저에게 맞는 해결책을 찾았습니다. 비슷한 일을했을 수도 있습니다. stackoverflow.com/questions/63133657/…
Mustaqode 2010

답변:


200

Android Studio의 UI는 오류를 숨기고있었습니다.

오류가 발생하면 목록보기에 항목이 강조 표시되고 터미널보기에 도움이되지 않는 메시지가 표시됩니다. bad bad

실제 오류를 찾으려면 목록보기에서 루트 항목을 선택하여 Android Studio가 터미널보기에 전체 빌드 출력을 표시하도록 한 다음 스크롤하여 오류를 찾습니다. good good


6
당신이 컴파일 시간이 있으면 룸 (DB) 오류가 그것을 보여줄 것 같은 그 - 그 쿼리 중 하나 또는 일부가 잘못 수단 있음
Idan Damri

컴파일 타임 DB 오류에 대해 다음과 같이 표시 될 것 같습니다. 제 경우에는 엔티티 객체를 잘못 설정 한 것에 대한 컴파일 타임 Realm DB 오류였습니다 ...
Eric

1
upvotes에 의해 판단하는 것은, 여기에 UI의 결정은 좋은 하나없는
다니엘 윌슨

1
이것은 정답을 표시해야
Mike6679

56

대답에 조금 늦었을 수도 있지만 어쨌든 동일한 오류가 발생했습니다. 빌드 실패는 Android Studio가 프로젝트 크기가 매우 커서 지적하지 못하는 오류로 인해 발생할 수 있습니다.

정확한 오류를 쉽게 지적 할 수있는 방법은 다음과 같습니다.

  1. Android 스튜디오에서 Analyze 메뉴 로 이동하여 Inspect Code를 클릭합니다 . 전체 프로젝트를 확인하고 확인을 클릭하고 검사가 완료 될 때까지 기다립니다.

    코드 검사

  2. 이제 모든 오류, 경고 등을 가리키는 탭이 표시되며 이제 실제 문제를 해결할 수 있습니다.

    오류 탭


2
예, 정확히 오류를 표시합니다. (내가 XML에서 몇 가지 실수를했다)
하리 샨 S

2
빌드가 실패 할 때 Android Studio가 오류를 직접 표시하지 않는 이유를 이해할 수 없습니다. 이것에 대해 감사합니다, 저를 많이 도왔습니다
moyo 2010-08-24

34

근본적인 문제를 확인하는 방법은 다음 명령을 실행하는 것입니다.

./gradlew assembleDebug --stacktrace

17

같은 문제가 발생하여 더 많은 정보를 얻으려고 노력했습니다.

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

3
gradle->app->Tasks->Build->assemble그게 뭐야?
user25 2011

@ USER25 Gradle을 도구 창
아제 Gurappanavar

14

나는 한동안 같은 오류가 있었고 데이터베이스 코드에서 오타를 범했다는 것을 알게 된 다른 패키지를 확인하기 시작했습니다. 따라서 "데이터베이스 및 기타 활동 클래스 파일을 살펴보면 실수가있을 수 있습니다."


4
어떤 종류의 실수?
Mustaqode

제 경우에는 @DaoMyDao 인터페이스 를 추가 하는 것을 잊었습니다
Ishaan Kumar 2011

13

변화

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`

20
이것은 적절한 해결책이 아닙니다
Shubham Tater

2
@ShubhamTater 이것은 gradle4.0.0이 수정 될 때까지 해결책입니다. 이것은 일시적인 해결책입니다. gradle4.0.0이 수정되면. Gradle 4.0 이상을 업데이트 할 수 있습니다
Mujeeb Rahaman T

4
나는 4.0.1에이 예외를 잡은
Ярослав Нестеров에게

8

나를 위해 XML 표현식의 많은 참조 오류와 오류 DataBinding가이 오류 를 생성했습니다.

더 이상 필요 없다고 생각했기 때문에 파일 <variable/>에서 a를 삭제 layout했습니다. layout파일 에서 참조 된 변수가 있다는 것을 잊었습니다 .

프로젝트를 빌드 한 후이 오류가 발생하여 BindingImpl클래스가 존재하지 않기 때문에 가져올 수 없으며이 오류는 위의 KaptExecution오류 와 유사한 경고로만 표시되었습니다 .

잠시 검색 한 후이 오류를 발견하고 해결했습니다. 그런 다음 내가 이름을 바꾸고 Fragment파일 에서 이름을 바꾸지 않았기 때문에 표시된 곳에 많은 참조 오류가 있습니다. 이러한 오류도 해결 한 후 오류나 경고없이 빌드가 완료되었습니다.


1
이 오류는 항상 데이터 바인딩이 사용하는 XML 파일과 관련이 있습니다.
Shubham Tater

4

나는 같은 문제가 있었다. 제가 어떻게 문제를 해결했는지, 그리고 어떻게 해결했는지에 대한 예제를 통해 더 큰 그림을 얻을 수있을 것입니다.

해결하기 전에

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

POJO ModuleSession에서 IsUpdated 필드를 제거하고 세션 테이블에 추가했습니다.

변경 후

@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

그러나 여전히 편하지 않은 경우 코드를 게시 할 수 있습니다.

도움이 되길 바랍니다


나는 내 문제에 대한 해결책을 얻었습니다. 그것이 당신을 위해 작동하는지 여부는 모르지만 soultion은 바인딩중인 XML 파일을 확인하고 바인딩은 컴파일 타임 시스템이며 XML 파일에서 작동하므로 확인하십시오. 오류가 있으면 이러한 유형의 오류가 표시됩니다. 내 XML 파일을 수정하면 모든 것이 완벽하게 작동합니다.
Shubham Tater

2
예, 부탁합니다. 어떻게 더 깊게 파 셨나요?
Simo Nyathi

2
@LeonardoSibela 죄송합니다. 제가 말하려는 것은 빌드 할 때 --stacktrace 옵션을 추가하여 오류에 대한 자세한 정보를 얻을 수 있도록하는 것입니다.
Ali

File-> Settings-> Build, Execution, Deployment-> Compiler-> Command-line Options Btw에서 --stacktrace 옵션을 추가 할 수 있습니다. 제 경우에는 종속성이 누락되었습니다. implementation "androidx.room:room-ktx:$ room_version "
Amber

4

제 경우에는 방을 사용했고 내 databasDao 메서드 중 하나에 사용되지 않은 매개 변수가 있고 안타깝게도 Android 스튜디오에서 올바르게 경고하지 않습니다.


내 경우에는 내가 내 클래스 중 하나에 @PrimaryKey을주고 깜빡 한
varotariya vajsi


4

나는 같은 문제가 있었다. 제 경우에는 데이터베이스에 관한 문제였습니다. 이 코드 줄을 변경해야 @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

데이터베이스에 다른 테이블을 추가했지만 위 줄에 테이블을 추가하는 것을 잊었습니다.


3

많은 고통을 겪은 후 적어도 오류 메시지 나 소스를 찾는 데 도움이되는 모든 것이 표시되기를 바라는 annotationProcessor대신 시도하기로 결정했습니다 kapt. 그러나 다행히도 (또는 불행히도 시간 낭비로 인해) 오류없이 성공적으로 구축되었습니다. 대부분 kapt그 자체 로 버그입니다 . 따라서이 솔루션을 시도하면 도움이 될 수 있습니다.


이것에 대한 thx. 'annotationProcessor'를 사용하도록 전환했고 성공적으로 빌드되었습니다. 그런 다음 다시 'kapt'로 전환했고 다시 빌드 할 수있었습니다.
Mark Lapasa


1

위의 @Rene Spies의 대답에 외치십시오. 데이터 바인딩 작업 중에도이 오류가 발생했습니다. Kotlin @Bindable의 기본 생성자에있는 필드에 주석을 추가 할 때 빌드 엔진이이를 좋아하지 않는 것으로 나타 data class났습니다.

따라서 다음을 수행하지 마십시오.

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

보너스 : 설정 및 가져 오기의 무한 루프를 방지하기 위해 나와 같은 양방향 바인딩을 사용하려는 경우 필드에 값을 설정하기 전에 동일한 값을 확인하는 것을 잊지 마십시오.


나는 내 문제에 대한 해결책을 얻었습니다. 그것이 당신을 위해 작동하는지 여부는 모르지만 soultion은 바인딩중인 XML 파일을 확인하고 바인딩은 컴파일 타임 시스템이며 XML 파일에서 작동하므로 확인하십시오. 오류가 있으면 이러한 유형의 오류가 표시됩니다. 내 XML 파일을 수정하면 모든 것이 완벽하게 작동합니다.
Shubham Tater

1

흥미롭게도 Retrofit에 대한 설명을 추가했기 때문에이 오류가 발생했습니다. Room과 Retrofit의 설명을 혼동하지 않도록주의하십시오.


1

제 경우에는 ViewModel에서 Observable을 구현하지 않았기 때문입니다. 제약 레이아웃에 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 변수 제거-In XML .
<variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. 모든 viewModel 바인딩 참조를 제거했습니다-In XML .
android:text="@{viewModel.simName}"
  1. 바인딩 매핑에 대한 viewModel 인스턴스 참조 제거-In Activity
binding.viewModel = viewModel
  1. 프로젝트를 정리 하고 다시 컴파일하십시오.

  2. viewModel 변수 추가-In XML & Build project .

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. 바인딩 매핑에 viewModel 인스턴스 참조 추가- 활동 및 빌드 프로젝트
binding.viewModel = viewModel
  1. 모든 viewModel 바인딩 참조 추가 -XML 및 빌드 프로젝트. .
    android:text="@{viewModel.simName}"
  1. 이제 작동합니다.

-나는 그것이 당신에게도 효과가 있기를 바랍니다.


1

Room 과 동일한 문제가 있었고 viewBinding을 사용하지 않았습니다 . 내 데이터베이스 클래스에서 exportSchema
사용 하여 false로 수정했습니다 .

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

기억하십시오 : exportScehma는 사용 사례에 따라 다를 수 있으며 일반적으로 false로 유지되므로 false로 설정합니다.


1

제 경우에는 전역 적으로 하나의 변수 UserManager를 NetWorkManager로 변경하고 UserManager 클래스가있는 모든 곳에서 NetworkManager로 변경했습니다.

Hilt를 사용하고 있기 때문에 프로젝트를 다시 빌드해야했습니다.

프로젝트를 정리하고 Kotlin이 오류가있는 위치를 보여주었습니다.


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<Long>DAO 클래스에서 열 삽입 후 Flow로 단일 값을 반환하려고 할 때였습니다 .

삽입 된 열 후에 반환 할 suspend함수 및 유일한 Long유형 이어야합니다 .

이러한 문제는 언젠가 모호하므로 모든 빌드 출력 메시지를 읽으십시오. 도움이되는 메시지는 다음과 같습니다. error: Not sure how to handle insert method's return type.


1

아무것도 효과가 없었습니다. 나는 모든 것을 시도했고 마침내 큰 문제를 일으키는 작은 실수를 발견했습니다.

새로 생성 된 데이터베이스 파일로 돌아가서 각 파일의 코드를 한 줄씩주의 깊게 확인하십시오.

데이터베이스 클래스를 확인하고 예를 들어 Dao가 선언되었는지 확인하십시오.

abstract val commentDatabaseDao: CommentDatabaseDao

var가 아닌 val로 선언하면 이것이 내 경우에 마침내 해결되었습니다.


1

방금 이런 일이 일어났습니다. 다른 개발자가 병합을 제대로 완료하지 않았으므로이 줄이 코드에 있습니다.

<<<<<<< HEAD

컴파일 오류가 발생하는 대신 KaptExecution 오류가 발생했습니다.


1

나는 같은 오류가 있었다. 두 가지 문제가있었습니다.

  1. 추가해야 할 수 있습니다.

    구현 'androidx.room:room-ktx:2.2.5'

  2. activity_xml 파일 중 하나에서 멤버로 참조 된 파일을 삭제했습니다. 오류는 kapt 대신 annotationProcessor로 변경할 때까지 아무런 단서를주지 않았고 오류를 지적하고 파일을 찾았으며 더 이상 사용하지 않고 삭제 된 파일에 대한 참조를 충분히 가지고있었습니다. 이 데이터 참조를 xml에서 제거하고 모두 지 웠습니다. 그런 다음 다시 kapt에 넣습니다.


1

예,이 오류도 발생했습니다. Room 관련 문제였습니다.

나는 나의 정의했다 TypeConverters,하지만 결코 내을 주석 없습니다 Room database와 함께 : @TypeConverters(TypeConverter.class).


1

제 경우에는 Entity 클래스에 @PrimaryKey를 추가하는 것을 잊었습니다.



0

제 경우에는이 줄을 추가했습니다

 android {
    .
    .
    .

    kapt.includeCompileClasspath = false

 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.