keystore 생성 : keytool을 이용하여 운영체제에 맞게 생성합니다.
# keystore for mac/linux
keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
# keystore for windows
keytool -genkey -v -keystore %userprofile%\upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload
생성된 keystore를 참조하여 앱을 빌드하기 위해 key.properties(경로 : [project]/android/key.properties) 파일을 생성합니다. storeFile 항목에 위에서 생성한 keystore의 경로를 지정합니다.
key.properties(경로 : [project]/android/key.properties) 파일 생성 : 빌드시 keystore를 참조하기 위한 설정 파일, storeFile 값에 위에서 생성한 keystore를 지정
storePassword=<password from previous step>
keyPassword=<password from previous step>
keyAlias=upload
storeFile=<location of the key store file, such as /Users/<user name>/upload-keystore.jks>
signing 설정(build.gradle 파일)
[project]/android/app/build.gradle 파일에서 "android {"를 찾고 직전에 아래 내용을 추가합니다.(아래 소스에서 def keystoreProperties 부터 android { 직전까지)
// 여기부터
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
// 여기까지
android {
...
}
다음으로 android.buildTypes 직전에 signingConfigs 설정값을 추가합니다.(signingConfigs부터 중괄호까지)
android {
....
// 여기부터
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
// 여기까지
buildTypes {
release {
// 아래 항목도 ".debug"에서 ".release"로 변경
signingConfig signingConfigs.release
}
}
}
릴리즈 앱번들 생성
빌드 output은 “[project]/build/app/outputs/bundle/release/app.aab"에 존재
flutter build appbundle
APK 만들기
필요시 아래의 명령어로 릴리스용 APK를 생성합니다.
flutter build apk --split-per-abi
Running Gradle task 'assembleRelease'... 14.7s
✓ Built build/app/outputs/flutter-apk/app-armeabi-v7a-release.apk (8.7MB).
✓ Built build/app/outputs/flutter-apk/app-arm64-v8a-release.apk (9.1MB).
✓ Built build/app/outputs/flutter-apk/app-x86_64-release.apk (9.2MB).
Device에서 APK 설치 및 테스트
device에 release용으로 바이너리를 설치합니다.
flutter build apk;
flutter install;
Google SignIn 불가 원인1(릴리즈용 SHA-1)
firebase > 설정 > 일반 > 내 앱 > Android에 등록된 SHA-1이 없는 경우. SHA-1을 생성하여 "디지털 지문" 추가. 다음으로 "google-services.json" 파일을 다운받아 내용을 갱신합니다.
keytool -v -list -keystore ~/upload-keystore.jks -alias upload
Google SignIn 불가 원인2(Play App 서명)
불가원인1과 마찮가지로 firebase > 설정 > 일반 > 내 앱 > Android에 SHA-1 키를 등록 & "google-services.json"을 갱신합니다.
https://docs.flutter.dev/deployment/android#create-an-upload-keystore
Play Console로 이동 > 계정 선택
https://play.google.com/console
내부 배포할 앱 선택
새 버전 추가
App Bundle 업로드
업로드 실패
실패 원인은 이전 배포와 동일한 버전 코드를 사용했기 때문입니다.
버전 코드의 위치
pubspec.yaml 파일에서 version 필드를 찾습니다. "+" 다음에 있는 숫자가 버전코드입니다. 1 올려줍니다.
다시 빌드 실행
재등록 후 다음 클릭
오류 및 경고 확인 후 배포 시작
내부 배포 여부 마지막 확인
댓글