org.jetbrains.kotlin.gradle.internal.KaptExecutionの実行中にエラーが発生しました


129

突然このエラーが発生し始めましたが、誰かがこのエラーの場所を教えてくれただけで十分に役立つ理由がわかりません。私が得ることができるのは、AndroidStudioの新しいアップデートのためです。私が得ているエラーの詳細な要約。

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
サミュエルEminet

2
Android Studio 4にアップデートしましたが、Roomを使用しても同じエラーが発生しました。クエリのいずれかを変更することで、一時的に修正できました。最初に「SELECTcase_nameFROM SavedCases」というクエリを実行し、次に「SELECT * FROM SavedCases」に変更すると、エラーメッセージが表示されなくなりました。何らかの理由で、特定の列のみをクエリしようとしたときにのみこのエラーが発生します。これは問題の理想的な修正ではありません。誰かがより良い修正をしてくれることを願っています。
ハニ

同様のエラーが発生し、自分に合った解決策を見つけました。あなたは似たようなことをしたかもしれません。stackoverflow.com/questions/63133657/...
Mustaqode

回答:


197

AndroidStudioのUIはエラーを隠していただけです...

エラーが発生すると、リストビューでアイテムが強調表示され、ターミナルビューに役に立たないメッセージが表示されました。 悪い悪い

実際のエラーを見つけるには、リストビューでルートアイテムを選択して、Android Studioがビルド出力全体をターミナルビューに表示するようにし、スクロールしてエラーを見つけます。 グッドグッド


6
あなたはコンパイル時ルーム(DB)の誤差を持っている場合、それはそのように表示されます- 1またはクエリの一部が間違っていることを意味していること
IDAN DAMRI

コンパイル時のDBエラーについては、このように表示されると思います...私の場合は、エンティティオブジェクトが正しく設定されていないことに関するコンパイル時のレルムDBエラーでした...
Eric

1
upvotesから判断すると、ここでUIの決定が良いものではありません
ダニエル・ウィルソン

1
これは正解とマークする必要があります
Mike66 7920

56

答えが少し遅れているかもしれませんが、とにかく同じエラーが発生していました。ビルドの失敗は、おそらくプロジェクトのサイズが非常に大きいためにAndroidStudioが指摘できないエラーが原因である可能性があります。

正確なエラーを指摘する簡単な方法は次のとおりです。

  1. Android Studioで、[分析]メニューに移動し、[コードの検査]をクリックします。プロジェクト全体を確認し、[OK]をクリックして、検査が終了するのを待ちます。

    コードを検査する

  2. これで、すべてのエラー、警告などを示すタブが表示され、実際の問題を解決できるようになりました。

    [エラー]タブ


2
はい、それは正確にエラーを示しています。(XMLで間違いを犯しました)
Hari ShankarS20年

2
ビルドが失敗したときにAndroidStudioがエラーを直接表示しない理由がわかりません。意味がありません。このためのおかげで、私をたくさん助けた
モヨ

34

根本的な問題が何であるかを見つける方法は、次のコマンドを実行することです。

./gradlew assembleDebug --stacktrace

17

同じ問題が発生したので、次のようにしてより多くの情報を取得しようとしました

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

この後、「注釈処理中にエラーが発生しました」という正確なエラーが発生しました。最近調整したDAOクラスを確認したところ、メソッドの戻り値の型の1つが定義されていないことがわかりました。

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

2
gradle->app->Tasks->Build->assembleそれは何ですか?
user 2520年

@ user25 Gradleツールウィンドウ
AjayGurappanavar20年

14

しばらく同じエラーが発生した後、他のパッケージをチェックし始め、データベースコードのタイプミスを犯したことがわかりました。したがって、「データベースやその他のアクティビティクラスファイルを調べると、そこにいくつかの間違いが見つかる可能性があります。」


4
どんな間違い?
Mustaqode

私の場合、私は追加するのを忘れ@DaoMyDaoインターフェイスに
Ishaanクマール

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"

