-
안드로이드 앱 서명모바일 개발/Flutter 2025. 12. 2. 18:51반응형
구글 플레이 콘솔에 안드로이드 앱을 업로드하기 위해서는 서명 과정을 거쳐야 한다.
PC에 JDK가 설치되어 있는지 확인해보고, 제대로 설치돼있을 경우 다음 과정에 따라 aab 파일을 생성한다.
1. 업로드 키 생성
키 파일 이름(-keystore)과 별칭(-alias)을 지정하여 새로운 키스토어 파일(.jks)을 생성한다.
(validity 10000: 약 27년(10,000일) 정도 유효한 키를 생성한다.)
keytool -genkey -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload명령어를 실행하면 다음과 같이 키 파일의 비밀번호와 사용자의 정보를 묻는다.
Enter keystore password: 사용할_패스워드_입력
Re-enter new password: 패스워드_한_번_더_입력
Enter the distinguished name. Provide a single dot (.) to leave a sub-component empty or press ENTER to use the default value in braces.
What is your first and last name? [Unknown]: 사용자_이름_또는_조직_이름
What is the name of your organizational unit? [Unknown]: 팀_또는_부서_이름
What is the name of your organization? [Unknown]: 조직_이름
What is the name of your City or Locality? [Unknown]: 도시_이름
What is the name of your State or Province? [Unknown]: 주_또는_도_이름
What is the two-letter country code for this unit? [Unknown]: 국가_코드_한국은_KR
Is CN="사용자_이름_또는_조직_이름", OU=팀_또는_부서_이름, O="조직_이름", L=도시_이름, ST=주_또는_도_이름, C=KR correct? [no]: yes질문에 대한 대답을 적절히 입력하면 명령어를 실행한 경로에 키 파일이 생성된다.
생성된 키스토어 파일은 잃어버리지 않도록 안전한 곳에 보관한다.
2. PEM 인증서 추출
플레이 콘솔에 제출할 인증서 파일(.pem)을 추출한다.
아까 생성한 키 파일 이름과 별칭에 맞추어 다음 명령어를 실행한다.
keytool -exportcert -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem아까 생성한 키스토어 파일의 비밀번호를 입력하면 명령어를 실행한 경로에 인증서 파일이 생성된다.
3. 프로젝트에 키스토어 파일 복사
내 플러터 프로젝트의 android/app/ 경로에 키스토어 파일을 복사해서 붙여 넣는다.
4. key.properties 파일 생성
내 플러터 프로젝트 android/ 경로에 key.properties 파일을 새로 생성하고 다음 내용을 적어준다.
storePassword=아까 설정한 키 파일 비밀번호 keyPassword=아까 설정한 키 파일 비밀번호 keyAlias=upload storeFile=upload-keystore.jks1번에서 생성한 키 파일의 별칭과 경로로 적어준다.
4-1. 별칭(alias)을 모를 때
기존 키스토어를 사용하는데 별칭을 뭘로 설정했는지 모를 경우 다음 명령어를 통해 확인할 수 있다.
keytool -list -v -keystore 키스토어_파일_이름.jksSHA1 인증서의 지문 값도 위 명령어로 확인할 수 있다.
5. build.gradle.kts 수정
build.gradle.kts 파일에 다음 내용을 붙여 넣어 준다.
(코틀린으로 작성되었으므로 groovy일 경우 문법 바꾸어 쓸 것)
// 임포트 추가 import java.io.FileInputStream import java.util.Properties plugins { ... } // Properties 설정 추가 val keystoreProperties = Properties() val keystorePropertiesFile = rootProject.file("key.properties") if (keystorePropertiesFile.exists()) { keystoreProperties.load(FileInputStream(keystorePropertiesFile)) } android { ... compileOptions { ... } kotlinOptions { ... } defaultConfig { ... } // signingConfigs 추가 signingConfigs { create("release") { keyAlias = keystoreProperties["keyAlias"] as String keyPassword = keystoreProperties["keyPassword"] as String storeFile = keystoreProperties["storeFile"]?.let { file(it) } storePassword = keystoreProperties["storePassword"] as String } } buildTypes { release { // 추가 signingConfig = signingConfigs.getByName("release") // 난독화 및 최적화 옵션; 적용할 경우 추가 isMinifyEnabled = true isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" ) } } } flutter { ... } dependencies { ... }* flutter_local_notifications 패키지를 사용하고 있을 경우,
프로젝트의 android/app/src/main/res/raw 경로에 keep.xml 파일을 만들어서 isShrinkResources = true 세팅으로 인해 아이콘 파일이 삭제되는 것을 방지해야 한다. 이 파일을 만들지 않고 그냥 빌드하게 되면 릴리즈 버전 실행 시 PlatformException이 발생한다.
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:tools="http://schemas.android.com/tools" tools:keep="@mipmap/ic_launcher" />toos:keep에 AndroidInitializationSettings을 초기화할 때 넣어준 리소스 파일을 적어준다.
이 파일을 만들기 귀찮을 경우 isShrinkResources 값을 false로 변경하고 다시 빌드한다.
이때 네트워킹 라이브러리 등으로 인해 빌드에 실패할 경우,
android/app/ 경로에 proguard-rules.pro 파일을 생성한 후 다음 내용을 붙여 넣는다.
-dontwarn org.conscrypt.** -dontwarn org.openjsse.** -dontwarn javax.net.ssl.** -dontwarn javax.annotation.**6. Android App Bundle(AAB) 빌드
플러터 프로젝트 루트 디렉토리에서 다음 명령어를 실행해 서명이 완료된 aab 파일을 생성한다.
flutter build appbundle --release빌드에 성공했을 경우 /build/app/outputs/bundle/release/ 경로에 app-release.aab 파일이 생성된다.
7. 구글 플레이 콘솔에 업로드
내 앱 > 테스트 및 출시 > 프로덕션에서 새 버전 출시를 누르고, App Bundle에 6번에서 생성한 aab 파일을 업로드한다.
* 키스토어 파일 분실 시
1. 위 1~2번 과정을 통해 키스토어 파일을 새로 생성한다.
2. 구글 플레이 콘솔 > 내 앱 > 테스트 및 출시 > 앱 무결성에서 업로드 키 재설정 요청을 클릭한다.
3. 적절한 사유를 선택하고 새로 생성한 인증서 파일(.pem)을 업로드 한다.
4. 요청이 접수되면 알림창에서 다음과 같은 알림을 확인할 수 있다. (적용에 1~2일 정도 소요)
MyApp의 업로드 키 재설정 요청이 접수되었습니다. 새 업로드 키는 Dec 1, 2025, 00:00 AM(UTC)부터 유효합니다. 새 업로드 키가 유효해야만 새 App Bundle이나 APK를 업로드할 수 있습니다.
반응형'모바일 개발 > Flutter' 카테고리의 다른 글
앱이 16KB 메모리 페이지 크기를 지원하지 않습니다. (1) 2026.01.27 application id, bundle id 변경 (0) 2025.12.16 Firebase Messaging (0) 2025.11.21 앱 아이콘 세팅 (0) 2025.11.21 다국어 지원(Localization) (0) 2025.11.16