インクリメンタルアノテーション処理要求された警告を取り除く方法は?


150

私はAndroid開発を使用し始め、Roomライブラリを使用しようとしています。昨日から私はこの警告メッセージに直面しています

w:[kapt]インクリメンタルアノテーション処理が要求されましたが、次のプロセッサはインクリメンタルではないため、サポートは無効になっています:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL)、androidx.room.RoomProcessor(NON_INCREMENTAL)。

私は調査して修正しようとしましたが、このエラーを回避できないのは、私のgrale.buildファイルです。私が間違っていることを提案/アドバイスしてください。

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "ps.room.bookkeeper"
        minSdkVersion 15
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.schemaLocation":"$projectDir/schemas".toString()]
            }
        }    
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'com.google.android.material:material:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.2.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

    // life cycle dependencies
    def lifecycle_version = "2.0.0"
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
    kapt "android.arch.lifecycle:compiler:$lifecycle_version"

    //Room dependencies
    //def room_version = "2.1.0"
    implementation 'android.arch.persistence.room:runtime:2.1.0'
    kapt 'android.arch.persistence.room:compiler:2.1.0'
    //annotationProcessor 'android.arch.persistence.room:compiler:2.1.0'

//    implementation "android.arch.lifecycle:extensions:$room_version"
//    kapt "android.arch.persistence.room:compiler:$room_version"
//    androidTestImplementation "android.arch.persistence.room:testing:$room_version"

    //implementation 'androidx.room:room-runtime:2.1.0'
    //annotationProcessor 'androidx.room:room-compiler:2.1.0'
}

なぜあなたのannotationProcessorがコメントされるのですか?それらのコメントを外してプロジェクトをビルドしようとしましたか?(部屋とライフサイクルの両方)
フェルハット

1
あなたのgradle.properitiesで真= android.enableSeparateAnnotationProcessingを追加しようreddit.com/r/androiddev/comments/ai92pt/...これを見つけ、それはあなたの問題に関連するかもしれない
フェルハトErgün

7
当面は、プロジェクトのbuild.gradleファイルのkotlin-gradle-pluginをバージョン1.3.41にダウングレードできます。kaptに関するバグだと思います。詳細:youtrack.jetbrains.com/issue/KT-33515
Necrontyr

4
kapt.incremental.apt=false問題に回避策として記載されているように、libs / <your module name>にgradle.propertiesファイルを作成することもできます。それは私のために働いた。
Necrontyr

2
@Necrontyr、あなたの提案は本当にうまくいきました。
どうも

回答:


80

@Necrontyrが言及したように、kotlin-gradle-pluginバージョン1.3.50にはバグがあります。build.gradle(Project)のkotlin_versionを1.3.41にダウングレードするだけです。


71
@Necrontyrによって言及されたバグは警告とは無関係です。警告は実際に意図されたものであり、1.3.41に下がると警告が非表示になるだけですが、問題は悪化していなくても同じままです。インクリメンタルなアノテーション処理をオンにしたので、物事がより速くなると人々は考えるかもしれません。しかし、真実は、注釈プロセッサのいずれかがインクリメンタルでない場合、それらのいずれもインクリメンタルに処理されないということです。これは、どのライブラリが原因であるかを指摘するフレンドリーなリマインダーです。
Antimonit

15
古いバージョンのライブラリを使用することは解決策ではありません。
Andrew Koster

5
これはまだKotlinの場合1.3.70ですか?
IgorGanapolsky

2
Kotlin 1.3.72を使用していますが、まだこの問題に直面していますか?
アンブセルヴァンロッキー

4
私もこの問題1.3.72に直面しています。
hiashutoshsingh

174

この行をgradle.propertiesに追加するだけです:

kapt.incremental.apt=true

11
これは、受け入れられた答えよりも優れたオプションです。詳細を理解して理解する必要がある方は、こちらのリンクを参照してください。medium.com
Abhimanyu

4
私も失敗しました。
スティーブンスミス

それがここで起こっている理由は誰ですか?
Omer、

私は最近、android(kotlin)プロジェクトへのデータバインディングを有効にし、この警告を受け始めました。上記のようにプロパティを追加すると、うまくいきました。また、すべての最新バージョン、たとえば、すべての依存関係、コンパイラ、ビルドツール、SDKなどを使用
Gail

4
これだけでは、うまくいきませんでした。Roomライブラリのドキュメントで説明されているように、build.gradleファイルも編集する必要がありました。
Nelson Ferragut

121

本当の問題は、インクリメンタル処理により物事が速くなることですが、注釈プロセッサのいずれかが非インクリメンタルである場合、それらのいずれも実際にはそのように処理されません。

