Artan ek açıklama işleminden istenen uyarıdan nasıl kurtulurum?


150

Android geliştirmeyi kullanmaya ve Oda kütüphanesini kullanmaya çalıştım. Dünden beri bu uyarı mesajıyla karşı karşıyayım

w: [kapt] Artımlı ek açıklama işleme istendi, ancak aşağıdaki işlemciler artımlı olmadığı için destek devre dışı bırakıldı: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL).

Araştırma yapmaya ve düzeltmeye çalıştım ama bu hatayı önleyemiyorum burada grale.build dosyası. lütfen ne yaptığımı önerin / tavsiye edin.

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

ek açıklama işlemciniz neden yorumlanıyor? Onları rahatsız etmeyi ve sonra proje oluşturmayı denediniz mi? (hem oda hem de yaşam döngüsü için)
Ferhat Ergün

1
gradle.properities reddit.com/r/androiddev/comments/ai92pt/… 'da bulunan android.enableSeparateAnnotationProcessing = true eklemeye çalışın , sorununuzla ilgili olabilir
Ferhat Ergün

7
Proje build.gradle dosyanızdaki kotlin-gradle-plugin'i şimdilik 1.3.41 sürümüne düşürebilirsiniz. Bence bu kapt ile ilgili bir hata. Daha fazla bilgi: youtrack.jetbrains.com/issue/KT-33515
Necrontyr

5
Sorunda kapt.incremental.apt=falsegeçici bir çözüm olarak açıklandığı gibi libs / <modül adınız> içinde de bir gradle.properties dosyası oluşturabilirsiniz . Benim için çalıştı.
Necrontyr

2
@Necrontyr, öneriniz gerçekten işe yaradı. Çok teşekkürler
Shax

Yanıtlar:


80

@Necrontyr'ın belirttiği gibi kotlin-gradle-eklenti sürümü 1.3.50'de bir hata var. Sadece build.gradle (Project) içindeki kotlin_version'ı 1.3.41'e düşürün.


71
@Necrontyr tarafından belirtilen hata uyarıyla ilgisiz. Uyarı aslında tasarlanmıştır ve 1.3.41'e inmek sadece uyarıyı gizler, ancak daha da kötüsü olmasa da sorun aynı kalır. İnsanlar artımlı ek açıklama işlemlerini etkinleştirdikleri için işleri daha hızlı hale getireceklerini düşünebilirler. Ancak gerçek şu ki, açıklama işlemcilerinden herhangi biri artımlı değilse, hiçbiri aşamalı olarak işlenmeyecektir. Bu, hangi kütüphanenin suçlu olduğunu gösteren samimi bir hatırlatmadır.
Antimonit

15
Güncel olmayan bir kütüphane sürümünü kullanmak bir çözüm değildir.
Andrew Koster

5
Kotlin için durum hala böyle 1.3.70mi?
IgorGanapolsky

2
Kotlin 1.3.72 kullanıyorum ve hala bu sorunla karşı karşıya?
Anbuselvan Rocky

4
Ayrıca bu sorunla karşı karşıyayım 1.3.72 herhangi bir çözüm adam?
hiashutoshsingh

174

Sadece bu satırı gradle.properties'e ekleyin:

kapt.incremental.apt=true

11
Bu cevap daha iyi bir seçenektir. Anlamak ve daha fazla ayrıntıya girmek isteyenler için şu bağlantıya bakın: medium.com/avast-engineering/…
Abhimanyu

4
benim için de.
Steven Smith

burada olmasının nedeni nedir?
Ömer

Kısa süre önce android (kotlin) projeme veri bağlamayı etkinleştirdim ve bu uyarıyı almaya başladım. Yukarıda belirtildiği gibi mülk eklemek benim için çalıştı. Ayrıca her şeyin en son sürümlerini, örneğin tüm bağımlılıkları, derleyicileri, oluşturma araçlarını, SDK'ları vb. Kullanarak
Gail

4
Sadece bunu yapmak benim için işe yaramadı. Ayrıca oda kitaplığı belgelerinde açıklandığı gibi build.gradle dosyamı düzenlemek zorunda kaldım .
Nelson Ferragut

121

Asıl sorun, artımlı işlemin işleri daha hızlı hale getirmesidir, ancak ek açıklama işlemcilerinden herhangi biri artımlı değilse, hiçbiri aslında bu şekilde işlenmez.

Artımlı işlemenin amacı nedir?

Sürüm 1.3.30+'den itibaren , artımlı işleme modüllerin her değişiklik gerçekleştiğinde tamamen yeniden işlenmemesine izin vererek, oluşturma işlemine daha iyi bir performans sağladı:

