SyncWave/app/build.gradle.kts
TySmi ca5ebd5b03 Play ALAC songs: FFmpeg audio decoder fallback
Android has no Apple Lossless (ALAC) decoder, so ALAC .m4a files (for
example Eminem's Recovery) "played" with the seek bar moving but no
sound: the player had no decoder for the audio track.

Adds Jellyfin's prebuilt Media3 FFmpeg decoder (GPL-3.0) and turns on
extension renderers in fallback mode, so Android's own decoders are still
used for FLAC, MP3, AAC and so on, and FFmpeg only steps in for formats
Android can't decode.

Checked on the emulator: "25 to Life" now produces a 44.1 kHz audio
track (FFmpeg), FLAC still uses c2.android.flac.decoder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 19:37:51 -04:00

78 lines
2.6 KiB
Text

plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.serialization)
}
android {
namespace = "com.tysmi.syncwave"
compileSdk {
version = release(37)
}
defaultConfig {
applicationId = "com.tysmi.syncwave"
minSdk = 28
targetSdk = 37
versionCode = 1
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
optimization {
enable = true
packageScope = setOf("androidx.**", "kotlin.**", "kotlinx.**")
}
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
buildFeatures {
compose = true
}
}
dependencies {
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.datastore.preferences)
implementation(libs.androidx.palette)
implementation(libs.androidx.core.splashscreen)
implementation(libs.reorderable)
implementation(libs.retrofit)
implementation(libs.retrofit.kotlinx.serialization)
implementation(libs.okhttp)
implementation(libs.kotlinx.serialization.json)
implementation(libs.coil.compose)
implementation(libs.coil.network.okhttp)
implementation(libs.media3.exoplayer)
implementation(libs.media3.datasource.okhttp)
implementation(libs.media3.session)
implementation(libs.media3.ffmpeg.decoder)
implementation(libs.kotlinx.coroutines.guava)
testImplementation(libs.junit)
testImplementation(libs.kotlinx.coroutines.test)
testImplementation(libs.okhttp.mockwebserver)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(libs.androidx.junit)
debugImplementation(libs.androidx.compose.ui.test.manifest)
debugImplementation(libs.androidx.compose.ui.tooling)
}