diff --git a/app-android/.gitignore b/app-android/.gitignore index aa724b7..013224b 100644 --- a/app-android/.gitignore +++ b/app-android/.gitignore @@ -13,3 +13,9 @@ .externalNativeBuild .cxx local.properties + +# 签名配置(敏感信息,不要提交) +keystore.properties +*.jks +*.keystore +release-keystore.jks diff --git a/app-android/app/build.gradle.kts b/app-android/app/build.gradle.kts index c94caf9..78b15a5 100644 --- a/app-android/app/build.gradle.kts +++ b/app-android/app/build.gradle.kts @@ -1,3 +1,6 @@ +import java.util.Properties +import java.io.FileInputStream + plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) @@ -6,6 +9,13 @@ plugins { alias(libs.plugins.ksp) } +// 加载签名配置(从 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 @@ -15,21 +25,23 @@ android { minSdk = 24 targetSdk = 36 versionCode = 1 - versionName = "1.0" + versionName = "1.0.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) + + // 签名配置 + 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 @@ -43,6 +55,46 @@ android { } buildFeatures { compose = true + buildConfig = true // 启用 BuildConfig 生成 + } + + // 构建类型配置 + // ⚠️ 只需修改 IS_DEBUG_MODE 即可切换环境 + // true = 开发模式(显示调试UI,连接开发服务器) + // false = 生产模式(隐藏调试UI,连接生产服务器) + // URL 地址在 AppConfig.kt 中根据此值自动选择 + buildTypes { + debug { + buildConfigField("Boolean", "IS_DEBUG_MODE", "true") // 开发模式 + applicationIdSuffix = ".debug" + versionNameSuffix = "-debug" + } + release { + buildConfigField("Boolean", "IS_DEBUG_MODE", "false") // 生产模式 + + // 使用 release 签名配置 + 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" + } } } @@ -90,6 +142,9 @@ dependencies { // Image Loading implementation(libs.coil.compose) + // Markdown Rendering + implementation(libs.markdown.renderer) + // Permissions implementation(libs.accompanist.permissions) diff --git a/app-android/gradle/libs.versions.toml b/app-android/gradle/libs.versions.toml index 31ca3fc..fcb0b77 100644 --- a/app-android/gradle/libs.versions.toml +++ b/app-android/gradle/libs.versions.toml @@ -17,6 +17,7 @@ permissions = "0.34.0" coroutines = "1.9.0" serialization = "1.7.3" coil = "2.5.0" +markdown = "0.22.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -66,6 +67,9 @@ kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx- # Image Loading coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil" } +# Markdown Rendering +markdown-renderer = { group = "com.mikepenz", name = "multiplatform-markdown-renderer-m3", version.ref = "markdown" } + [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } diff --git a/app-android/keystore.properties.template b/app-android/keystore.properties.template new file mode 100644 index 0000000..a4e5c94 --- /dev/null +++ b/app-android/keystore.properties.template @@ -0,0 +1,20 @@ +# 签名配置文件模板 +# +# 使用说明: +# 1. 复制此文件并重命名为 keystore.properties +# 2. 修改下面的配置项为你的实际值 +# 3. 不要将 keystore.properties 提交到版本控制! +# +# 注意:密钥库文件(.jks)和此配置文件都应该保密,不要公开分享 + +# 密钥库文件路径(相对于 app 目录或绝对路径) +storeFile=../release-keystore.jks + +# 密钥库密码 +storePassword=your_keystore_password + +# 密钥别名 +keyAlias=suiyueshishu + +# 密钥密码 +keyPassword=your_key_password