๐Ÿ“ฑFlutter/Flutter Framework

[Flutter] Android ์•ฑ ์ถœ์‹œ๋ฅผ ์œ„ํ•œ ํ‚ค์Šคํ† ์–ด(.jks) ์ƒ์„ฑ๊ณผ ์•ฑ ๋ฒˆ๋“ค(.aab) ๋นŒ๋“œ ๊ณผ์ •

๋ฃจ๋ฆฌ์•ผใ…‘ 2025. 5. 22. 09:29
๋ฐ˜์‘ํ˜•

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 ๋‹ค๋ฅด๋ฉด ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ํ•ด์„œ ์ž…๋ ฅํ•ด์•ผ ํ•จ
๋ฐ˜์‘ํ˜•