Ответ 1
В версии 1.3.50, как упоминалось в @Necrontyr, есть ошибка в версии kotlin-gradle-plugin. Просто понизьте версию kotlin_version в build.gradle(Project) до версии 1.3.41.
Я только начал использовать разработку 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.3.50, как упоминалось в @Necrontyr, есть ошибка в версии kotlin-gradle-plugin. Просто понизьте версию kotlin_version в build.gradle(Project) до версии 1.3.41.
Просто добавьте эту строку к вам gradle.properties:
kapt.incremental.apt=true
Реальная проблема заключается в том, что инкрементная обработка делает вещи быстрее, но если какой-либо из процессоров аннотаций не является инкрементным, ни один из них на самом деле не будет обработан таким образом.
Какова цель инкрементальной обработки?
Начиная с версии 1.3. 30+, инкрементная обработка позволяла не обрабатывать модули снова полностью при каждом изменении, что повышает производительность процесса сборки:
Основное внимание в этом выпуске уделялось Производительность Kotlin/Native, KAPT, а также улучшения для IntelliJ IDEA.
Процессоры аннотаций (см. 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 изолирующий процессор аннотаций и возможность увеличения могут быть включены через Вариант процессора комната. Инкремент.
"Комната имеет следующие параметры процессора аннотаций... 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
Многие другие ответы здесь прикрывают ошибку или отключают инкрементную обработку вместо того, чтобы фактически заставить ее работать так, как вы хотите.
Вы можете включить инкрементную обработку для вашей конкретной библиотеки в файле gradle.properties
. Просто добавьте эти настройки или в зависимости от того, какая из них соответствует библиотеке, которая выдает ошибку:
android.databinding.incremental=true
android.lifecycleProcessor.incremental=true
Что вам действительно нужно сделать, так это реализовать эти строки кода в теге buildConfig
в приложении модуля build.gradle
:
javaCompileOptions {
annotationProcessorOptions {
arguments = [
"room.schemaLocation" : "$projectDir/schemas".toString(),
"room.incremental" : "true",
"room.expandProjection": "true"]
}
}
Если он жалуется на то, что "запрашивается инкрементная обработка аннотаций, но поддержка отключена, поскольку следующие процессоры не являются инкрементными", тогда установка "kapt.incremental.apt" в "true" (упоминается в другом ответе) в gradle.properties является встречным. интуитивный. Вам нужно установить его на "ложь". Это сделало это для меня.
Я использую 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
, показанной здесь.