Kotlin 2.1.0->2.4.10, Compose Multiplatform 1.7.3->1.11.1, AGP 8.7.3->9.3.1, Gradle 8.10.2->9.7.1. The two libs that pinned us to Compose 1.7.x -- compose-webview-multiplatform (1.9.40->2.0.3) and multiplatform-markdown-renderer (0.33.0->0.44.0) -- now have Compose 1.8+ releases, so the whole stack moves. Also coroutines/serialization 1.11.0, okhttp 5.5.0, media3 1.11.0, activity-compose 1.13.0, firebase-messaging 25.1.2, compose-bom 2026.08.00, google-services 4.5.0, KCEF 2025.03.23 (JBR pin ->17.0.14); material3 1.9.0 / material-icons-extended 1.7.3 (each one's latest stable -- they lag the core).
AGP 9 migration: :shared swaps com.android.library->com.android.kotlin.multiplatform.library (android config moves into kotlin{android{}}, withHostTest{} keeps host tests); :androidApp drops kotlin(android) for AGP 9 built-in Kotlin. compileSdk 34->37 (minSdk stays 29 / Android 10).
Code fixes for API breaks: markdown link->textLink + highlights->highlightsBuilder; kotlinOptions{jvmTarget}->compilerOptions{jvmTarget}.
95 lines
4.7 KiB
Kotlin
95 lines
4.7 KiB
Kotlin
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
|
|
|
plugins {
|
|
kotlin("multiplatform")
|
|
kotlin("plugin.serialization")
|
|
id("com.android.kotlin.multiplatform.library")
|
|
id("org.jetbrains.compose")
|
|
id("org.jetbrains.kotlin.plugin.compose")
|
|
}
|
|
|
|
val composeVersion = "1.11.1"
|
|
// material3 and material-icons-extended are published on their own cadence and
|
|
// lag the core artifacts; use each one's latest stable release.
|
|
val material3Version = "1.9.0"
|
|
val materialIconsVersion = "1.7.3"
|
|
val coroutinesVersion = "1.11.0"
|
|
val serializationVersion = "1.11.0"
|
|
val okhttpVersion = "5.5.0"
|
|
// 2.0.x is the first line built against Compose 1.8+ (1.9.40 was the last
|
|
// 1.7.x-compatible release). HTML artifact previews (M9): Android uses the
|
|
// platform WebView, desktop uses KCEF (JCEF/Chromium, downloaded on first use).
|
|
val webviewVersion = "2.0.3"
|
|
val kcefVersion = "2025.03.23"
|
|
// 0.34.0+ moved to Compose 1.8+ (0.33.0 was the last 1.7.x / Kotlin 2.1.x
|
|
// release). Provides GFM tables, bold/italic/underscore, and the -code module
|
|
// for language-aware syntax highlighting (Highlights).
|
|
val markdownVersion = "0.44.0"
|
|
|
|
kotlin {
|
|
android {
|
|
namespace = "iris.shared"
|
|
compileSdk = 37
|
|
minSdk = 29
|
|
compilerOptions {
|
|
jvmTarget.set(JvmTarget.JVM_17)
|
|
}
|
|
withHostTest { }
|
|
}
|
|
jvm("desktop")
|
|
|
|
sourceSets {
|
|
// Both targets are JVM-based (androidTarget + jvm("desktop")), so
|
|
// shared JVM code (File I/O, SHA-256, media cache) lives in jvmMain.
|
|
val jvmMain by creating { dependsOn(commonMain.get()) }
|
|
val androidMain by getting { dependsOn(jvmMain) }
|
|
val desktopMain by getting { dependsOn(jvmMain) }
|
|
|
|
commonMain.dependencies {
|
|
implementation("org.jetbrains.compose.runtime:runtime:$composeVersion")
|
|
implementation("org.jetbrains.compose.foundation:foundation:$composeVersion")
|
|
implementation("org.jetbrains.compose.material3:material3:$material3Version")
|
|
implementation("org.jetbrains.compose.ui:ui:$composeVersion")
|
|
// Full Material icon set (Icons.Filled.ContentCopy for the code
|
|
// copy buttons); -core only ships a small subset.
|
|
implementation("org.jetbrains.compose.material:material-icons-extended:$materialIconsVersion")
|
|
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion")
|
|
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
|
|
// OkHttp is a JVM library; both targets here are JVM-based
|
|
// (androidTarget + jvm("desktop")), so it resolves on both.
|
|
implementation("com.squareup.okhttp3:okhttp:$okhttpVersion")
|
|
// Markdown rendering for chat bubbles (M8): core parser/renderer,
|
|
// Material 3 themed defaults, and the -code module for syntax
|
|
// highlighting of fenced code blocks (Highlights).
|
|
implementation("com.mikepenz:multiplatform-markdown-renderer:$markdownVersion")
|
|
implementation("com.mikepenz:multiplatform-markdown-renderer-m3:$markdownVersion")
|
|
implementation("com.mikepenz:multiplatform-markdown-renderer-code:$markdownVersion")
|
|
// M9: HTML artifact previews — WebView composable (platform WebView
|
|
// on Android, KCEF/JCEF on desktop).
|
|
implementation("io.github.kevinnzou:compose-webview-multiplatform:$webviewVersion")
|
|
}
|
|
commonTest.dependencies {
|
|
implementation(kotlin("test"))
|
|
}
|
|
// M9: KCEF (JCEF/Chromium) for desktop HTML artifact previews. The
|
|
// webview library exposes it transitively, but we reference KCEF
|
|
// directly (init + progress) so declare it explicitly.
|
|
desktopMain.dependencies {
|
|
implementation("dev.datlag:kcef:$kcefVersion")
|
|
}
|
|
// M4: ExoPlayer (Media3) for inline audio/video playback (Android only).
|
|
androidMain.dependencies {
|
|
// M7: EncryptedSharedPreferences for the pairing token
|
|
// (docs/09 §9.7; AndroidSecureStore).
|
|
implementation("androidx.security:security-crypto:1.1.0")
|
|
implementation("androidx.media3:media3-exoplayer:1.11.0")
|
|
implementation("androidx.media3:media3-ui:1.11.0")
|
|
// SAF picker (rememberLauncherForActivityResult).
|
|
implementation("androidx.activity:activity-compose:1.13.0")
|
|
// M5: FCM push (inert without a Firebase project / google-services.json;
|
|
// the ntfy listener is the fallback). The google-services plugin is
|
|
// applied conditionally in the app module.
|
|
implementation("com.google.firebase:firebase-messaging:25.1.2")
|
|
}
|
|
}
|
|
} |