Files
photo-live/apps/mobile/android/app/build.gradle.kts
T
浅念 f7f24b0a0b build(android): release signing config — key.properties based, debug fallback
正式签名(CN=PhotoLive):keystore/key.properties 不入库(gitignore 已覆盖);
无配置的构建机回退 debug 签名。首个正式签名 APK 已产出并 apksigner 验证。

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 17:15:51 +08:00

79 lines
2.9 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
plugins {
id("com.android.application")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "com.photolive.photo_live"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
defaultConfig {
applicationId = "com.photolive.photo_live"
// P3 约定:minSdk 24(Flutter 默认下限);targetSdk 36(Android 16)。
// Task 7 原生桥接:targetSdk>=34 走 WorkManager expedited + dataSync 前台服务;
// 若需降级(厂商兼容),路径 = 普通 WorkManager + 前台服务通知(见技术方案 §6.3)。
minSdk = 24
targetSdk = 36
versionCode = flutter.versionCode
versionName = flutter.versionName
}
// 正式签名(key.properties + photo-live-release.jks,均不入库):
// 缺失时回退 debug 签名(CI/他人克隆仓库仍可构建)。
val keystoreProps = Properties().apply {
val f = rootProject.file("app/key.properties")
if (f.exists()) f.inputStream().use { load(it) }
}
buildTypes {
release {
signingConfig = if (keystoreProps.getProperty("storeFile") != null) {
signingConfigs.create("release") {
storeFile = rootProject.file("app/" + keystoreProps.getProperty("storeFile"))
storePassword = keystoreProps.getProperty("storePassword")
keyAlias = keystoreProps.getProperty("keyAlias")
keyPassword = keystoreProps.getProperty("keyPassword")
}
} else {
// Signing with the debug keys(无正式签名配置的构建机回退)。
signingConfigs.getByName("debug")
}
// R8 混淆会破坏 WorkManager 反射初始化(NoSuchMethodException
// WorkDatabase_Impl),ProGuard keep 规则见 proguard-rules.pro。
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
}
dependencies {
// P3 Task 7 后台上传桥接:WorkManager(expedited + dataSync 前台服务)
// + OkHttp 直传 presign PUT(独立 4.12,与 Flutter 引擎无耦合)。
implementation("androidx.work:work-runtime-ktx:2.10.0")
implementation("androidx.core:core-ktx:1.15.0")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
testImplementation("junit:junit:4.13.2")
testImplementation("com.squareup.okhttp3:mockwebserver:4.12.0")
}
flutter {
source = "../.."
}