1. ๋ฐ์ฒ ์์ด์ฝ ์์ฑ
Android Asset Studio์์ ๋ฐ์ฒ ์์ด์ฝ์ ์์ฑํ ์ ์๋ค.
https://romannurik.github.io/AndroidAssetStudio/icons-launcher.html
๋์ถฉ ์์ด์ฝ์ ๋ง๋ ๋ค์ ic_launcher.zip ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์.
์์ถํ์ผ์ ํ๋ฉด res ํด๋๊ฐ ์๋ค. res ํด๋ ๋ด๋ถ์ ๋ชจ๋ ํ์ผ๋ค์ ๋ฐฐํฌํ ํ๋ก์ ํธ์ android/app/src/main/res ํด๋์ ๋ณต์ฌํ์.
- Flutter ํ๋ก์ ํธ๋ก ์์ฑ๋ ์ฑ์ ์ด๋ฏธ ํด๋น ํด๋์ ํ๋ฌํฐ ์์ด์ฝ๋ค์ด ์กด์ฌํ ๊ฒ์ด๋ค. ๋ฎ์ด์์ฐ๊ธฐ ํด์ฃผ์.
์ดํ ์๋ฎฌ๋ ์ดํฐ๋ก ์คํํด ๋ณด๋ฉด ์์ด์ฝ์ด ๋ณ๊ฒฝ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
2. ์ฑ ์๋ช
Google Play ์คํ ์ด์ ์ถ์ํ๊ธฐ ์ํด์๋ ๋ฐ๋์ ์ฑ์ ๋์งํธ ์๋ช ์ ํด์ผํ๋ค.
- KeyStore ๋ง๋ค๊ธฐ
- ์ฑ์ผ๋ก๋ถํฐ KeyStore์ฐธ์กฐํ๊ธฐ
- Gradle์์ ์๋ช ๊ตฌ์ฑํ๊ธฐ
๋ฐฐํฌํ ์ฑ์ ๊ฐ๋ฐ์ ์ ๋ณด๋ฅผ ์ฑ์ ์ฃผ์ ํด์ผ ํ๋ค. ๊ฐ๋ฐ์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํ ์ผ์ข ์ ์ธ์ฆ์์ด๋ค.
windows
keytool -genkey -v -keystore c:/Users/[์๋์ฐ์ฌ์ฉ์๋ช
]/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
mac
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
๋ฌผ์ด๋ณด๋ ์ง๋ฌธ์ ๋ชจ๋ ๋๋ตํ๊ณ ๋ง์ง๋ง์ y๋ฅผ ์ ์ด์ฃผ๋ฉด, key.jks ํ์ผ์ด ๋ง๋ค์ด์ง ๊ฒฝ๋ก๋ฅผ ์๋ ค์ฃผ๊ณ ๋๋๋ค.
3. ์ฑ์ผ๋ก๋ถํฐ keystore ์ฐธ์กฐ (key.jks ์๋๊ฒฝ์ฐ ๋ง๋ค๊ธฐ)
์์ฑํ key ํ์ผ์ android/app/ ํด๋์ ๋์ฃผ์.
๋ฐฐํฌ์ฉ ์ฑ์ ๋น๋ํ ๋ ์ฐธ์กฐํ๊ธฐ ์ํด ํ๋ก์ ํธ android/app/ ํด๋์ key.properties ํ์ผ์ ์์ฑํ ํ ์๋์ ๊ฐ์ด ์์ฑํ๋ค.
storePassword=<ํค์์ฑ์ ์
๋ ฅํ ์ํธ>
keyPassword=<ํค์์ฑ์ ์
๋ ฅํ ์ํธ>
keyAlias=key
storeFile=./key.jks
๊ณต์๋ฌธ์์๋ key.properties ํ์ผ์ ๊ฐ์ธ์ ์ผ๋ก ๋ณด๊ดํ๊ณ ๊ณต๊ฐ๋ ์ ์ฅ์์ ์ ๋ก๋ํ์ง ์๋๋ก ์ ํ์์ผ๋ฏ๋ก,
ํด๋น ํ์ผ์ android > .gitignore์ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
android/.gitignore
3. Gradle์์ ์๋ช ๊ตฌ์ฑํ๊ธฐ
์ฑ์ ์๋ช ์ ๊ตฌ์ฑํ๊ธฐ ์ํ์ฌ android > app > build.gradle์ ์์ ํด์ค ์ฐจ๋ก์ด๋ค.
์ฒซ๋ฒ์งธ, android { ... } ์์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ keystore ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋๋ก ํด์ค๋ค.
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('app/key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android { ...
๋๋ฒ์งธ, buildTypes ๋ธ๋ญ์ ์๋ ์ฝ๋๋ก ๋์ฒดํด์ค๋ค. (debug -> release)
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
์ด๋ ๊ฒํ๋ฉด ์ฑ์ release ๋น๋์์ ์๋์ผ๋ก ์๋ช ์ด ๋๋ค!
์ด๋ ๊ฒํ๋ฉด ์ฑ์ release ๋น๋์์ ์๋์ผ๋ก ์๋ช ์ด ๋๋ค!
4. ๋น๋ ๊ตฌ์ฑ ๊ฒํ ํ๊ธฐ
๊ณต์ ๋ฌธ์์์ ๊ฒํ ํ๋ผ๊ณ ํ ๊ฒ๋ค์ ๊ฒํ ํด์ค๋ค.
5. release ์ฑ ๋ฒ๋ค ๋น๋ํ๊ธฐ
์ฑ์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ ํด๋น ๋จ๊ณ์์๋ถํฐ ์์ํ๋ฉด ๋๋ค.
๋ฒ์ ์ pubspec.yaml ์์ ๋ฐ๊พธ๋ฉด ๋๋ค.
๋ฒ์ ์ ๋ฐ๊ฟจ์ผ๋ฉด
ํฐ๋ฏธ๋์ ์ด๊ณ android ๊ฒฝ๋ก๋ก ์ด๋ํด์ ์๋ ๋ช
๋ น์ด๋ก appbundle์ ๋น๋ํด์ค๋ค.
(cd android ๊ผญ!!!!) ์ํ๋ฉด , ์๋ฌํ์๊ฐ์ ์ฝ๋๋ค์ด ๋จ๊ฒ๋๋ค,,,
flutter build appbundle
์ฑ์ ๋ฆด๋ฆฌ์ฆ ๋ฒ๋ค์ (app-release.abb)
ํ๋ฌํฐ ํ๋ก์ ํธ/build/app/outputs/bundle/release path์ ์์ฑ๋๋ค.
6. ์ฑ์ Play Console์ ์ ๋ก๋
๊ตฌ๊ธ ํ๋ ์ด ์ฝ์์ ์ ๋ก๋ ํ๋ฉด๋๋ค.
์๋ ๋ฒ์ ์ ์ฑ์ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉํ๋ ํ๋ก๋์ ๋ฒ์ ์ด๋ค.
์์์ ๋ง๋ app-release.abb ์ด ํ์ผ์ ๋๋๊ทธํด์ ์ง์ด๋ฃ๋๋ค.
์ค๋ฅ, ๊ฒฝ๊ณ ๋ฐ ๋ฉ์ธ์ง์ ๊ฒฝ์ฐ์ ์ ์ธ์ ์์ ํด์ผํ๋ค.
๋ฒ์ ์ด ๊ฒํ ์ค -> ์ถ์๋๊ธฐ๋ก ๋ฐ๋๋๋ฐ
์ถ์๋๊ธฐ์ผ๋ ์ถ์๋ฅผ ๋๋ฅด๋ฉด 1์๊ฐ๋ด๋ก ๊ตฌ๊ธ ํ๋ ์ด์คํ ์ด์ ํด๋น ์ฑ์ด ์ฌ๋ผ๊ฐ๊ฒ ๋ฉ๋๋ค.