Files
life-echo/app-android/app/build.gradle.kts

178 lines
6.2 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 java.util.Properties
import java.io.FileInputStream
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.ksp)
}
// 版本号配置(支持从命令行参数读取)
val appVersionName: String = project.findProperty("versionName")?.toString() ?: "1.0.0"
val appVersionCode: Int = (project.findProperty("versionCode")?.toString() ?: "1").toInt()
// 加载签名配置(从 keystore.properties 文件读取)
val keystorePropertiesFile = rootProject.file("keystore.properties")
val keystoreProperties = Properties()
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(FileInputStream(keystorePropertiesFile))
}
android {
namespace = "com.huaga.life_echo"
compileSdk = 36
defaultConfig {
applicationId = "com.huaga.life_echo"
minSdk = 24
targetSdk = 36
versionCode = appVersionCode
versionName = appVersionName
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
// 签名配置
signingConfigs {
create("release") {
if (keystorePropertiesFile.exists()) {
keyAlias = keystoreProperties["keyAlias"] as String
keyPassword = keystoreProperties["keyPassword"] as String
storeFile = file(keystoreProperties["storeFile"] as String)
storePassword = keystoreProperties["storePassword"] as String
}
}
}
lint {
checkReleaseBuilds = false
abortOnError = false
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
buildFeatures {
compose = true
buildConfig = true // 启用 BuildConfig 生成
}
// 构建类型配置
// IS_DEBUG_MODE = 是否显示调试 UIErrorDebugPanel、测试通道等
// USE_PROD_SERVER = 是否连接生产环境 APIlifecho.worldsplats.com
buildTypes {
// 默认调试即连公网https://lifecho.worldsplats.com便于公网调试
debug {
buildConfigField("Boolean", "IS_DEBUG_MODE", "true")
buildConfigField("Boolean", "USE_PROD_SERVER", "false")
applicationIdSuffix = ".debug"
versionNameSuffix = "-debug"
}
// 生产环境调试:连接生产服务器 + 可断点/日志 + 保留调试 UI
create("debugProd") {
buildConfigField("Boolean", "IS_DEBUG_MODE", "true")
buildConfigField("Boolean", "USE_PROD_SERVER", "true")
applicationIdSuffix = ".debug"
versionNameSuffix = "-debugProd"
}
release {
buildConfigField("Boolean", "IS_DEBUG_MODE", "false")
buildConfigField("Boolean", "USE_PROD_SERVER", "true")
if (keystorePropertiesFile.exists()) {
signingConfig = signingConfigs.getByName("release")
}
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
// APK 文件命名
applicationVariants.all {
val variant = this
variant.outputs.all {
val output = this as com.android.build.gradle.internal.api.BaseVariantOutputImpl
val appName = "岁月留书"
val versionName = variant.versionName
val buildType = variant.buildType.name
output.outputFileName = "${appName}_v${versionName}_${buildType}.apk"
}
}
}
dependencies {
// AndroidX Core
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.lifecycle.viewmodel.compose)
implementation(libs.androidx.activity.compose)
// Compose
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.material3.adaptive.navigation.suite)
// Material Icons Extended - 丰富的图标库
implementation("androidx.compose.material:material-icons-extended")
// Navigation Compose
implementation(libs.androidx.navigation.compose)
// Ktor Client
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.android) // 用于普通HTTP请求
implementation(libs.ktor.client.okhttp) // 用于WebSocketOkHttp引擎支持WebSocket
implementation(libs.ktor.client.websockets)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.client.logging)
implementation(libs.ktor.client.auth)
// Room
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx)
ksp(libs.androidx.room.compiler)
// Coroutines
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.android)
// Serialization
implementation(libs.kotlinx.serialization.json)
// Image Loading
implementation(libs.coil.compose)
// Markdown Rendering
implementation(libs.markdown.renderer)
// Permissions
implementation(libs.accompanist.permissions)
// DataStore
implementation("androidx.datastore:datastore-preferences:1.0.0")
// Payment SDKs
implementation("com.tencent.mm.opensdk:wechat-sdk-android:6.8.28") // 微信支付 SDK
implementation("com.alipay.sdk:alipaysdk-android:15.8.17") // 支付宝 SDK
// Testing
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.tooling)
debugImplementation(libs.androidx.compose.ui.test.manifest)
}