Flutter App PlayStore App 등록 / 배포하기
Updated:
Flutter App icon 추가 / 변경
flutter_launcher_icons
package 를 사용해서 android 와 ios 동시에 쉽게 등록, 변경이 가능합니다
// in pubspec.yaml
dependencies:
flutter_launcher_icons: ^0.9.2
flutter_icons:
// android 환경에서 icon 등록
android: "launcher_icon"
// ios 환경에서 icon 등록
ios: true
// logo image 파일 경로 등록
image_path: "images/icon.png"
- package 와 설정을 마치고 terminal 로 이동해서 icon 적용을 위한 명령어 실행 합니다
flutter pub run flutter_launcher_icons:main
- 새로고팀을 하고 android 에뮬레이터에 다음과 같이 적용된것을 확일 할 수 있습니다.
Flutter App 이름 변경
Android
-
프로젝트내에 android/app/src/main/AndroidManifest.xml 을 open 합니다
-
android:label=""
안에 text 를 app 이름으로 수정합니다
iOS
-
ios/Runner/info.plist 을 open 합니다
-
CFBundleName 의 key 값을 해당 app 이름으로 변경합니다
<key>CFBundleName</key>
<string>안녕날씨</string>
구글 플레이스터어 배포용 APK 생성하기
Package 이름 변경하기
- 프로젝트내에 android/app/build.gradle 파일을 open 합니다
defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "info.jacobko.wearther_app"
}
- applicationId 를 변경하면 되는데 보통 예) com.회사이름.앱이름 식의 형태로 작성하는데 주의 점은 패키지 이름은 한번 플레이 스터어에 올리면 수정할 수 없기 때문에 잘 선택 해야 합니다
App 버전확인
- pubspec.yaml 에서 버전을 변경해주면 되는데 처음 app 출시라면 default 값으로 설정되어 있는
1.0.0+1
만약 1.0.0+1 출시 후 버전 없은 1.0.0+2 or 1.0.1.+2 이런식으로 원하는 버전 부분에 + 처리해주면 됩니다.
version: 1.0.0+1
앱 권한 체크
-
android/app/src/profile/AndroidManifest.xml 파일을 open 헤서 앱에서 사용할 권한이 필요한 경우를 추가합니다.
-
기본값으로 internet 접속 권한이 있고 예시로 안녕 날씨에서는 위치권한에 대한 권한 을 manifest tag 안에 permission 값을 입력합니다
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.jacobko.weather_app">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
앱 서명하기
-
플레이스터어에 업로드하기 위해 개발자를 인증하기 위한 인증을 위해 keytool 을 이용해서 키 스토어 서명서를 생성합니다
-
참고: PC 에 Java 설치 되어 있어야 합니다
-
기존 keystore 가 있으면 만들지 않고 기존것을 사용해도 됩니다
# for mac (keystore 만들기)
keytool -genkey -v -keystore ~/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
# fo windows (keystore 만들기)
keytool -genkey -v -keystore c:/Users/USER_NAME/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
- 암호, 이름, 조직, 지역명 을 입력 후에 최종 맞는지 물어볼때 ‘Y’ 을 입력합니다
- 완료되면 /Users/유저명 경로에
key.jks
파일이 생성되면 이파일을 HDD 공간에 잘 보관 하고, 프로젝트 내에android/app
경로에 복사합니다
앱 키 스토어 참조
-
배포용 앱 빌드시 참조하기 위해
android/app
경로에 key.properties 파일 생성 후 아래의 내용을 입력 시킵니다 -
github 나 public 경로에
key.properties
노출되지 않도록 주의 합니다 (.gitignore 확인)
storePassword=<키생성시 입력한 암호>
keyPassword=<키생성시 입력한 암호>
keyAlias=key
storeFile=./key.jks
Gradle 서명 구성
-
앱의 서명을 구성하기 위해
android/app/build.gradle
파일을 수정합니다 -
Gradle 빌드시
key.properties
파일을 참조하기 위해 Gradle 에서 android 블록 산단에 아래 내용을 추가합니다
// 플러그인 위, android 위에 keystoreProperties 를 추가 합니다
// 'app/key.properties' 실제 properties 경로 위치 확인!!
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 {
- 이후 android 위에 Gradle 에서 buildType 블록 상단에 singingConfigs 블록을 추가합니다
android {
....
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
}
}
}
// 위의 default 로 되어 있는 code 를 다음과 같이 변경합니다
android {
....
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
- 이제 앱의 release 빌드에서 자동으로 서명이 될 것 입니다.
프로가드 활성화
-
앱의 난독화를 위해 프로가드를 활성해야 합니다. APK 파일 크기를 줄이고,코드를 디컴파일 시 소스 코드를 알 수 없도록 난독화를 진행 합니다
-
/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.**
- Gradle 빌드 시 프로가드 파일 참조가 가능하도록
/android/app/build.gradle
파일에서buildTypes
블록 내에 다음 내용을 추가 해서 프로가드를 사용한다고 선언합니다.
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
App Manifest 검토하기
-
올바른 앱 설정을 위해서
/android/app/src/main
에 있는AndroidManifest.xml
에 값을 check 합니다-
application
: 앱의 최종 이름을 반영하기 위해android:label
이 잘 적용됬는지 확인하기 -
uses-
permission
: 앱의 사용권한이 필요한 permission 부분이 잘 적용됬는지 확인하기
-
빌드 구성 검토하기
-
올바른 빌드 구성을 위해
/android/app.build.gradle
의 값을 check 합니다-
applicationId
: 고유의 ID 값이 잘 적용 되었는지 확인하기 -
versionCode
&versionName
: 내부 앱 버전 번호를 지정하고, 문자열 형태로 명시하세요. pubspec.yaml 파일에 version 속성을 설정하여 내부 앱 버전 번호를 문자열 형태로 지정할 수 있습니다. -
minSdkVersion
&targetSdkVersion
: 최소 API 레벨과 개발 대상 버전으로 지정한 지정 API 레벨을 명시하기
-
앱 번들 또는 APK 만들기
- 플레이스토어 개시할때 릴리즈 방식이 2가지 있는데 앱 번들, APK 생성 방식이 있습니다. 구글 가이드에서는 앱 던들 생성을 추천하고 있습니다. (앱 번들 생성 : 번들 도구와 구글플레이스토어 통해 test 가 가능하지만, arm, x68 코드가 모두 컴파일 되서 APK 파일이 무거워 짐)
앱번들 생성 명령어
flutter build appbundle
/build/app/outputs/bundle/release/app.aab
경로에 aab 파일이 생성됩니다
APK 만들기
flutter build apk --split-per-abi
build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk
경로에 apk 파일이 생성됩니다
빌드 된 APP 실제 스마트폰에서 APK 설치 및 구동 테스트
- android device 를 연결한 후에
flutter install
명령어를 입력해서 store 업로드 전에 App 구동 test 를 진행 합니다
개발자 계정 가입 및 등록
- 구글 플레이스터어에 개발자 개발자 계정 가입 및 $25 결제가 필요합니다
- 개발자 개정을 만들고 google console 에 로그인 하면 다음과 같은 화면이 나옵니다
-
앱만들 버튼 클릭 후 앱 세부 정보에서 적절하게 앱 정보를 입력합니다.
-
간단한 App 일 경우, 세부정보 입력 후에 (내부테스트, 비공개 테스트 등 skip 하고 바로 출시 진행) 국가 및 지역 선택 후에 프로덕션 버전 만들기로 진행합니다
- App Bundle build 한
.aab
파일 을 업로드 하고 앱출시 심사를 대기하면 됩니다.
🔶 🔷 📌 🔑
Reference
Build and release an Android app - https://flutter.dev/docs/deployment/android
Android 앱 출시 준비하기 - https://flutter-ko.dev/docs/deployment/android
슬기로운 IT생활 - https://itwise.tistory.com/47?category=964549
Leave a comment