Android 릴리스 APK·AAB 빌드 구성 · 빌드 환경 문서
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# 빌드 환경 — 실측 기록 (2026-08-31)
|
||||
|
||||
이 조합으로 **릴리스 APK·AAB 가 실제로 나오는 것을 확인**했다. 버전 조합이 어긋나면
|
||||
Gradle 이 조용히 실패하지 않고 명확히 죽으므로 아래를 그대로 맞춘다.
|
||||
|
||||
| 구성 | 값 | 비고 |
|
||||
|---|---|---|
|
||||
| Flutter | **3.47.2** | `fvm` 으로 고정 — `app/.fvmrc` |
|
||||
| JDK | **Temurin 17** | `~/.jdks/jdk-17.0.20.1+1/Contents/Home` |
|
||||
| Gradle | 8.14 | `android/gradle/wrapper/gradle-wrapper.properties` |
|
||||
| AGP | 8.11.1 | `android/settings.gradle.kts` |
|
||||
| Android SDK | `/opt/homebrew/share/android-commandlinetools` | `brew install --cask android-commandlinetools` |
|
||||
| build-tools | 35.0.1 | |
|
||||
| platform | android-34 · android-36 | 빌드가 34 를 추가로 받는다 |
|
||||
|
||||
## JDK 를 17 로 못 박은 이유
|
||||
|
||||
Android Studio 번들 JBR 은 **JDK 25** 이고 **Gradle 8.14 와 비호환**이다. 그대로 빌드하면
|
||||
`Gradle build failed due to Java/Gradle incompatibility` 로 죽는다. Gradle 을 9.1+ 로
|
||||
올리는 선택지도 있으나 AGP 8.11.1 과의 조합을 다시 검증해야 하므로, Flutter 권장인
|
||||
JDK 17 을 쓰는 쪽을 택했다.
|
||||
|
||||
```bash
|
||||
fvm flutter config --jdk-dir ~/.jdks/jdk-17.0.20.1+1/Contents/Home
|
||||
```
|
||||
|
||||
`brew install --cask temurin@17` 은 sudo 를 요구한다. sudo 없이 쓰려면 Adoptium
|
||||
tar.gz 를 `~/.jdks/` 에 풀면 된다.
|
||||
|
||||
## 빌드
|
||||
|
||||
```bash
|
||||
export ANDROID_HOME=/opt/homebrew/share/android-commandlinetools
|
||||
cd app
|
||||
fvm flutter build apk --release # build/app/outputs/flutter-apk/app-release.apk
|
||||
fvm flutter build appbundle --release # build/app/outputs/bundle/release/app-release.aab
|
||||
```
|
||||
|
||||
## 서명
|
||||
|
||||
`android/key.properties` 가 없으면 **릴리스 빌드가 의도적으로 실패**한다
|
||||
(`android/app/build.gradle.kts`). 디버그 키로 조용히 서명된 산출물이 Play 에서
|
||||
거부되는 것을 막기 위한 것이다.
|
||||
|
||||
키스토어는 `~/.fanuzu-signing/fanuzu-upload.p12` (PKCS12 · 별칭 `fanuzu-upload`).
|
||||
**저장소에 넣지 않는다** — `android/.gitignore` 가 `key.properties` 를,
|
||||
루트 `.gitignore` 가 `*.p12` `*.jks` 를 막는다.
|
||||
|
||||
서명 확인:
|
||||
|
||||
```bash
|
||||
apksigner verify --print-certs build/app/outputs/flutter-apk/app-release.apk
|
||||
# Signer #1 certificate DN: CN=FANUZU, OU=Development, O=Sweech Co Ltd, L=Daegu, C=KR
|
||||
# Signer #1 certificate SHA-256 digest: 5e83f4c9cd35357b11561a5b82c47d300af8c31e33d80d94bc32a4f10f46dee7
|
||||
```
|
||||
|
||||
## 알려진 어긋남 — minSdk
|
||||
|
||||
문서(`2주차_플러그인_선검증리포트` · 별첨 1)는 **Android 10(API 29)** 을 하한으로 적었으나
|
||||
현재 빌드는 **API 24** 로 나간다. 하한을 29 로 올리는 것은 위치 퀘스트의
|
||||
`geofence_foreground_service` 인데 아직 넣지 않았다. **6주차 위치 퀘스트 구현 시점에
|
||||
29 로 올라간다.** 그때 기준 단말 2종 충족을 다시 확인해 빌드 노트에 적는다.
|
||||
@@ -1,2 +1,6 @@
|
||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||
android.builtInKotlin=false
|
||||
# This newDsl flag was added automatically by Flutter migrator
|
||||
android.newDsl=false
|
||||
|
||||
Reference in New Issue
Block a user