170 lines
5.4 KiB
Kotlin
170 lines
5.4 KiB
Kotlin
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)
|
||
}
|