驚くべきことに、それは助けになりました
user 2520年

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`

20
これは適切な解決策ではありません
ShubhamTater20年

2
@ShubhamTaterこれは、gradle4.0.0が修正されるまでの解決策です。これは一時的な解決策です。gradle4.0.0が修正されたら。
Gradle

4
私は4.0.1でこの例外をキャッチ
ЯрославНестеров

8

私にとっては、一連の参照エラーとXML式のDataBindingエラーがこのエラーを引き起こしました。

ファイル<variable/>内のを削除しましたlayout。もう必要ないと思ったからです。layoutファイルで参照されている変数があることを忘れました。

プロジェクトをビルドした後、これによりエラーが発生しましたが、BindingImplクラスが存在せず、このエラーは上記のKaptExecutionエラーと並行して警告としてのみ表示されたため、クラスをインポートできませんでした。

しばらく検索したところ、このエラーを見つけて解決しました。次に、何かの名前を変更しましたが、Fragmentファイル内で名前を変更しなかったため、表示されている参照エラーの束。これらのエラーも解決した後、エラーや警告なしでビルドが完了しました。


1
このエラーは、データバインディングが使用しているXMLファイルに常に関連しています。
ShubhamTater20年

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

ただし、それでも不安がある場合は、コードを投稿できます。

それがお役に立てば幸いです


私は私の問題の解決策を得ました、それがあなたのために働くかどうかはわかりませんが、魂はあなたがバインドしているあなたのXMLファイルをチェックすることです、バインドはコンパイル時システムです、そしてそれはXMLファイルのために働くので彼らのその中にエラーがあると、このタイプのエラーが表示されます。XMLファイルを修正すると、すべてが完全に機能します。
ShubhamTater20年

2
はい、お願いします。どのように深く掘り下げましたか?
SimoNyathi20年

2
@LeonardoSibela申し訳ありませんが、私が言いたかったのは、ビルド時に--stacktraceオプションを追加して、エラーに関する詳細情報を取得できるようにすることです。
アリ

--stacktraceオプションは、[ファイル]-> [設定]-> [ビルド]、[実行]、[展開]-> [コンパイラ]-> [コマンドラインオプション]から追加できます。私の場合、依存関係がありませんでした。実装 "androidx.room:room-ktx:$ room_version "
アンバー

4

私の場合、部屋を使用しましたが、databasDaoメソッドの1つに未使用のパラメーターがあり、残念ながらandroidstudioが正しく警告しません


私の場合、クラスの1つに@PrimaryKeyを与えるのを忘れていました
varotariyavajsi20年


4

私も同じ問題を抱えていました。私の場合、問題はデータベースに関するものでした。このコード行を変更する必要がありました @Database(entities = [SearchedLocation::class, FavoriteLocation::class], version = 1)

データベースに別のテーブルを追加しましたが、上の行にテーブルを追加するのを忘れました。


2

たくさんの苦労の末、少なくともエラーメッセージやソースを見つけるのに役立つ何かが表示されることannotationProcessorkapt期待するのではなく、試してみることにしました。しかし、幸いなことに(または残念なことに、時間の浪費のために)、エラーなしで正常にビルドされました。それkapt自体はほとんどバグです。だから、この解決策を試してみてください、そしてそれは役立つかもしれません。


このためのthx。'annotationProcessor'を使用するように切り替えたところ、正常にビルドされました。それから私はそれを「kapt」に戻しました、そしてそれは再び構築することができました。
マークラパサ


1

上記の@ReneSpiesの回答に大声で叫んでください。データバインディングの操作中に、このエラーも発生しました。Kotlin@Bindableのaのプライマリコンストラクターのフィールドにアノテーションを配置すると、ビルドエンジンがそれを気に入らないこと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
        }
}

ボーナス:設定と取得の無限ループを防ぐために私のような双方向バインディングを使用しようとしている場合は、値をフィールドに設定する前に同じ値を確認することを忘れないでください。


私は私の問題の解決策を得ました、それがあなたのために働くかどうかはわかりませんが、魂はあなたがバインドしているあなたのXMLファイルをチェックすることです、バインドはコンパイル時システムです、そしてそれはXMLファイルのために働くので彼らのその中にエラーがあると、このタイプのエラーが表示されます。XMLファイルを修正すると、すべてが完全に機能します。
ShubhamTater20年

1

興味深いことに、Retrofitの説明を追加したため、このエラーが発生していました。RoomとRetrofitの説明を混同しないように注意してください。


1

私の場合は、ViewModelにObservableを実装していなかったためです。EditTextを制約レイアウトに追加しましたandroid:text="@={addProductViewModel.inputProductName}"

ObservableViewModelクラスに実装すると、エラーはなくなりました

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インスタンス参照を削除しました-アクティビティ内
binding.viewModel = viewModel
  1. プロジェクトクリーンアップして再コンパイルします。

  2. viewModel変数を追加します-XMLおよびビルドプロジェクト内

< variable
    name="viewModel"
    type="com.xx.AppViewModel" / >
  1. バインディングマッピングにviewModelインスタンス参照を追加します-Activity &Buildプロジェクトで
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

私の場合、1つの変数UserManagerをNetWorkManagerにグローバルに変更し、UserManagerクラスが存在するすべての場所でNetworkManagerに変更しました。

Hiltを使用しているため、プロジェクトを再構築する必要がありました。

プロジェクトをクリーンアップすると、Kotlinがエラーの場所を示しました。


1

同じ問題が発生したので、プロジェクトの.ideaフォルダーと.gradleフォルダーを削除してから、appフォルダー内のビルドフォルダーも削除してから、android studioIDEを再起動してみてください。


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クラスから、列が挿入された後のフローで単一の値を返そうとしたときでした。

これはsuspend関数であり、Long列を挿入した後に返すタイプのみである必要があります。

これらの問題はいつかあいまいになることがあるので、すべてのビルド出力メッセージを読んでみてください。私を助けてくれたメッセージは次のとおりです。 error: Not sure how to handle insert method's return type.


1

何もうまくいきませんでした私はすべてを試しましたが、最終的に大きな問題を引き起こしている小さな間違いを見つけました。

データベース用に新しく作成された各ファイルに戻り、各ファイルのコードを1行ずつ注意深く確認します。

データベースクラスをチェックし、Daoがたとえば次のように宣言されているかどうかをチェックします。

abstract val commentDatabaseDao: CommentDatabaseDao

varではなくvalとして宣言します。これは私の場合であり、最終的には解決されました。


1

私はちょうどこれが私に起こった。別の開発者がマージを適切に完了していなかったため、この行はコードに含まれていました

<<<<<<< HEAD

コンパイルエラーが発生する代わりに、KaptExecutionエラーが発生しました。


1

同じエラーが発生しました。私は2つの問題を抱えていました。

  1. 追加する必要があるかもしれません

    実装 'androidx.room:room-ktx:2.2.5'

  2. いずれかのactivity_xmlファイルでメンバーとして参照されているファイルを削除しました。このエラーは、kaptではなくannotationProcessorに変更するまで、何の手がかりも与えませんでした。その後、エラーが指摘され、ファイルが見つかりました。使用しなくなったファイルへの参照があり、削除されました。このデータ参照をxmlから削除すると、すべてクリアされました。それから私はそれをkaptに戻しました。




0

Android Studio IDEを4.1.1バージョンに更新したところ、同様の問題が発生しました。

私が気付いたのは…

…以前は、いくつかの*_Implクラス(Kotlinのものでそれらについて知っています)がなく、いくつかの新しい*Testsクラスさえありませんでした。

そのため、「全世界を実行」して解決策を見つけた後、直感的で公正な選択をしました。AndroidStudioのアップデート前にはなかった、「手作り」パッケージ内のすべてのファイルを削除しました

そして、何を推測しますか?

機能した。問題はありません。問題は1つもありませんkapt

それが最終的な解決策だと言っているのではありません。しかし、それはあなたのために働くことができます。

良いものを持っている。


0

うん、私もこのエラーが発生し、それもRoom関連する問題でした。

私は自分が定義されていたTypeConvertersが、決して私を注釈を付けないRoom databaseで:@TypeConverters(TypeConverter.class)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.