Я только начал использовать разработку для 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'
}
kapt.incremental.apt=false
тоже, как описано в проблеме в качестве временного решения. У меня это сработало.Ответы:
Как упомянул @Necrontyr, есть ошибка в версии 1.3.50 kotlin-gradle-plugin. Просто понизьте версию kotlin_version в build.gradle (Project) до 1.3.41.
источник
1.3.70
?Просто добавьте эту строку к себе gradle.properties:
kapt.incremental.apt=true
источник
Настоящая проблема заключается в том, что инкрементная обработка делает вещи быстрее, но если какой-либо из процессоров аннотаций не инкрементный, ни один из них не будет фактически обрабатываться таким образом.
Какова цель инкрементальной обработки?
Начиная с версии 1.3.30+ , инкрементная обработка позволяла не обрабатывать модули полностью снова при каждом изменении, что улучшало производительность процесса сборки:
Из документации Kotlin :
Как исправить инкрементную обработку комнаты?
Обработчик добавочных аннотаций комнат по умолчанию отключен . Это известная проблема, и она описана здесь . Они намерены исправить это в версии 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") } } } }
9 октября 2019 г.,
androidx.room:room-*:2.2.0 освобождается .
Последнее обновление:
Для новейших версий Kotlin DSL используйте
javaCompileOptions { annotationProcessorOptions { arguments["room.incremental"] = "true" } }
источник
androidx.lifecycle:lifecycle-extensions
версию 2.1.0, и после перехода на 2.2.0-beta01 предупреждение исчезло!android.buildcache=true
это быстрее?Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache)
. Так что нет смысла включать его, так как он включен по умолчанию.Из документации по комнате :
"Room имеет следующие параметры обработчика аннотаций ... room.incremental: включает обработчик добавочных аннотаций Gradle."
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments = [ "room.schemaLocation":"$projectDir/schemas".toString(), "room.incremental":"true", "room.expandProjection":"true"] } } } }
Обязательно обновите версию комнаты до 2.2.x или выше.
источник
Вот список того, что вы можете сделать, чтобы исправить это и значительно сократить время сборки, пока вы это делаете.
В вашем
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
источник
Включить запрос на добавочную обработку аннотаций 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
?Многие другие ответы здесь скрывают ошибку или отключают инкрементную обработку вместо того, чтобы заставить ее работать так, как вы хотите.
Вы можете включить инкрементную обработку для вашей конкретной библиотеки в
gradle.properties
файле. Просто добавьте эти настройки или тот, который соответствует библиотеке, вызывающей ошибку:android.databinding.incremental=true android.lifecycleProcessor.incremental=true
источник
android.lifecycleProcessor.incremental=true
этом, похоже, это нигде не задокументированоЕсли он жалуется, что «Запрошена инкрементная обработка аннотаций, но поддержка отключена, потому что следующие процессоры не являются инкрементными», то установка для «kapt.incremental.apt» значения «true» (упомянутого в другом ответе) в gradle.properties является контр- интуитивно понятный. Вам нужно установить его на «false». Это сделало это для меня.
источник
kapt.incremental.apt=false
мне помогла, я больше не получаю ошибкуЯ использую 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
перейти на этот метод в зависимостях, показанных здесь .источник
kapt
?kapt
необходимо для Котлинаcommon-java8
если возможно: developer.android.com/reference/androidx/lifecycle/Lifecyclekapt
особо не упоминают ...Что вам действительно нужно сделать, так это реализовать эти строки кода в своем
buildConfig
теге вbuild.gradle
модульном приложении:javaCompileOptions { annotationProcessorOptions { arguments = [ "room.schemaLocation" : "$projectDir/schemas".toString(), "room.incremental" : "true", "room.expandProjection": "true"] } }
источник
Выше ответы могут быть полезны, но то , что помогло мне сокращает
kotlin_version
вbuild.gradle(Project)
к1.3.41
и созданию проекта. Это позволит вам увидеть, есть ли какие-либо проблемы с вашей моделью сущности.Моя была, забыл аннотировать
@PrimaryKey
. У вас может быть что-то другое. Kotlin1.3.41
позволяет увидеть эти проблемы. Устраните эти проблемы и вернитесьkotlin_version
к предыдущей.источник
Начиная с версии 1.3.30, kapt поддерживает инкрементную обработку аннотаций в качестве экспериментальной функции. Однако, начиная с версии 1.3.50, по умолчанию включена инкрементная обработка аннотаций .
Итак, вы должны добавить
kapt.incremental.apt=true
строку в свойgradle.properties
файл, чтобы включить инкрементную обработку аннотаций, если ваша версия kapt больше или равна 1.3.30 и ниже 1.3.50. В противном случае; вам не нужно устанавливатьkapt.incremental.apt
его,true
чтобы включить его. Хотя, вы можете установить его,false
чтобы отключить, если хотите.Помимо всего этого; Для инкрементальной обработки аннотаций также необходимо включить инкрементную компиляцию . Итак, вы должны добавить
kotlin.incremental=true
строку в свойgradle.properties
файл, чтобы воспользоваться функцией инкрементной обработки аннотаций.Обратите внимание, что опция инкрементной обработки аннотаций в Комнате включена по умолчанию, начиная с версии 2.3.0-alpha02. Это означает, что вам не нужно устанавливать
room.incremental
аргумент,true
если ваша версия библиотеки больше или равна этой. Подробнее см. В выпуске №112110217 .Также обратите внимание, что если вы используете Android Gradle Plugin 3.6.x или новее, опция инкрементной обработки аннотаций включена по умолчанию для привязки данных. Таким образом, вам не нужно добавлять
android.databinding.incremental=true
строку в свойgradle.properties
файл. Подробнее см. В выпуске №110061530 .источник
Это также может быть вызвано проблемами с символами, такими как « İ » на стороне привязки данных, если системный язык не является английским. В таком случае использование английского языка компьютерной системы решит проблему.
источник