diff --git a/build.gradle b/build.gradle
index 1b95e8c1f..3b2e04502 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,6 +6,7 @@ buildscript {
}
plugins {
alias libs.plugins.android.application apply false
+ alias libs.plugins.android.ksp apply false
alias libs.plugins.jetbrains.kotlin.android apply false
alias libs.plugins.jetbrains.kotlin.multiplatform apply false
alias libs.plugins.jetbrains.kotlin.plugin.serialization apply false
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 55ae38b9a..9117b1ed7 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -2,6 +2,7 @@
compileSdk = "35"
kotlin = "2.0.20"
androidGradlePlugin = "8.6.1"
+androidKspPlugin = "2.0.20-1.0.25" # first version needs to match kotlin version
dokka = "1.9.20"
mavenPublish = "0.18.0"
jlleitschuhKtlint = "12.1.1"
@@ -159,6 +160,7 @@ json = { module = "org.json:json", version.ref = "json" }
[plugins]
android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" }
+android-ksp = { id = "com.google.devtools.ksp", version.ref = "androidKspPlugin" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
jetbrains-kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
jetbrains-kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 53ddc3e60..81590e4c7 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -6741,6 +6741,11 @@
+
+
+
+
+
@@ -6763,6 +6768,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13126,6 +13146,11 @@
+
+
+
+
+
@@ -14244,6 +14269,11 @@
+
+
+
+
+
@@ -14322,6 +14352,11 @@
+
+
+
+
+
diff --git a/libs/database/build.gradle b/libs/database/build.gradle
index 1f1b5ea87..2e2b3eb44 100644
--- a/libs/database/build.gradle
+++ b/libs/database/build.gradle
@@ -1,7 +1,7 @@
plugins {
id 'kotlin-android'
id 'com.android.library'
- id 'kotlin-kapt'
+ id 'com.google.devtools.ksp'
id 'org.jetbrains.dokka'
id 'com.vanniktech.maven.publish'
}
@@ -15,11 +15,6 @@ android {
targetSdk 34 // relevant for instrumentation tests (targetSdk 21 fails on Android 14)
consumerProguardFiles "consumer-rules.pro"
- javaCompileOptions {
- annotationProcessorOptions {
- arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
- }
- }
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunnerArguments disableAnalytics: 'true'
}
@@ -56,9 +51,6 @@ android {
freeCompilerArgs += "-Xexplicit-api=strict"
freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
}
- kapt {
- correctErrorTypes true
- }
aaptOptions {
// needed only for instrumentation tests: assets.openFd()
noCompress "json"
@@ -80,7 +72,7 @@ dependencies {
implementation libs.androidx.room.runtime
implementation libs.androidx.room.ktx
- kapt libs.androidx.room.compiler
+ ksp libs.androidx.room.compiler
implementation libs.microutils.kotlin.logging
implementation libs.kotlinx.serialization.json
@@ -110,8 +102,8 @@ dependencies {
androidTestImplementation libs.commons.io
}
-plugins.withId("kotlin-kapt") {
- kapt.useBuildCache = true
+ksp {
+ arg(new RoomSchemaArgProvider(new File(projectDir, "schemas")))
}
signing {
@@ -127,3 +119,18 @@ tasks.withType(DokkaTask).configureEach {
}"""]
)
}
+
+class RoomSchemaArgProvider implements CommandLineArgumentProvider {
+ @InputDirectory
+ @PathSensitive(PathSensitivity.RELATIVE)
+ File schemaDir
+
+ RoomSchemaArgProvider(File schemaDir) {
+ this.schemaDir = schemaDir
+ }
+
+ @Override
+ Iterable asArguments() {
+ return ["room.schemaLocation=${schemaDir.path}".toString()]
+ }
+}
diff --git a/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt b/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt
index d842845ac..fc997fbf2 100644
--- a/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt
+++ b/libs/database/src/main/java/org/fdroid/database/FDroidDatabase.kt
@@ -88,6 +88,21 @@ internal abstract class FDroidDatabaseInt : RoomDatabase(), FDroidDatabase, Clos
getRepositoryDao().resetETags()
}
}
+
+ // just here to make KSP happy
+ override fun close() {
+ super.close()
+ }
+
+ // just here to make KSP happy
+ override fun runInTransaction(body: Runnable) {
+ super.runInTransaction(body)
+ }
+
+ // just here to make KSP happy
+ override fun runInTransaction(body: Callable): V {
+ return super.runInTransaction(body)
+ }
}
/**