Files
VulneraDoc/app/build.gradle.kts
T

157 lines
7.0 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// Bewusst keine Gradle Version Catalog (libs.versions.toml) für dieses Ein-Modul-Projekt:
// Ein Version Catalog lohnt sich vor allem bei mehreren Modulen mit gemeinsam genutzten
// Versionen. Hier reicht eine einzige, gut lesbare build.gradle.kts.
//
// WICHTIG: Diese Versionsnummern wurden nach bestem Wissen anhand der zum Zeitpunkt der
// Erstellung aktuellen offiziellen Android-/Kotlin-Dokumentation gewählt. Da dieses Projekt
// in der Entwicklungsumgebung, in der es erzeugt wurde, nicht gegen die echten Google-/Maven-
// Repositories synchronisiert werden konnte, prüfe beim ersten Öffnen in Android Studio bitte
// insbesondere die KSP-Version (muss exakt zur Kotlin-Version passen, siehe
// https://github.com/google/ksp/releases) und aktualisiere sie bei Bedarf über den
// "Upgrade Assistant" bzw. die jeweiligen Release-Notes-Seiten.
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
id("org.jetbrains.kotlin.plugin.compose")
id("org.jetbrains.kotlin.plugin.serialization")
id("com.google.devtools.ksp")
}
/**
* Room-Version bewusst auf 2.6.1 statt der aktuellen 2.8.4 fixiert, um einen reproduzierbaren
* AbstractMethodError beim Schema-Export (:app:kspDebugKotlin) zu vermeiden:
*
* "androidx.room.migration.bundle.FieldBundle$$serializer does not define or inherit
* typeParametersSerializers()"
*
* Root Cause (bestätigt über die offiziellen Room-Release-Notes,
* https://developer.android.com/jetpack/androidx/releases/room#2.7.0): Mit Room 2.7.0
* (9. April 2025) wurde Room für Kotlin Multiplatform refaktoriert. Im Zuge dieses Umbaus wurde
* die Serialisierung der Schema-Bundle-Klassen (FieldBundle, EntityBundle, ...) auf
* kotlinx.serialization umgestellt, da das vorher verwendete JVM-only-Verfahren nicht
* KMP-tauglich war. Diese vorkompilierten Bundle-Klassen sind seitdem an eine bestimmte
* kotlinx-serialization-core-Binärversion gebunden (siehe GeneratedSerializer.
* typeParametersSerializers(), eingeführt in kotlinx-serialization-core 1.8.0) - ein
* Klassenpfad-Konflikt, der sich per Dependency-Resolution allein nicht zuverlässig lösen
* lässt (bestätigt: selbst mit vollständig auf 1.8.1 konsolidiertem KSP-Klassenpfad bleibt der
* Fehler bestehen).
*
* Room 2.6.1 (29. November 2023) liegt vor diesem KMP-Umbau. FieldBundle & Co. haben dort keine
* kotlinx.serialization-generierte $$serializer-Klasse - die Fehlerklasse kann strukturell gar
* nicht auftreten, unabhängig von einer sonst im Projekt aufgelösten kotlinx-serialization-
* Version (z. B. für die typsicheren Navigations-Routen, siehe dependencies-Block unten).
* exportSchema = true (AppDatabase.kt) bleibt dadurch ohne Einschränkung nutzbar.
*
* Bewusster Trade-off: 2.6.1 verzichtet auf alle Neuerungen seit 2.7.0 (KMP, überarbeiteter
* Connection-Pool, diverse Bugfixes bis 2.8.4). Für dieses rein Android-native Projekt ohne
* KMP-Bedarf ist das unkritisch. Sobald Google diesen Bug in einer neueren Room-Version behebt,
* sollte diese Versionsfixierung zurückgerollt werden - das ist bewusst festgehaltene
* technische Schuld, kein Dauerzustand.
*/
android {
namespace = "de.medapp.wunddoku"
compileSdk = 35
defaultConfig {
applicationId = "de.medapp.wunddoku"
// minSdk 26 (Android 8.0): java.time (Instant, LocalDate) ist ab API 26 nativ
// verfügbar, ohne Desugaring-Konfiguration – vereinfacht die Datum/Zeit-Behandlung
// im gesamten Projekt spürbar.
minSdk = 26
targetSdk = 35
versionCode = 5
versionName = "1.5"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
}
// Room exportiert bei exportSchema = true die Schema-Historie als JSON hierher – Grundlage
// für nachvollziehbare, spätere Migrationen (Aufgabenstellung Abschnitt 16).
// room.generateKotlin: In Room 2.6.1 (siehe Versionsbegründung oben) ist Kotlin-Codegen noch
// nicht wie ab 2.7.0 standardmäßig aktiv, sondern muss explizit gesetzt werden.
ksp {
arg("room.schemaLocation", "$projectDir/schemas")
arg("room.generateKotlin", "true")
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
}
}
dependencies {
// --- Kotlin / Coroutines ---
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3") // für typsichere Nav-Routen
// --- AndroidX Core / Lifecycle ---
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7")
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
implementation("androidx.activity:activity-compose:1.9.3")
// --- Jetpack Compose (über BOM, damit alle Compose-Bibliotheken zueinander passen) ---
val composeBom = platform("androidx.compose:compose-bom:2026.02.00")
implementation(composeBom)
androidTestImplementation(composeBom)
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
implementation("androidx.compose.material3:material3")
implementation("androidx.compose.material:material-icons-extended")
debugImplementation("androidx.compose.ui:ui-tooling")
debugImplementation("androidx.compose.ui:ui-test-manifest")
// --- Navigation Compose (typsichere Routen) ---
implementation("androidx.navigation:navigation-compose:2.8.4")
// --- Room ---
// Version 2.6.1 bewusst statt aktueller Version - Begründung siehe Kommentar oben im File.
val roomVersion = "2.6.1"
implementation("androidx.room:room-runtime:$roomVersion")
implementation("androidx.room:room-ktx:$roomVersion")
ksp("androidx.room:room-compiler:$roomVersion")
// --- EXIF-Auswertung für Fotos (Abschnitt 10/11 der Architektur, ab Phase 4 genutzt) ---
implementation("androidx.exifinterface:exifinterface:1.3.7")
// --- Adaptive Layouts (Smartphone/Tablet, Abschnitt 15 der Architektur) ---
implementation("androidx.compose.material3.adaptive:adaptive:1.0.0")
// --- Tests ---
testImplementation("junit:junit:4.13.2")
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.9.0")
testImplementation("androidx.room:room-testing:$roomVersion")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
androidTestImplementation("androidx.compose.ui:ui-test-junit4")
}