如何摆脱增量注释处理请求的警告?

我刚开始使用 android 开发,并尝试使用 Room 库。从昨天开始,我就面临着这个警告信息

请求增量注释处理,但是支持 禁用,因为下列处理器不是增量处理器: 生命周期处理器(NON _ INCREMENTAL) , Roidx.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'
}
112157 次浏览

正如@Necrontyr 提到的,kotlin-gradle-plugin 版本1.3.50中有一个 bug,只需要将 build.gradle (Project)中的 kotlin _ version 降级到1.3.41。

只需将这一行添加到 gradle.properties:

kapt.incremental.apt=true

来自 房间文件:

Room 具有以下注释处理器选项... Room.  增量: 支持 Gradle 增量注解处理器

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

确保将房间版本更新到2.2. x 或更高版本。

如果它抱怨“请求增量注释处理,但支持被禁用,因为下面的处理器不是增量的”,那么在 gradle.properties 中将“ kapt.Incremental.apt”设置为“ true”(在另一个答案中提到)是违反直觉的。你需要将它设置为“ false”。我就是这么想的。

我使用的是 安卓,但是我猜对于 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"

请注意,这只有在使用 Java8时才有效,还应该删除 LifecycleObserver类的 OnLifecycleEvent注释,让那些观察者实现 DefaultLifecycleObserver

给你所示的 build.gradle依赖项中也建议更改为此方法。

真正的问题是增量处理使事情变得更快,但是如果任何一个注释处理器是非增量的,那么它们中的任何一个都不会以那种方式被实际处理。

增量处理的目的是什么?

版本 < em > 1.3.30 + 开始,增量处理允许每次发生更改时不再对模块进行完全处理,从而使构建过程具有更好的性能:

这次发布的主要关注领域已经有了 Kotlin/原生,KAPT 性能,以及 IntelliJ 的改进 IDEA

来自 Kotlin 文件:

Kotlin 支持注释处理器(参见 JSR 269) Kapt 编译器插件。简而言之,您可以使用诸如 在您的 Kotlin 项目中使用匕首或数据绑定

如何修正房间增量处理?

默认情况下,房间增量注释处理器是 残疾人。这是一个已知的问题,它被描述为 给你。他们打算在2.2.0版本上修复它。你可以等待更新,也可以通过设置:

Gradle 房地产公司档案中:

kapt.incremental.apt=true

(可选步骤)

允许 数据绑定逐步增加:

android.databinding.incremental=true

更快的构建:

kapt.use.worker.api=true

如果只进行少量更改,则构建时间将大大减少:

kapt.include.compile.classpath=false

(回到主题)

在项目 建造,分级中,添加必要的依赖项(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"]
}
}
}
}

科特林 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日

房间: room-* : 2.2.0 被释放了

渐进式注释处理器: 房间现在是一个渐进式注释处理器 隔离注释处理器和可增量性可以通过 处理器选项室

最新更新:

对于最新的 Kotlin DSL 版本,请使用

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

这里的许多其他答案掩盖了错误或禁用增量处理,而不是实际上让它按照您希望的方式工作。

您可以在 gradle.properties文件中为您的特定库启用增量处理。只需添加这些设置,或者任何与抛出错误的库匹配的设置:

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

你真正应该做的是在你的 build.gradle模块应用程序的 buildConfig标签中实现这些代码行:

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

下面列出了您可以做的一些事情来修复这个问题,并在此过程中显著减少构建时间。

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或更新版本 科特林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

以上的答案可能是有用的,但什么帮助我是减少 build.gradle(Project)kotlin_version1.3.41和建设项目。这将允许您查看您的实体模型是否存在任何问题。

我的是,我忘记注释 @PrimaryKey了。你可能是不同的东西。Kotlin 1.3.41允许看到这些问题。解决这些问题,并恢复到你的 kotlin_version回到上一个。

从版本1.3.30开始,很好支持增量注释处理作为一个实验特性。然而,从版本1.3.50开始,增量注释处理是 默认启用

因此,如果 很好版本大于或等于1.3.30或小于1.3.50,则必须将 kapt.incremental.apt=true行添加到 gradle.properties文件中,以启用增量注释处理。否则,不必将 kapt.incremental.apt设置为 true来启用它。不过,您可以将其设置为 false来禁用它,如果您愿意的话。

除此之外,还有 增量注释处理需要启用增量编译。因此,您必须将 kotlin.incremental=true行添加到 gradle.properties文件中,以便能够受益于增量注释处理特性。

请注意,Room 的增量注释处理选项是从2.3.0-alpha02版本开始的 默认为 ON。这意味着如果库的版本大于或等于 room.incremental,则不必将 room.incremental参数设置为 true。要了解更多信息,请参见 第112110217期

还要注意的是,如果您使用的是 Android Gradle Plugin 3.6.x 或更新的版本,那么增量注释处理选项是 默认为 ON for Data Binding。因此,您不必将 android.databinding.incremental=true行添加到 gradle.properties文件中。要了解更多信息,请参见 第110061530期

对我来说,这是发生在我的实体与 primay 键和@NonNull 注释,但类型字段仍然使用空(?).那么,把这个拿掉?问题解决了

data class TvEntity(
@PrimaryKey
@NonNull
@ColumnInfo(name = "tvId")
var tvId: String?,