Bu sürümün ana odak alanları Kotlin / Native, KAPT performansı ve IntelliJ IDEA için geliştirmelerdi.

Gönderen Kotlin belgelerinde :

Ek açıklama işlemcileri (bkz. JSR 269) Kotlin'de kapt derleyici eklentisi ile desteklenir. Özetle, Kotlin projelerinizde Hançer veya Veri Bağlama gibi kütüphaneleri kullanabilirsiniz.

Oda Artımlı İşleme nasıl düzeltilir?

Ve Oda artan ek açıklama işlemcisi varsayılan olarak devre dışıdır. Bu bilinen bir sorundur ve burada açıklanmaktadır . 2.2.0 sürümünde düzeltmeyi planlıyorlar. Sadece güncellemeyi bekleyebilir veya uyarıdan kurtulmak için aşağıdakileri ayarlayarak etkinleştirebilirsiniz:

içinde gradle.properties dosyası:

kapt.incremental.apt=true

(isteğe bağlı adımlar)

veritabanının artımlı olmasına izin vermek için:

android.databinding.incremental=true

daha hızlı sürümler için:

kapt.use.worker.api=true

yalnızca birkaç değişiklik yapılırsa oluşturma süresi büyük ölçüde azalır:

kapt.include.compile.classpath=false

(konuya geri dön)

project build.gradle dosyasına gerekli bağımlılıkları ekleyin (Groovy):

dependencies {
    ...
    implementation "androidx.room:room-runtime:2.2.0-rc01"
    annotationProcessor "androidx.room:room-compiler:2.2.0-rc01"
}

ve

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

Kotlin DSL sürümü:

dependencies {
    ...
    implementation("androidx.room:room-runtime:2.2.0-rc01")
    kapt("androidx.room:room-compiler:2.2.0-rc01")
}

ve

android {
    ...
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = mapOf("room.incremental" to "true")
            }
        }
    } 
}

Düzenle:

9 Ekim 2019

androidx.room:room-*:2.2.0 yayınlandı .

Kademeli Artımlı Ek Açıklama İşlemcisi: Oda artık bir Kepçe yalıtıcı ek açıklama işlemcisidir ve artırılabilirlik işlemci odası room.incremental aracılığıyla etkinleştirilebilir.


8
Bu, kapt.incremental.apt = true olarak kabul edilmelidir, projenize Oda eklerken eksik olacak bir şeydir. Oda
sela

1
Bu cevap androidx.lifecycle:lifecycle-extensions2.1.0 sürümünde kullandığım için bana yardımcı oldu ve 2.2.0-beta01'e geçtikten sonra uyarı ortadan kalktı!
simne7

2
@ simne7 sonunda düzenlememi kontrol et. sürüm 2.2.0 yayınlandı =) artımlı işleme özelliğine erişmek ve yapınızı artırmak için zaten yükseltebilirsiniz.
Dimas Mendes

Etkinleştirmek android.buildcache=truedaha hızlı olur mu?
IgorGanapolsky

1
Google Geliştiriciler Web Sitesine göre @IgorGanapolsky Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache),. Bu nedenle, varsayılan olarak etkinleştirildiği için etkinleştirmek mantıklı değildir.
Dimas Mendes

37

Gönderen Odası belgelerinde :

"Room şu ek açıklama işlemci seçeneklerine sahiptir ... room.incremental: Gradle kademeli ek açıklama işlemcisini etkinleştirir."

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

Oda sürümünü 2.2.x veya daha yüksek bir sürüme güncellediğinizden emin olun.


3
Artımlı işlemeye devam etmek istiyorsanız, yanıtlayan kişileri düzeltin. Yukarıda ayarlanan schemaLocation veya expandProjection bağımsız değişkenlerine ihtiyacınız olmayabilir. oda. içten yeterli.
bajicdusko

1
Developer.android.com/jetpack/androidx/releases/room'a göre , hala 2.2.0-rc01 sürümü var.
CoolMind


Oda versiyonunu 2.2.0 olarak güncelleyin, bu benim için çalıştı
DivideBy0

25

İşte bunu düzeltmek ve bunu yaparken derleme sürelerinizi önemli ölçüde azaltmak için yapabileceğiniz şeylerin bir listesi.

Senin içinde build.gradle(modülü) dosyası:

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

Senin içinde gradle.propertiesdosyaya:

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

Kapt Artımlı ek açıklama işleme isteğini etkinleştir

Kotlin 1.3.31 veya daha yeni Kotlin 1.3.30 sürümünü kullanın

