[Flutter] Android ์ฑ ์ถ์๋ฅผ ์ํ ํค์คํ ์ด(.jks) ์์ฑ๊ณผ ์ฑ ๋ฒ๋ค(.aab) ๋น๋ ๊ณผ์

Flutter๋ก ๋ง๋ ์๋๋ก์ด๋ ์ฑ์ Google Play์ ์ฌ๋ฆฌ๋ ค๋ฉด ์ฑ ์๋ช
์ด ํ์๋ค.
ํค์คํ ์ด๋ฅผ ๋ง๋ค์ด์ .aab ํ์ผ์ ์๋ช
์ ํด์ผ ๋ฑ๋กํ ์ ์๋ค.
๋ด๊ฐ ์ค์ ๋ก ํ๋ ์ ์ฒด ๊ณผ์ ์ ์ ๋ฆฌํด๋ณธ๋ค
โ 1. ํค์คํ ์ด(.jks) ์์ฑํ๊ธฐ
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ค:
keytool -genkey -v \
-keystore ~/daedo-android-key.jks \
-alias my-key-alias \
-keyalg RSA \
-keysize 2048 \
-validity 10000
ํค๋ฅผ ์์ฑํ ๋๋ ์๋ ์ ๋ณด๋ฅผ ์ ๋ ฅํ๊ฒ ๋๋ค:
- ํค์คํ ์ด ๋น๋ฐ๋ฒํธ (storePassword)
- ์ด๋ฆ/์กฐ์ง/์ง์ญ/๊ตญ๊ฐ์ฝ๋
- ํค ๋น๋ฐ๋ฒํธ (store์ ๋์ผํ๊ฒ ํด๋ ๋๋ค)
์์ฑ๋ .jks ํ์ผ์ ํ ๋๋ ํ ๋ฆฌ์ ์ ์ฅ๋๋ค.
โ 2. key.properties ํ์ผ ๋ง๋ค๊ธฐ
android/ ํด๋ ์๋์ key.properties ํ์ผ์ ๋ง๋ค๊ณ ์๋์ฒ๋ผ ์์ฑํ๋ค:
storePassword=๋น๋ฐ๋ฒํธ
keyPassword=๋น๋ฐ๋ฒํธ
keyAlias=my-key-alias
storeFile=/Users/์ฌ์ฉ์๋ช
/daedo-android-key.jks
โ ์ด ํ์ผ์ Git์ ์ฌ๋ฆฌ๋ฉด ์ ๋๋ค.
.gitignore์ ๊ผญ ์ถ๊ฐํด์ค์ผ ํ๋ค.
โ 3. build.gradle์ ์๋ช ์ ๋ณด ์ถ๊ฐ
android/app/build.gradle ํ์ผ์์ android ๋ธ๋ก ์์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค:
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(rootProject.file("key.properties")))
android {
...
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
shrinkResources false
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
โ 4. ์ฑ ๋ฒ๋ค(.aab) ๋น๋ํ๊ธฐ
ํฐ๋ฏธ๋์์ ์๋ ๋ช ๋ น์ด ์คํ:
flutter clean
flutter pub get
flutter build appbundle --release
๋น๋๊ฐ ์๋ฃ๋๋ฉด .aab ํ์ผ์ด build/app/outputs/bundle/release/ ๊ฒฝ๋ก์ ์๊ธด๋ค
๐ก ์ฝ์งํ๋ ํฌ์ธํธ๋ค
- key.properties ํ์ผ์์ ๋น๋ฐ๋ฒํธ์ ๋ฐ์ดํ("") ๋ถ์ด๋ฉด ์ ๋จ โ ๋ถ์ด๋ฉด ์ธ์ฆ ์คํจํจ
- keyAlias ์คํ ์์์ โ keytool -list -keystore ๋ช ๋ น์ด๋ก alias ์ด๋ฆ ์ง์ ํ์ธํ๋ ๊ฒ ์ข์
- storePassword๋ keyPassword ๋ค๋ฅด๋ฉด ์ ํํ ๊ตฌ๋ถํด์ ์ ๋ ฅํด์ผ ํจ