Làm thế nào để thoát khỏi cảnh báo xử lý chú thích gia tăng?


150

Tôi mới bắt đầu sử dụng phát triển Android và cố gắng sử dụng thư viện Room. Từ hôm qua tôi phải đối mặt với tin nhắn cảnh báo này

w: [kapt] Yêu cầu xử lý chú thích tăng dần, nhưng hỗ trợ bị vô hiệu hóa vì các bộ xử lý sau không tăng dần: androidx.lifecycle.LifecyclProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL).

Tôi đã cố gắng nghiên cứu và sửa chữa nhưng không thể tránh được lỗi này ở đây là tệp grale.build của tôi. xin đề nghị / tư vấn những gì tôi đang làm sai.

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

Tại sao annotationProcessor của bạn nhận xét? Bạn đã cố gắng bỏ ghi nhớ chúng và sau đó xây dựng dự án? (cho cả phòng và vòng đời)
Ferhat Ergün

1
hãy thử thêm android.enableSeparateAnnotationProcessing = true trong gradle.properities reddit.com/r/androiddev/comments/ai92pt/ của bạn , điều này có thể liên quan đến vấn đề của bạn
Ferhat Ergün

7
Bạn có thể hạ cấp plugin kotlin-gradle trong tệp build.gradle dự án của bạn xuống phiên bản 1.3.41 trong thời điểm hiện tại. Tôi nghĩ đó là một lỗi liên quan đến kapt. Thông tin thêm: youtrack.jetbrains.com/su/KT-33515
Necrontyr

4
Bạn cũng có thể tạo tệp gradle.properIES trong libs / <tên mô-đun của bạn> kapt.incremental.apt=falsecũng như được mô tả trong vấn đề như một cách giải quyết. Nó làm việc cho tôi.
Necrontyr

2
@Necrontyr, đề nghị của bạn thực sự có hiệu quả. Cảm ơn rất nhiều
Shax

Câu trả lời:


80

Có một lỗi trong phiên bản plugin kotlin-gradle 1.3.50 như @Necrontyr đã đề cập. Chỉ cần hạ cấp kotlin_version trong build.gradle (Project) xuống 1.3.41.


71
Lỗi được đề cập bởi @Necrontyr không liên quan đến cảnh báo. Cảnh báo thực sự được dự định và đi xuống 1.3.41 chỉ ẩn cảnh báo nhưng vấn đề vẫn giữ nguyên, nếu không nói là tồi tệ hơn. Mọi người có thể nghĩ rằng vì họ bật xử lý chú thích gia tăng nên nó sẽ khiến mọi việc nhanh hơn. Nhưng sự thật là nếu bất kỳ bộ xử lý chú thích nào không tăng thì không ai trong số chúng sẽ được xử lý tăng dần. Đây là một lời nhắc nhở thân thiện sẽ chỉ ra thư viện nào là thủ phạm.
Antimonit

15
Sử dụng một phiên bản thư viện lỗi thời không phải là một giải pháp.
Andrew Koster

5
Đây vẫn là trường hợp với Kotlin 1.3.70?
IgorGanapolsky

2
Tôi đang sử dụng Kotlin 1.3.72 và vẫn gặp phải vấn đề này?
Anbuselvan Rocky

4
Tôi cũng đang đối mặt với vấn đề này 1.3.72 nào?
hiashutoshsingh

173

Chỉ cần thêm dòng này cho bạn gradle.properies:

kapt.incremental.apt=true

11
Đây là một lựa chọn tốt hơn mà câu trả lời được chấp nhận. Đối với những người cần hiểu và tìm hiểu thêm chi tiết, hãy tham khảo liên kết này: Medium.com/avast-engineering/iêu
Abhimanyu

4
thất bại cho tôi quá.
steven smith

có ai là lý do tại sao nó xảy ra ở đây?
Omer

Gần đây tôi đã kích hoạt liên kết dữ liệu với dự án Android (kotlin) của mình và bắt đầu nhận được cảnh báo này. Thêm tài sản như đã nêu ở trên làm việc cho tôi. Đồng thời sử dụng các phiên bản mới nhất của mọi thứ, ví dụ: tất cả các phụ thuộc, trình biên dịch, công cụ xây dựng, SDK, v.v.
Gail

4
Làm điều này, không làm việc cho tôi. Tôi cũng phải chỉnh sửa tệp build.gradle của mình như được mô tả trong tài liệu cho thư viện Room .
Nelson Ferragut

121

Vấn đề thực sự là việc xử lý gia tăng làm cho mọi thứ nhanh hơn, nhưng nếu bất kỳ bộ xử lý chú thích nào không tăng, thì không ai trong số chúng sẽ thực sự được xử lý theo cách đó.

Mục đích của việc xử lý gia tăng là gì?

Từ phiên bản 1.3.30+ , xử lý gia tăng cho phép các mô-đun không được xử lý hoàn toàn mỗi lần thay đổi xảy ra, giúp quá trình xây dựng có hiệu suất tốt hơn:

