Я только начал использовать разработку Android и пытался использовать библиотеку комнаты. Со вчерашнего дня я сталкиваюсь с этим предупреждением
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'
}
Ответ 1
В версии 1.3.50, как упоминалось в @Necrontyr, есть ошибка в версии kotlin-gradle-plugin. Просто понизьте версию kotlin_version в build.gradle(Project) до версии 1.3.41.
Ответ 2
Просто добавьте эту строку к вам gradle.properties:
kapt.incremental.apt=true
Ответ 3
Реальная проблема заключается в том, что инкрементная обработка делает вещи быстрее, но если какой-либо из процессоров аннотаций не является инкрементным, ни один из них на самом деле не будет обработан таким образом.
Какова цель инкрементальной обработки?
Начиная с версии 1.3. 30+, инкрементная обработка позволяла не обрабатывать модули снова полностью при каждом изменении, что повышает производительность процесса сборки:
Основное внимание в этом выпуске уделялось Производительность Kotlin/Native, KAPT, а также улучшения для IntelliJ IDEA.
Из документации Kotlin:
Процессоры аннотаций (см. JSR 269) поддерживаются в Kotlin с помощью плагин капт компилятор. В двух словах, вы можете использовать библиотеки, такие как Dagger или Data Binding в ваших проектах Kotlin.
Как исправить добавочную обработку комнаты?
А процессор добавочных аннотаций 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")
}
}
}
}
Edit:
9 октября 2019 г.
androidx.room:room-*:2.2.0 выпущен.
Gradle Процессор добавочной аннотации: Комната теперь Gradle изолирующий процессор аннотаций и возможность увеличения могут быть включены через Вариант процессора комната. Инкремент.
Ответ 4
Из документации по комнате:
"Комната имеет следующие параметры процессора аннотаций... room.incremental: Включает инкрементный обработчик аннотаций Gradle."
android {
...
defaultConfig {
...
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation":"$projectDir/schemas".toString(),
"room.incremental":"true",
"room.expandProjection":"true"]
}
}
}
}
Обязательно обновите версию комнаты до версии 2.2.x или выше.
Ответ 5
Вот список действий, которые вы можете сделать, чтобы исправить это и значительно сократить время сборки, пока вы на нем.
В вашем файле 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
Ответ 6
Многие другие ответы здесь прикрывают ошибку или отключают инкрементную обработку вместо того, чтобы фактически заставить ее работать так, как вы хотите.
Вы можете включить инкрементную обработку для вашей конкретной библиотеки в файле gradle.properties
. Просто добавьте эти настройки или в зависимости от того, какая из них соответствует библиотеке, которая выдает ошибку:
android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
Ответ 7
Что вам действительно нужно сделать, так это реализовать эти строки кода в теге buildConfig
в приложении модуля build.gradle
:
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation" : "$projectDir/schemas".toString(),
"room.incremental" : "true",
"room.expandProjection": "true"]
}
}
Ответ 8
Если он жалуется на то, что "запрашивается инкрементная обработка аннотаций, но поддержка отключена, поскольку следующие процессоры не являются инкрементными", тогда установка "kapt.incremental.apt" в "true" (упоминается в другом ответе) в gradle.properties является встречным. интуитивный. Вам нужно установить его на "ложь". Это сделало это для меня.
Ответ 9
Я использую 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, и вам также следует удалить OnLifecycleEvent
аннотации для LifecycleObserver
классов и позволить этим наблюдателям реализовать DefaultLifecycleObserver
вместо этого.
Переход на этот метод также рекомендуется в зависимости build.gradle
, показанной здесь.