増分処理の目的は何ですか?

バージョン1.3.30+、増分処理は、モジュールが完全にビルドプロセスをより良いパフォーマンスを与えて、再び変更されるたびに処理することが許可されていません。

このリリースの主な焦点は、Kotlin / Native、KAPTのパフォーマンス、およびIntelliJ IDEAの改善です。

Kotlinのドキュメントから:

注釈プロセッサ(JSR 269を参照)は、Kaptlinでkaptコンパイラプラグインを使用してサポートされています。簡単に言えば、KotlinプロジェクトでDaggerやData Bindingなどのライブラリを使用できます。

部屋の増分処理を修正する方法?

また、Roomインクリメンタルアノテーションプロセッサはデフォルトで無効になっています。これは既知の問題であり、ここで説明されています。彼らはバージョン2.2.0でそれを修正するつもりです。更新を待つか、次のように設定して警告を取り除くことができます。

gradle.propertiesのファイル:

kapt.incremental.apt=true

(オプションの手順)

データバインディングを増分できるようにするには:

android.databinding.incremental=true

より高速なビルド:

kapt.use.worker.api=true

わずかな変更を加えるだけで、ビルド時間が大幅に短縮されます。

kapt.include.compile.classpath=false

(件名に戻る)

プロジェクトbuild.gradleに、必要な依存関係(Groovy)を追加します。

dependencies {
    ...
    implementation "androidx.room:room-runtime:2.2.0-rc01"
    annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}

そして

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = ["room.incremental":"true"]
            }
        }
    }
}

Kotlin DSLバージョン:

dependencies {
    ...
    implementation("androidx.room:room-runtime:2.2.0-rc01")
    kapt("androidx.room:room-compiler:2.2.0-rc01")
}

そして

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    } 
}

編集:

2019年10月9日

androidx.room:room-*:2.2.0 がリリースされました

Gradleインクリメンタルアノテーションプロセッサ:RoomがGradle分離アノテーションプロセッサになり、プロセッサオプションroom.incrementalを介してインクリメント機能を有効にできます。


8
これは、kapt.incremental.apt = trueがプロジェクトにRoomを含めるときに欠落しているものであるため、受け入れる必要があります。その1つは、AndroidドキュメントのRoom
sela

1
この答えはandroidx.lifecycle:lifecycle-extensions、バージョン2.1.0で使用していたときに役立ちました。2.2.0-beta01に切り替えた後、警告は消えました!
simne7

2
@ simne7最後に私の編集をチェックしてください。バージョン2.2.0がリリースされました=)これをアップグレードして、増分処理機能にアクセスし、ビルドを強化できます。
Dimas Mendes

有効にandroid.buildcache=trueすると速くなりますか?
IgorGanapolsky

1
@IgorGanapolsky Googleの開発者のウェブサイトによると、Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache)。したがって、デフォルトで有効になっているため、有効にしても意味がありません。
Dimas Mendes

37

部屋のドキュメントから:

「Roomには次のアノテーションプロセッサオプションがあります... room.incremental:Gradleインクリメンタルアノテーションプロセッサを有効にします。」

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                    "room.schemaLocation":"$projectDir/schemas".toString(),
                    "room.incremental":"true",
                    "room.expandProjection":"true"]
            }
        }
    }
}

部屋のバージョンを2.2.x以上に更新してください。


3
増分処理を続けたい場合は、正解者。上で設定したschemaLocationまたはexpandProjection引数は必要ない場合があります。room.incrementalで十分です。
bajicdusko

1
developer.android.com/jetpack/androidx/releases/roomによると、まだ2.2.0-rc01バージョンがあります。
CoolMind


これは私のために働い2.2.0に部屋のバージョンを更新
DivideBy0

25

これを修正して、作業中のビルド時間を大幅に短縮するためにできることのリストを次に示します。

あなたにbuild.gradle(モジュール)ファイル:

android {
    ...
    defaultConfig {
        ...
        kapt {
            arguments {
                 arg("room.schemaLocation", "$projectDir/schemas".toString())
                 arg("room.incremental", "true")
                 arg("room.expandProjection", "true")
            }
        }
    }
    ...
}

あなたのgradle.propertiesファイルで:

kapt.incremental.apt=true            // enabled by default on 1.3.50+
kapt.use.worker.api=true             // faster builds
kapt.include.compile.classpath=false // near instant builds when there are few changes

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
//add your specific library if it supports incremental kapt 

18

Kaptインクリメンタルアノテーション処理リクエストを有効にする