Các lĩnh vực trọng tâm chính của phiên bản này là xoay quanh hiệu suất của Kotlin / Native, KAPT, cũng như các cải tiến cho IntelliJ IDEA.

Từ tài liệu của Kotlin :

Bộ xử lý chú thích (xem JSR 269) được hỗ trợ trong Kotlin với plugin trình biên dịch kapt. Tóm lại, bạn có thể sử dụng các thư viện như Dagger hoặc Data Binding trong các dự án Kotlin của bạn.

Làm thế nào để sửa chữa Phòng gia tăng?

Và bộ xử lý chú thích gia tăng phòng bị tắt theo mặc định. Đây là một vấn đề được biết đến và nó được mô tả ở đây . Họ dự định sửa nó trên phiên bản 2.2.0. Bạn chỉ có thể đợi bản cập nhật hoặc bạn có thể kích hoạt để loại bỏ cảnh báo bằng cách cài đặt:

trong tập tin gradle.properies :

kapt.incremental.apt=true

(các bước tùy chọn)

để cho phép databinding để được tính cộng dồn:

android.databinding.incremental=true

để xây dựng nhanh hơn:

kapt.use.worker.api=true

nếu chỉ có một vài thay đổi được thực hiện, thời gian xây dựng sẽ giảm đáng kể:

kapt.include.compile.classpath=false

(quay lại chủ đề)

trong dự án build.gradle của bạn , thêm các phụ thuộc cần thiết (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"]
            }
        }
    }
}

Phiên bản DSL của 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")
            }
        }
    } 
}

Biên tập:

Ngày 9 tháng 10 năm 2019

androidx.room:room-*:2.2.0 được phát hành .

Bộ xử lý chú thích tăng dần: Phòng hiện là bộ xử lý chú thích cách ly Gradle và khả năng tăng có thể được kích hoạt thông qua tùy chọn bộ xử lý room.incremental.


8
Điều này nên được chấp nhận là kapt.incremental.apt = true là thứ sẽ bị thiếu khi bao gồm Room trong dự án của bạn. Điều đó thậm chí không được đề cập trong các tài liệu Android cho Room
sela

1
Câu trả lời này đã giúp tôi khi tôi đang sử dụng androidx.lifecycle:lifecycle-extensionstrong phiên bản 2.1.0 và sau khi chuyển sang 2.2.0-beta01, cảnh báo đã biến mất!
simne7

2
@ simne7 kiểm tra chỉnh sửa của tôi cuối cùng. phiên bản 2.2.0 được phát hành =) bạn có thể nâng cấp nó để truy cập tính năng xử lý gia tăng và tăng cường bản dựng của bạn.
Dimas Mendes

Sẽ cho phép android.buildcache=truelàm cho nó nhanh hơn?
IgorGanapolsky

1
@IgorGanapolsky theo trang web Google Developers , Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache). Vì vậy, nó không có ý nghĩa để kích hoạt nó vì nó được bật theo mặc định.
Dimas Mendes

37

Từ tài liệu phòng :

"Phòng có các tùy chọn bộ xử lý chú thích sau ... room.incremental: Cho phép bộ kiểm tra chú thích gia tăng cấp độ."

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

Đảm bảo cập nhật phiên bản phòng lên 2.2.x trở lên.


3
Trả lời đúng người, nếu bạn muốn tiếp tục xử lý gia tăng. Bạn có thể không cần lược đồLocationLocation hoặc extendProjection được đặt ở trên. phòng.thiết bị đủ.
bajicdusko

1
Theo developer.android.com/jetpack/androidx/release/room , vẫn có phiên bản 2.2.0-RC01.
CoolMind


Cập nhật phiên bản phòng lên 2.2.0, điều này hiệu quả với tôi
DivideBy0

25

Dưới đây là danh sách những điều bạn có thể làm để khắc phục điều này và giảm đáng kể thời gian xây dựng của bạn trong khi bạn đang ở đó.

Trong build.gradletệp (mô-đun) của bạn :

android {
    ...
    defaultConfig {
        ...
        kapt {
            arguments {
                 arg("room.schemaLocation", "$projectDir/schemas".toString())
                 arg("room.incremental", "true")
                 arg("room.expandProjection", "true")
            }
        }
    }
    ...
}

Trong gradle.propertiestập tin của bạn :

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 

18

Cho phép yêu cầu xử lý chú thích gia tăng Kapt

Sử dụng Kotlin 1.3.31 hoặc mới hơn Kotlin 1.3.30 được phát hành

Trong tập tin gradle.properies dự án kotlin Android của bạn

# 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

Thế còn android.lifecycleProcessor.incremental=true?
IgorGanapolsky

10

Rất nhiều câu trả lời khác ở đây che đậy lỗi hoặc vô hiệu hóa xử lý gia tăng thay vì thực sự làm cho nó hoạt động theo cách bạn muốn.

