web-dev-qa-db-ja.com

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

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'
}
117
Shax

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

79
Mücahit Kambur

Gradle.propertiesに次の行を追加するだけです:

kapt.incremental.apt=true
145
Ali Ahmed

本当の問題は、インクリメンタル処理が物事を高速化することですが、アノテーションプロセッサのいずれかが非インクリメンタルである場合、それらのどれも実際にはそのように処理されません。

インクリメンタル処理の目的は何ですか?

バージョン1.3.30 + から、インクリメンタル処理により、変更が発生するたびにモジュールが再び完全に処理されなくなり、ビルドプロセスのパフォーマンスが向上しました。

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

Kotlin documentation から:

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

部屋のインクリメンタル処理を修正するには?

ルーム増分注釈プロセッサは、デフォルトでdisabledです。これは既知の問題であり、 here と説明されています。彼らはバージョン2.2.0でそれを修正するつもりです。更新を待つか、それを有効にして警告を取り除くことができます:

gradle.propertiesファイル内:

kapt.incremental.apt=true

(オプションの手順)

databindingをインクリメンタルにするには:

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 Incremental Annotation Processor:Roomは、Gradleを隔離する注釈プロセッサになり、プロセッサオプションroom.incrementalを介してインクリメント可能にすることができます。

87
Dimas Mendes

会議室のドキュメント から:

「Roomには次の注釈プロセッサオプションがあります... room.incremental:Gradle増分注釈プロセッサを有効にします。」

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

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

24
Alberto Gaona

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

あなたの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 
15
smdufb

ここでのその他の回答の多くは、エラーを隠したり、実際に希望どおりに動作させるのではなく、増分処理を無効にしたりします。

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

Android.databinding.incremental=true
Android.lifecycleProcessor.incremental=true
9
Jacques.S

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

5

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

Kotlin 1.3.31以降を使用Kotlin 1.3.30リリース

Android kotlin project gradle.properties file

# 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
4
Shomu

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

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [
                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
                        "room.incremental"     : "true",
                        "room.expandProjection": "true"]
            }
        }
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 を代わりに実装させます。

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

2
Anigif

これは、システム言語が英語以外の言語である場合、databinding側の "İ"などの文字の問題によっても発生する可能性があります。このような場合、英語のコンピューターシステム言語を使用して問題を解決します。

0
Hasan Kucuk