Android kotlin projenizde gradle.properties dosyanızda

# 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

Ne olmuş android.lifecycleProcessor.incremental=true?
IgorGanapolsky

10

Buradaki diğer cevapların birçoğu, hatayı istediğiniz gibi çalışmasını sağlamak yerine hatayı kapatır veya artımlı işlemeyi devre dışı bırakır.

gradle.propertiesDosyadaki belirli kitaplığınız için artımlı işlemeyi etkinleştirebilirsiniz . Sadece bu ayarları ekleyin veya hangisi hatayı atan kitaplığa uyuyorsa:

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

2
Çok emin değilim android.lifecycleProcessor.incremental=true, hiçbir yerde belgelenmemiş gibi görünüyor
Daniel Wilson

Ben de emin değilim, ama bir yığın üzerinde denedim ve derleyici bana lifecycleProcessor kitaplığının artımlı işleme etkin olmadığını söylemek durdu.
Jacques.S

5

"Artımlı ek açıklama işleme istendiğinden, ancak aşağıdaki işlemciler artımlı olmadığından destek devre dışı bırakıldığından" şikayet ediyorsa, "kapt.incremental.apt" öğesini gradle.properties öğesinde "true" (farklı bir yanıtta belirtilir) olarak ayarlamak sezgisel. "False" olarak ayarlamanız gerekir. Bunu benim için yaptı.


1
BU aslında işe yaradı. YANLIŞ kişilere ayarlayın! teşekkürler
Sakiboy

Peki ne olacak? Daha hızlı derlenecek mi yoksa basitçe uyarıyı gizleyecek mi?
CoolMind

@CoolMind Artımlı ek açıklama işlemlerini devre dışı bırakmış olursunuz, bağımlılıklarınızdan herhangi biri bunu desteklemezse olmayacak bir şey. Yani, uyarı kaybolur ve oluşturma sürecinde öncekinden bir değişiklik olmaz.
DC Christopher

2
Şaşırtıcı bir şekilde ayarlanmak kapt.incremental.apt=falsebana yardımcı oldu, artık hata alıyorum
Rakhi Dhavale

2
Daha fazla
hatanız

2

AndroidX kullanıyorum , ama sanırım aynı android.arch.lifecycle. Benim için bunun yerine yardımcı oldu:

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

... Bununla:

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

Bu nedenle, bunu android.arch.lifecycledeğiştirmekle aynı etkiye sahip olabilir:

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

... Bununla:

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

Bunun yalnızca Java 8 kullanıyorsanız ve sınıflar OnLifecycleEventiçin ek açıklamaları kaldırmanız LifecycleObserverve bu gözlemcilerin uygulanmasına izin vermeniz gerektiğini unutmayın.DefaultLifecycleObserver bunun yerine .

Buradabuild.gradle gösterilen bağımlılıklarda da bu yöntemin değiştirilmesi önerilir .


Neden kurtuluyorsun kapt?
IgorGanapolsky

@IgorGanapolsky Java 8 kullanıyorsanız AndroidX Yaşam Döngüsü tarafından önerilen budur. Daha fazla bilgi için buraya bakın: developer.android.com/jetpack/androidx/releases/…
Anigif

kaptKotlin için önemlidir
IgorGanapolsky

1
Sadece lib gerektiriyorsa. Bu sayfaya göre, Java 8 Android'de daha yaygın hale geldiğinde ek açıklamalar kullanımdan kaldırılacaktır, bu nedenle common-java8mümkünse tavsiye ederler : developer.android.com/reference/androidx/lifecycle/Lifecycle
Anigif

İlginç. kaptÖzellikle de bahsetmiyorlar ...
IgorGanapolsky

2

Yapmanız gereken şey, bu kod satırlarını modül uygulamanızdaki buildConfigetiketinize build.gradleuygulamaktır:

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

0

Yukarıdaki cevaplar yararlı olabilir, ancak bana yardımcı kotlin_versionolan build.gradle(Project)şey1.3.41 ve proje inşa. Bu, varlık modelinizde herhangi bir sorun olup olmadığını görmenizi sağlar.

Benimki, açıklama eklemeyi unuttum @PrimaryKey. Farklı bir şey olabilir. Kotlin 1.3.41bu sorunları görmenize izin veriyor. Bu sorunları giderin ve bir kotlin_versionöncekine geri dönün .


-1

Bu , sistem dili İngilizce olmayan bir dil olduğunda veri bağlama tarafında " İ " gibi karakter sorunlarından da kaynaklanabilir . Böyle bir durumda, bilgisayar sistemi dilini İngilizce kullanmak sorunu çözecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.