Kotlin 1.3.31以降の リリースされた Kotlin 1.3.30を使用する

Android Kotlinプロジェクトのgradle.propertiesファイル

# Enable Kapt Incremental annotation processing requeste
kapt.incremental.apt=true

# Enable android.databinding.annotationprocessor.ProcessDataBinding (DYNAMIC)
android.databinding.incremental=true

# Decrease gradle builds time 
kapt.use.worker.api=true

# turn off AP discovery in compile path, and therefore turn on Compile Avoidance
kapt.include.compile.classpath=false

# Enable In Logcat to determine Kapt
kapt.verbose=true

どうandroid.lifecycleProcessor.incremental=trueですか?
IgorGanapolsky

10

ここでの他の多くの回答は、実際に希望どおりに機能させるのではなく、エラーをカバーするか、増分処理を無効にします。

gradle.propertiesファイル内の特定のライブラリの増分処理を有効にすることができます。これらの設定、またはエラーをスローするライブラリと一致する設定を追加するだけです。

android.databinding.incremental=true
android.lifecycleProcessor.incremental=true

2
についてandroid.lifecycleProcessor.incremental=trueはよく
ダニエルウィルソン

どちらかわかりませんが、試してみたところ、コンパイラが、lifecycleProcessorライブラリで増分処理が有効になっていないことを通知しなくなりました。
Jacques.S

5

「インクリメンタルアノテーション処理が要求されましたが、次のプロセッサはインクリメンタルではないためサポートが無効になっています」という不満がある場合、gradle.propertiesで「kapt.incremental.apt」を「true」に設定する(別の回答で説明)とは直感的。「false」に設定する必要があります。それは私のためにそれをしました。


1
これは実際に機能しました。FALSE人に設定してください!ありがとう
Sakiboy

そして、何が起こりますか?コンパイルは速くなりますか、それとも警告を非表示にしますか?
CoolMind

@CoolMindインクリメンタルアノテーション処理を無効にします。これは、依存関係のいずれかがサポートしていない場合にはとにかく起こらないことです。したがって、警告はなくなり、ビルドプロセスに以前から変更はありません。
DCクリストファー

2
驚いたことに設定kapt.incremental.apt=falseは私を助けました、私はもはやエラーを取得しません
Rakhi Dhavale

2
エラーは発生していませんが、インクリメンタル処理はありません:)
JustAnotherCoder

2

私はAndroidXを使用していandroid.arch.lifecycleますが、と同じだと思います。私にとってそれは単にこれを置き換えるのを助けました:

kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

... これとともに:

implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

したがって、それを使用しandroid.arch.lifecycleている場合は、これと同じ効果がある可能性があります。

kapt "android.arch.lifecycle:compiler:$lifecycle_version"

... これとともに:

implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

これは、Java 8を使用している場合にのみ機能しOnLifecycleEventLifecycleObserverクラスの注釈も削除して、DefaultLifecycleObserver代わりにそれらのオブザーバーに実装させる必要があることに注意してください。

このメソッドへの変更は、ここにbuild.gradle示されている依存性でも推奨されます


なぜあなたは取り除くのkaptですか?
IgorGanapolsky

あなたはもっとここでのJava 8.参照を使用している場合AndroidXライフサイクルによって提案されたものである@IgorGanapolsky:developer.android.com/jetpack/androidx/releases/...
Anigif

kaptコトリンにとって不可欠である
IgorGanapolsky

1
libが必要とする場合のみ。彼らはお勧めしますので、アノテーションは、Java 8いったん廃止されます。このページによると、Android上でより多くの主流を得るcommon-java8ことができた場合:developer.android.com/reference/androidx/lifecycle/Lifecycle
Anigif

面白い。彼らはkapt特に言及していません...
IgorGanapolsky

2

あなたが本当にすべきことは、モジュールアプリのbuildConfigタグにこれらのコード行を実装することbuild.gradleです:

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }

0

上記の答えは便利ですが、何が私が軽減される助けkotlin_versionbuild.gradle(Project)する1.3.41と、プロジェクトをビルドします。これにより、エンティティモデルに問題がないかどうかを確認できます。

私は、私が注釈を付けるのを忘れていました@PrimaryKey。あなたは何か違うかもしれません。Kotlin 1.3.41では、これらの問題を確認できます。これらの問題を修正kotlin_versionして、以前の問題に戻します。


-1

これは、システム言語が英語以外の言語である場合に、データバインディング側の「İ」などの文字の問題が原因で発生する場合もあります。このような場合は、コンピューターシステムの言語を英語で使用すると問題が解決します。

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