Files
LoveLiveMusicPlayerKMP/androidApp/build.gradle.kts
T
2026-08-30 19:36:25 +08:00

170 lines
5.4 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.
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import java.util.Properties
plugins {
alias(libs.plugins.androidApplication)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
}
kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
freeCompilerArgs.add("-Xexpect-actual-classes")
}
}
val appVersionCode = 20001
val appVersionName = "2.0.0.01"
val taskNames = gradle.startParameter.taskNames
val isApkRelease = taskNames.any { it.contains("assembleRelease", ignoreCase = true) }
val isAabRelease = taskNames.any { it.contains("bundleRelease", ignoreCase = true) }
val keystoreProperties = Properties()
if (isApkRelease || isAabRelease) {
val keystorePropertiesFile = file("key.properties")
if (!keystorePropertiesFile.exists()) {
error("release 模式需要在 androidApp 目录下创建 key.properties(可参考 key.properties.example)")
}
keystorePropertiesFile.inputStream().use { keystoreProperties.load(it) }
}
android {
namespace = "com.zhushenwudi.lovelivemusicplayer"
compileSdk = libs.versions.android.compileSdk.get().toInt()
defaultConfig {
applicationId = "com.zhushenwudi.lovelivemusicplayer"
minSdk = libs.versions.android.minSdk.get().toInt()
targetSdk = libs.versions.android.targetSdk.get().toInt()
versionCode = appVersionCode
versionName = appVersionName
}
splits {
abi {
isEnable = isApkRelease
reset()
include("armeabi-v7a", "arm64-v8a")
isUniversalApk = false
}
}
signingConfigs {
if (isApkRelease || isAabRelease) {
create("release") {
keyAlias = keystoreProperties.getProperty("keyAlias")
keyPassword = keystoreProperties.getProperty("storePassword")
storePassword = keystoreProperties.getProperty("keyPassword")
val storePath = if (isAabRelease) {
keystoreProperties.getProperty("aabStoreFile")
} else {
keystoreProperties.getProperty("apkStoreFile")
}
storeFile = file(storePath)
}
}
}
buildTypes {
getByName("debug") {
isMinifyEnabled = false
isDebuggable = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}
getByName("release") {
isMinifyEnabled = true
isShrinkResources = true
if (isApkRelease || isAabRelease) {
signingConfig = signingConfigs.getByName("release")
}
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
// ABI 分包开启时不能再写 ndk.abiFilters,否则 AGP 会报冲突。
if (!isApkRelease) {
ndk {
//noinspection ChromeOsAbiSupport
abiFilters += listOf("armeabi-v7a", "arm64-v8a")
}
}
}
}
packaging {
resources {
excludes += "/META-INF/{AL2.0,LGPL2.1}"
}
dex {
useLegacyPackaging = true
}
jniLibs {
useLegacyPackaging = true
}
}
lint {
abortOnError = false
checkReleaseBuilds = false
disable += "InvalidPackage"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
base.archivesName.set("LLMP_v$appVersionName")
afterEvaluate {
tasks.findByName("assembleRelease")?.doLast {
val apkRoot = layout.buildDirectory.dir("outputs/apk/release").get().asFile
if (!apkRoot.exists()) return@doLast
apkRoot.walkTopDown().maxDepth(2).filter { it.isFile && it.extension == "apk" }.forEach { apk ->
val shortAbi = when {
"arm64-v8a" in apk.name -> "v8a"
"armeabi-v7a" in apk.name -> "v7a"
else -> null
} ?: return@forEach
val target = apk.resolveSibling("LLMP_v${appVersionName}_${shortAbi}.apk")
if (apk.canonicalFile != target.canonicalFile) {
apk.copyTo(target, overwrite = true)
apk.delete()
}
}
}
}
dependencies {
implementation(projects.composeApp)
implementation(projects.shared)
implementation(libs.androidx.activity.compose)
implementation(libs.kotlinx.coroutines.android)
implementation(libs.media3.exoplayer)
implementation(libs.media3.session)
implementation(libs.androidx.media)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.glance.appwidget)
implementation(libs.androidx.palette)
implementation(libs.zxing.android.embedded)
implementation(libs.androidx.lifecycle.service)
implementation(libs.ktor.client.okhttp)
implementation(files("libs/open_sdk_3.5.19_r9483ffc7_lite.jar"))
implementation(libs.compose.runtime)
implementation(libs.compose.foundation)
implementation(libs.compose.material3)
implementation(libs.compose.material.icons.extended)
implementation(libs.compose.ui)
implementation(libs.compose.ui.tooling.preview)
debugImplementation(libs.compose.ui.tooling)
}