import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.application") // AGP 9 built-in Kotlin: NO org.jetbrains.kotlin.android. The Compose compiler plugin is // supplied by AGP, so it's applied without a version. id("org.jetbrains.kotlin.plugin.compose") } android { namespace = "io.unom.punktfunk" compileSdk = 37 // Android 17 — required by androidx.core 1.19.0; targetSdk stays 36 for now. defaultConfig { applicationId = "io.unom.punktfunk" minSdk = 31 targetSdk = 36 versionCode = 1 versionName = "0.0.1" ndk { abiFilters += listOf("arm64-v8a", "x86_64") } } buildTypes { release { isMinifyEnabled = false // scaffold; enable R8 + shrinkResources later } } buildFeatures { compose = true } compileOptions { sourceCompatibility = JavaVersion.VERSION_21 targetCompatibility = JavaVersion.VERSION_21 } packaging { jniLibs { useLegacyPackaging = false // punktfunk-core is statically linked into libpunktfunk_android.so (rlib). Its standalone // cdylib (built because the core crate also declares crate-type = cdylib) is never loaded // by Kotlin — drop it from the APK rather than ship ~5–9 MB of dead code. excludes += "**/libpunktfunk_core.so" } } } kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_21) } } dependencies { implementation(project(":kit")) val composeBom = platform("androidx.compose:compose-bom:2026.05.01") implementation(composeBom) implementation("androidx.core:core-ktx:1.19.0") implementation("androidx.activity:activity-compose:1.13.0") implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.10.0") implementation("androidx.compose.ui:ui") implementation("androidx.compose.ui:ui-tooling-preview") implementation("androidx.compose.foundation:foundation") implementation("androidx.compose.material3:material3") debugImplementation("androidx.compose.ui:ui-tooling") // Android TV components (we target phone + TV) land in the TV-UI milestone: // implementation("androidx.tv:tv-material:1.1.0") // The manifest already declares leanback so the scaffold installs on TV. }