[ 목차 ]
1. Flutter app 이미지 변경
2. Flutter app 이름 변경
3. Package 이름 변경
4. App 버전 확인
5. 앱 권한 설정 (필요시!)
6. 키스토어 서명서 생성
7. key.properties 파일 생성
8. key.properties 파일 참조를 위한 app/build.gradle 파일 수정
9. 앱 난독화를 위한 proguard 파일 생성
10. 마지막 ' 앱 번들 생성 ' !
(1) flutter app 이미지 변경 🐻
android > app > src > main > res > mipmap-* 로 이동
위에 표시된 mipmap-* 파일들의 이미지들을 바꿔줍니다.
변경할 이미지의 이름을 'ic_launcher.png' 로 바꾸어
원래 있던 플러터 이미지와 적용할 이미지를 대체해주는 것 ! (⭐️ 이름은 동등하게 !)
위의 파일들은 같은 파일 같지만,
72x72, 48x48, 96x96, 144x144, 192x192 로
각각 크기가 다르기 때문에, 대체할 이미지 또한 5개의 사이즈에 맞추어 기존 파일의 이미지 크기와 맞는지 확인하며 잘 대체해줍니다.
(2) Flutter app 이름 변경 🐻
android > app > src > main > AndroidManifest.xml 로 이동
android:label = "어플 이름" 으로 바꿔주세요 .
1번에서 바꿨던 이미지의 이름이 android:icon="@mipmap/이미지이름" 에 들어갑니다.
기존 ic_launcher로 이름을 같게 파일만 위와같이 대체한다면,
여기서 이미지 이름을 굳이 바꿀 필요 없겠죠 ?
(3) Package 이름 변경 🐻
android > app > build.gradle 로 이동
defaultConfig 및 applicationId에 package 이름을
com.example.(패키지 이름)에서 보통 "com.(회사 이름).(어플 이름)" 으로 변경 합니당 !
⭐️ 어플 출시를 위해 중간과 끝 위치의 이름은 무조건 바꾸어 주어야 합니다. 무 조 건 !
그리고 한번 이 패키지 이름을 플레이스토어에 올리면 수정이 불가하기 때문에 잘 변경해주세요
(4) App 버전 확인 🐻
1) android > app > build.gradle 로 이동
3번에서의 파일과 동일.
flutterVersionCode와 flutterVersionName 을 확인합니다.
flutterVersionCode은 출시후 업데이트 할 때마다 1,2,3,4,로 1씩 늘려주어야 업데이트가 됩니다. 따라서 출시할 때에는 1로 해두면 되고,
flutterVersionName은 보통 대규모 업데이트를 하게 되면 1.0.0 -> 2.0.0 식으로 늘리고
그렇지 않다면 0.1(보통 기능 개발 시) 이나 0.0.1(보통 작은 업데이트 시 예를 들어, ui 수정) 씩 늘려가며 업데이트를 진행합니다.
이건 각자 규칙을 정해두고 하시면 될 것 같습니당 :)
저는 처음 출시 시 위의 이미지와 같이 flutterVersionCode = 1, flutterVersionName = 0.0.1로 정했어요.
2) 프로젝트 파일>pubspec.yaml 파일로 이동
위에서 설정한 flutterVersionName과 똑같이 적어줍니다.
(5) 앱 권한 설정 (필요시 !) 🐻
android > app > src > main > AndroidManifest.xml 로 이동
앱에서 사용할 권한이 필요한 경우. manifest tag안에 uses-permission 값을 넣어주면 됩니다.
(6) 키스토어 서명서 생성 🐻
for mac.
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
for windows.
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
키스토어 서명서 생성 시, 암호, 이름, 조직, 지역명 을 입력하는데
저는 보통 까먹을 까봐 똑같은 입력값으로 다 입력 해준 후,
지역만 KR로 해서 만들었습니당. (암호 입력하면 입력 값이 안보이지만 써지고 있다는 것 주의 !)
그리고 Y를 입력하여 최종적으로 입력된 값이 맞다고 입력하면 key.jks 파일 생성 완료 !
/Users/(유저 명)/key.jks 파일이 생성 되었을 것.
(중요 ⭐️)이 파일을 잘 보관해둬야 합니다 ! !
그 후, ⭐️ key.jks 파일을 android/app 경로에 복붙 !
(7) key.properties 파일 생성 🐻
배포용 앱 빌드시 참조하기 위해 android/app에 key.properties 파일 생성.
storePassword=키생성시 입력한 암호
keyPassword=키생성시 입력한 암호
keyAlias=key
storeFile=./key.jks
저는 여기서 storePassword나 keyPassword에 암호 입력시,
"" 안에 적어야 하나 헷갈렸는데, 그냥 딱 ! 암호만 입력하면 됩니다.
또한 storeFile 에 key.jks 의 위치 경로를 꼭 저렇게 정확히 적어주셔야 합니다.
(위에서 복붙한 android/app/key.jks = ./key.jks)
그리고,
key.properties 파일이 노출되지 않게 혹여나 github나 다른 곳으로 파일이 올라가지 않도록, .gitignore파일을 확인해주는 것도 필수 !
(8) key.properties 파일 참조를 위한 app/build.gradle 파일 수정 🐻
이제는 위에서 만든 key.properties 파일을 참조하기 위해
android > app > build.gradle 로 이동
1) 4줄을 복사 붙여넣기 합니다.
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('app/key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
그리고 key.properties의 내용들을 참조할 수 있도록
2) 6줄 코드도 넣어줍니다.
android {
....
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
3) 위의 한줄 코드도 넣어주면, release 빌드에서 자동으로 서명이 될 것.
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
// signingConfig signingConfigs.debug
signingConfig signingConfigs.release
}
}
(9) 앱 난독화를 위한 proguard 파일 생성 🐻
android > app 로 이동하여 proguard-rules.pro 파일을 생성합니다.그리고 위의 코드를 추가.
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontwarn io.flutter.embedding.**
또한 이 코드들을 release 빌드 시에 참조 할 수 있도록
android > app > build.gradle 로 이동하여
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
위의 세 줄 코드를 추가해줍니다.
(10) 마지막 ' 앱 번들 생성 ' ! 🐻
을 하기 전에 ⭐️마지막 점검⭐️
android > app > src > main > res > mipmap-* 에 있는
1) 어플 이미지 5개 변경
android > app > src > main > AndroidManifest.xml 에 있는
2) android:label 이 어플 이름으로 잘 변경되었는지
android > app > build.gradle 로 이동
3) flutterVersionCode, flutterVersionName 이 출시 버전에 따라 잘 변경 되었는지
프로젝트 > pubspec.yaml 로 이동
4) version: 이 위의 flutterVersionName과 같은지
android/app 로 이동
5) key.jks파일이 android/app 에 있는지
6) android/app 에 key.properties 파일 생성
android > app > build.gradle 로 이동
7) key.properties파일 첨부를 위한 내용이 포함되었는지
android > app 로 이동
8) proguard-rules.pro 파일이 생성 되었는지
android > app > build.gradle 로 이동
9) proguard-rules.pro 파일 첨부를 위한 내용이 포함되었는지
에 대한 내용을 한번씩 점검한 후, 앱 번들 생성 명령어를 통해 최종 단계로 넘어 갑니다 !
보통 다들,
flutter build appbundle
의 명령어를 사용하라고 하지만 저는 빌드 오류가 나서
아래의 코드를 입력하여 abb 파일을 생성.
flutter build appbundle --no-tree-shake-icons --no-sound-null-safety
요즘 playstore 출시에서는 APK 파일이 아닌 ABB 파일만을 받아 주기 때문에 abb 파일만 생성하면 됩니다.
만약 위의 내용들이 잘 점검해서, 빌드 오류 없이 appbundle 파일이 잘 만들어졌다면,
이렇게
build > app > outputs > bundle > release 폴더에 app-release.aab 파일이 만들어졌을 것입니당 !
이 파일을
https://wp.swing2app.co.kr/knowledgebase/playstore-apprelease/
위와 같이 플레이 스토어 앱 게시를 위한 준비를 한 후, 파일을 첨부하여
앱 게시를 기다리면 끗 ✨
처음부터 abb 파일 생성까지, 또 앱 출시를 위한 playstore에서의 세팅까지
복잡한 과정이지만 차근차근 하다보면
어느새 playstore 앱 출시 장인이 되어있으실 것이라 믿씀니다 😉 💭
참고
https://wp.swing2app.co.kr/knowledgebase/playstore-apprelease/
'App > Android' 카테고리의 다른 글
[Kotlin] ListView 구현 (1) | 2023.11.15 |
---|---|
[Android error] [error message]* What went wrong:Execution failed for task ':app:mergeDebugResources'. (0) | 2023.11.13 |