Bạn có thể kích hoạt xử lý gia tăng cho thư viện cụ thể của mình trong gradle.propertiestệp. Chỉ cần thêm các cài đặt này hoặc bất kỳ cài đặt nào phù hợp với thư viện gây ra lỗi:

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

2
Tôi không chắc lắm android.lifecycleProcessor.incremental=true, dường như nó không được ghi nhận ở bất cứ đâu
Daniel Wilson

Tôi cũng không chắc, nhưng tôi đã thử nó trong một linh cảm và trình biên dịch đã ngừng nói với tôi rằng thư viện lifecyclProcessor không kích hoạt xử lý gia tăng.
Jacques.S

5

Nếu nó phàn nàn rằng "Yêu cầu xử lý chú thích tăng dần, nhưng hỗ trợ bị vô hiệu hóa vì các bộ xử lý sau không tăng", thì đặt "kapt.incremental.apt" thành "true" (được đề cập trong một câu trả lời khác) trong gradle.properations là đối trọng trực giác. Bạn cần đặt nó thành "false". Điều đó đã làm nó cho tôi.


1
NÀY thực sự đã làm việc. Đặt nó cho người FALSE! cảm ơn
Sakiboy

Và điều gì sẽ xảy ra? Nó sẽ biên dịch nhanh hơn hay đơn giản là ẩn cảnh báo?
CoolMind

@CoolMind Bạn sẽ vô hiệu hóa xử lý chú thích gia tăng, điều gì đó sẽ không xảy ra nếu bất kỳ phụ thuộc nào của bạn không hỗ trợ nó. Vì vậy, cảnh báo biến mất và không có thay đổi trong quá trình xây dựng từ trước.
DC Christopher

2
Thiết lập đáng ngạc nhiên kapt.incremental.apt=falseđã giúp tôi, tôi không còn nhận được lỗi
Rakhi Dhavale

2
Bạn không còn lỗi nữa nhưng hiện tại bạn không có quá trình xử lý gia tăng :)
JustAntherCoder

2

Tôi đang sử dụng AndroidX , nhưng nó đoán nó giống nhau cho android.arch.lifecycle. Đối với tôi nó chỉ đơn giản là giúp thay thế điều này:

kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

... Với cái này:

implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

Vì vậy, nếu bạn đang sử dụng android.arch.lifecyclenó có thể có tác dụng tương tự thay thế điều này:

kapt "android.arch.lifecycle:compiler:$lifecycle_version"

... Với cái này:

implementation "android.arch.lifecycle:common-java8:$lifecycle_version"

Xin lưu ý rằng điều này chỉ hoạt động nếu bạn đang sử dụng Java 8 và bạn cũng nên xóa OnLifecycleEventcác chú thích cho LifecycleObservercác lớp và để những người quan sát đó thực hiện DefaultLifecycleObserverthay thế.

Thay đổi phương pháp này cũng được khuyến nghị trong các bộ build.gradlephận được hiển thị ở đây .


Tại sao bạn thoát khỏi kapt?
IgorGanapolsky

@IgorGanapolsky Đó là những gì được đề xuất bởi Vòng đời AndroidX nếu bạn đang sử dụng Java 8. Xem thêm tại đây: developer.android.com/jetpack/androidx/release/
Thẻ

kaptlà điều cần thiết cho Kotlin
IgorGanapolsky

1
Chỉ khi lib yêu cầu nó. Theo trang này, các chú thích sẽ không được chấp nhận khi Java 8 trở nên phổ biến hơn trên Android, vì vậy chúng khuyên dùng common-java8nếu có thể: developer.android.com/reference/androidx/lifecycle/Lifecycle
Anigif

Hấp dẫn. Họ không đề cập kaptcụ thể mặc dù ...
IgorGanapolsky

2

Những gì bạn thực sự nên làm là triển khai các dòng mã này trong buildConfigthẻ của bạn trong build.gradleứng dụng mô-đun của bạn :

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

0

Câu trả lời ở trên có thể hữu ích, nhưng những gì đã giúp tôi được giảm kotlin_versiontrong build.gradle(Project)để1.3.41 và xây dựng dự án. Điều này sẽ cho phép bạn xem nếu có bất kỳ vấn đề nào với mô hình thực thể của bạn.

Của tôi là, tôi quên chú thích @PrimaryKey. Bạn có thể là một cái gì đó khác nhau. Kotlin 1.3.41cho phép nhìn thấy những vấn đề đó. Khắc phục những sự cố đó và hoàn nguyên lại vấn đề kotlin_versiontrước đó.


-1

Đây cũng có thể được gây ra bởi các vấn đề nhân vật như " İ " trên databinding bên khi ngôn ngữ hệ thống là một ngôn ngữ không phải tiếng Anh. Trong trường hợp như vậy, sử dụng ngôn ngữ hệ thống máy tính bằng tiếng Anh sẽ giải quyết vấn đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.