Saya baru saja mulai menggunakan pengembangan android dan mencoba menggunakan perpustakaan Room. Sejak kemarin saya menghadapi pesan peringatan ini
w: [kapt] Diproses pemrosesan anotasi tambahan, tetapi dukungan dinonaktifkan karena prosesor berikut ini tidak inkremental: androidx.lifecycle.LifecycleProcessor (NON_INCREMENTAL), androidx.room.RoomProcessor (NON_INCREMENTAL).
Saya telah mencoba untuk meneliti dan memperbaiki tetapi tidak dapat menghindari kesalahan ini di sini adalah file grale.build saya. tolong sarankan / saran apa yang saya lakukan salah.
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
seperti yang dijelaskan dalam masalah sebagai solusi. Ini berhasil untuk saya.Jawaban:
Ada bug dalam versi kotlin-gradle-plugin 1.3.50 seperti yang disebutkan @Necrontyr. Turunkan saja kotlin_version di build.gradle (Project) menjadi 1.3.41.
sumber
1.3.70
?Cukup tambahkan baris ini untuk Anda gradle.properties:
sumber
Masalah sebenarnya adalah bahwa pemrosesan inkremental membuat segalanya lebih cepat, tetapi jika salah satu prosesor anotasi adalah non-inkremental, tidak satupun dari mereka yang benar-benar akan diproses dengan cara itu.
Apa tujuan dari pemrosesan bertahap?
Dari versi 1.3.30+ , pemrosesan tambahan memungkinkan modul untuk tidak sepenuhnya diproses lagi setiap kali terjadi perubahan, memberikan proses pembuatan kinerja yang lebih baik:
Dari dokumentasi Kotlin :
Bagaimana cara memperbaiki Pemrosesan Tambahan Ruang?
Dan prosesor anotasi penambahan ruang dinonaktifkan secara default. Ini adalah masalah yang diketahui dan dijelaskan di sini . Mereka bermaksud memperbaikinya pada versi 2.2.0. Anda bisa menunggu pembaruan atau mengaktifkannya untuk menghilangkan peringatan dengan mengatur:
dalam file gradle.properties :
kapt.incremental.apt=true
(langkah opsional)
untuk memungkinkan penyatuan data menjadi inkremental:
android.databinding.incremental=true
untuk membangun lebih cepat:
kapt.use.worker.api=true
jika hanya beberapa perubahan yang dibuat, waktu pembuatan sangat berkurang:
kapt.include.compile.classpath=false
(kembali ke topik)
di build.gradle proyek Anda , tambahkan dependensi yang diperlukan (Groovy):
dan
Versi DSL Kotlin:
dan
Edit:
9 Oktober 2019
androidx.room:room-*:.2.0 dirilis .
sumber
androidx.lifecycle:lifecycle-extensions
dalam versi 2.1.0 dan setelah beralih ke 2.2.0-beta01 peringatan hilang!android.buildcache=true
membuatnya lebih cepat?Projects using Android plugin 2.3.0 and higher enable the build cache by default (unless you explicitly disable the build cache)
,. Jadi tidak masuk akal untuk mengaktifkannya karena diaktifkan secara default.Dari dokumentasi Kamar :
"Kamar memiliki opsi prosesor anotasi berikut ... room.incremental: Mengaktifkan prosesor anotasi kenaikan bertahap Gradle."
Pastikan untuk memperbarui versi kamar ke 2.2.x atau lebih tinggi.
sumber
Berikut adalah daftar hal-hal yang dapat Anda lakukan untuk memperbaikinya dan secara signifikan mengurangi waktu pembuatan saat Anda menggunakannya.
Dalam
build.gradle
file (modul) Anda:Dalam
gradle.properties
file Anda :sumber
Aktifkan permintaan pemrosesan anotasi Kapt Incremental
Gunakan Kotlin 1.3.31 atau yang lebih baru Kotlin 1.3.30 dirilis
Dalam file proyek gradle.properties proyek android Anda
sumber
android.lifecycleProcessor.incremental=true
?Banyak jawaban lain di sini menutupi kesalahan atau menonaktifkan pemrosesan bertahap alih-alih membuatnya berfungsi seperti yang Anda inginkan.
Anda dapat mengaktifkan pemrosesan tambahan untuk pustaka spesifik Anda di
gradle.properties
file. Cukup tambahkan pengaturan ini, atau yang mana saja yang cocok dengan perpustakaan yang melempar kesalahan:sumber
android.lifecycleProcessor.incremental=true
, sepertinya tidak didokumentasikan di mana sajaJika mengeluh bahwa "pemrosesan anotasi tambahan diminta, tetapi dukungan dinonaktifkan karena prosesor berikut ini tidak bertahap", kemudian menetapkan "kapt.incremental.apt" menjadi "true" (disebutkan dalam jawaban yang berbeda) di gradle.properties bersifat kontra- intuitif. Anda perlu mengaturnya ke "false". Itu berhasil untuk saya.
sumber
kapt.incremental.apt=false
membantu saya, saya tidak lagi mendapatkan kesalahanSaya menggunakan AndroidX , tapi itu kira sama untuk
android.arch.lifecycle
. Bagi saya itu hanya membantu mengganti ini:... dengan ini:
Jadi jika Anda menggunakannya
android.arch.lifecycle
mungkin memiliki efek yang sama menggantikan ini:... dengan ini:
Ketahuilah bahwa ini hanya berfungsi jika Anda menggunakan Java 8 dan Anda juga harus menghapus
OnLifecycleEvent
anotasi untukLifecycleObserver
kelas dan membiarkan pengamat tersebut menerapkanDefaultLifecycleObserver
.Mengubah metode ini juga disarankan dalam keadaan
build.gradle
darurat yang ditunjukkan di sini .sumber
kapt
?kapt
sangat penting untuk Kotlincommon-java8
jika memungkinkan: developer.android.com/reference/androidx/lifecycle/Lifecycle/Lifecyclekapt
secara khusus ...Yang harus Anda lakukan adalah menerapkan baris kode ini di
buildConfig
tag Anda dibuild.gradle
aplikasi modul Anda:sumber
Jawaban atas dapat berguna, tapi apa yang membantu saya adalah mengurangi
kotlin_version
dalambuild.gradle(Project)
untuk1.3.41
dan membangun proyek. Ini akan memungkinkan Anda untuk melihat apakah ada masalah dengan model entitas Anda.Milik saya, saya lupa membubuhi keterangan
@PrimaryKey
. Anda mungkin sesuatu yang berbeda. Kotlin1.3.41
memungkinkan untuk melihat masalah-masalah itu. Perbaiki masalah tersebut dan kembalikankotlin_version
ke masalah sebelumnya.sumber
Ini juga dapat disebabkan oleh masalah karakter seperti " İ " di sisi penyatuan data ketika bahasa sistem adalah bahasa non-Inggris. Dalam kasus seperti itu, menggunakan bahasa sistem komputer dalam bahasa Inggris akan menyelesaikan masalah.
sumber