107 lines
5.0 KiB
Kotlin
107 lines
5.0 KiB
Kotlin
import java.util.Properties
|
|
|
|
plugins {
|
|
id("com.android.application")
|
|
id("kotlin-android")
|
|
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
|
id("dev.flutter.flutter-gradle-plugin")
|
|
// Firebase 설정 파일(google-services.json) 투입 완료(S2). settings.gradle.kts 의
|
|
// 버전 선언과 짝이며, 파일이 빠지면 Gradle 빌드 자체가 실패한다.
|
|
id("com.google.gms.google-services")
|
|
}
|
|
|
|
// 릴리스 서명 키는 `android/key.properties` 에서 읽는다. 파일은 저장소에 넣지 않는다.
|
|
// 형식: storeFile= / storePassword= / keyAlias= / keyPassword=
|
|
val keystoreProperties = Properties().apply {
|
|
val f = rootProject.file("key.properties")
|
|
if (f.exists()) f.inputStream().use { load(it) }
|
|
}
|
|
|
|
// 카카오 네이티브 앱 키 — `config/kakao.env` 한 파일이 Dart(--dart-define-from-file)·
|
|
// Android(여기)·iOS(Flutter/*.xcconfig)에 같은 값을 준다. 파일은 저장소에 넣지 않는다.
|
|
// 없으면 빈 값으로 빌드되고 카카오 로그인만 「설정 전」으로 막힌다.
|
|
val kakaoProperties = Properties().apply {
|
|
val f = rootProject.file("../config/kakao.env")
|
|
if (f.exists()) f.inputStream().use { load(it) }
|
|
}
|
|
|
|
/// 이번 실행이 릴리스 산출물(assembleRelease · bundleRelease 등)을 요구하는가.
|
|
val wantsRelease = gradle.startParameter.taskNames.any { it.contains("Release", ignoreCase = true) }
|
|
|
|
// 앱 식별자 단일 출처. 별첨 C 4번으로 `kr.co.fanuzu.app` 확정(2026-09-11, Q14 해소).
|
|
// 기존 잠정값 kr.co.sweech.fancake 는 더 이상 쓰지 않는다.
|
|
// namespace(=R 클래스 패키지)와 Kotlin 패키지도 같이 옮겼다 — AndroidManifest 가
|
|
// 액티비티를 `.MainActivity` 상대명으로 적으므로 셋이 어긋나면 기동 시 클래스를 못 찾는다.
|
|
val fanuzuApplicationId = "kr.co.fanuzu.app"
|
|
|
|
android {
|
|
namespace = fanuzuApplicationId
|
|
compileSdk = flutter.compileSdkVersion
|
|
ndkVersion = flutter.ndkVersion
|
|
|
|
compileOptions {
|
|
sourceCompatibility = JavaVersion.VERSION_17
|
|
targetCompatibility = JavaVersion.VERSION_17
|
|
}
|
|
|
|
kotlinOptions {
|
|
jvmTarget = JavaVersion.VERSION_17.toString()
|
|
}
|
|
|
|
defaultConfig {
|
|
// 확정값(별첨 C 4번). 스토어에 한 번 올리면 변경 불가다.
|
|
applicationId = fanuzuApplicationId
|
|
// **계약값이다.** 별첨 1 v1.0 이 최소 지원 OS 를 Android 10(API 29)으로 적었고,
|
|
// 근거는 2주차 플러그인 선검증 리포트의 바이너리 실측이다.
|
|
//
|
|
// Flutter 기본값(API 24)을 그대로 두면 우리가 검증하지 않은 기기까지 설치가
|
|
// 열린다 — 스토어에 올라간 뒤에는 그 기기의 크래시가 우리 책임이 된다.
|
|
// 플러그인을 늘릴 때 이 값을 재계산하는 절차는 선검증 리포트 §3.5 에 있다.
|
|
minSdk = 29
|
|
targetSdk = flutter.targetSdkVersion
|
|
versionCode = flutter.versionCode
|
|
versionName = flutter.versionName
|
|
// AndroidManifest 의 카카오 로그인 리다이렉트 스킴 `kakao{네이티브 앱 키}`.
|
|
manifestPlaceholders["kakaoNativeAppKey"] =
|
|
kakaoProperties.getProperty("FANUZU_KAKAO_NATIVE_APP_KEY", "")
|
|
}
|
|
|
|
signingConfigs {
|
|
create("release") {
|
|
if (keystoreProperties.isNotEmpty()) {
|
|
storeFile = file(keystoreProperties.getProperty("storeFile"))
|
|
storePassword = keystoreProperties.getProperty("storePassword")
|
|
keyAlias = keystoreProperties.getProperty("keyAlias")
|
|
keyPassword = keystoreProperties.getProperty("keyPassword")
|
|
}
|
|
}
|
|
}
|
|
|
|
buildTypes {
|
|
release {
|
|
// 키가 없으면 **릴리스 빌드를 실패시킨다.** 기본 템플릿은 debug 키로 조용히 서명하는데,
|
|
// 그렇게 만든 release 산출물은 Play 가 거부하고 배포도 못 하면서 겉보기엔 성공한다.
|
|
// 릴리스 서명 키는 스토어 등록 명의(OPEN-QUESTIONS Q5 · 내부 조치 S3)가 정해져야
|
|
// 만들 수 있다 — 지금은 없는 게 정상이고, 없다는 사실이 드러나야 한다.
|
|
//
|
|
// 검사는 릴리스 태스크를 실제로 요청했을 때만 한다. 설정 시점에 무조건 던지면
|
|
// `assembleDebug` 까지 같이 깨진다.
|
|
if (keystoreProperties.isEmpty()) {
|
|
if (wantsRelease) {
|
|
throw GradleException(
|
|
"릴리스 서명 키가 없습니다. android/key.properties 를 만들고 키스토어를 지정하세요. " +
|
|
"(미해결: OPEN-QUESTIONS Q5 스토어 등록 명의 · 내부 조치 S3) " +
|
|
"디버그 빌드는 `flutter build apk --debug` 로 그대로 됩니다."
|
|
)
|
|
}
|
|
} else {
|
|
signingConfig = signingConfigs.getByName("release")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
flutter {
|
|
source = "../.."
|
|
}
|