플러터 앱 서명하기(keystore)

build가 완료된 appbundle

개발자는 앱을 출시하기 전에 앱을 서명해야 합니다. 서명은 앱의 무결성을 보장하고 사용자에게 신뢰성을 제공하는 중요한 단계입니다. 이 글에서는 플러터 앱을 서명하는 과정에 대해 알아보겠습니다.

서명 과정의 핵심 요소 중 하나는 keystore입니다. 개발자는 릴리스 버전의 앱을 서명하기 위해 keystore를 사용합니다. 이 keystore 파일은 앱의 서명에 필요한 키와 인증서를 포함하고 있습니다. 일반적으로 keystore는 앱을 릴리스하는 동안 계속 사용되므로 안전하게 보관해야 합니다. 또한 keystore의 암호를 분실하면 앱의 업데이트나 새 버전을 릴리스하는 데 문제가 발생할 수 있으므로 이를 주의해야 합니다.

이제 keystore를 생성하고, 필요한 설정을 완료하여 플러터 앱을 서명하는 과정을 살펴보겠습니다.


https://docs.flutter.dev/deployment/android#signing-the-app 을 참고했습니다.

 

keystore 생성


명령창에 다음 명령어를 실행합니다.

keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload

명령어를 입력하고 비밀번호, 이름, 조직, 주소 등 keystore에 필요한 정보를 입력하시면 됩니다.

키 저장소 생성하기

keystore는 프로젝트 폴더 내에 생성하는게 일반적이지만, 저는 경로를 따로 지정해줬습니다.

생성 후 JKS 키 저장소는 고유 형식을 사용합니다. "keytool -importkeystore -srckeystore ~/upload-keystore.jks -destkeystore C:/keystore/release.keystore -deststoretype pkcs12"를 사용하는 산업 표준 형식인 PKCS12로 이전하는 것이 좋습니다. 라는 경고문이 뜨는데 따옴표 안의 명령어를 실행하시면 해결 됩니다.

keytool -importkeystore -srckeystore ~/upload-keystore.jks -destkeystore C:/keystore/release.keystore -deststoretype pkcs12

key.properties 작성

 keystore와 관련된 정보를 포함하는 key.properties 파일을 작성해줍니다.

[프로젝트]/android/app/ 경로에 key.properties 파일을 생성하여 다음과 같이 작성해 줍니다.

storePassword=<password-from-previous-step>
keyPassword=<password-from-previous-step>
keyAlias=upload
storeFile=<keystore-file-location>
key.properties 작성

build.gradle 파일 수정

[프로젝트]/android/app/build.gradle 파일을 편집하여 릴리스 모드에서 앱을 빌드할 때 업로드 키를 사용할 수 있도록 구성합니다.

1. android 블록 앞에 key.properties를 추가합니다.
   def keystoreProperties = new Properties()
   def keystorePropertiesFile = rootProject.file('key.properties')
   if (keystorePropertiesFile.exists()) {
       keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
   }

   android {
         ...
   }
android 블록 앞에 key.properties를 추가합니다
 2. buildTypes 블록 수정
   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
       }
   }

위의 buildTypes 블록을 찾아 수정합니다.

   signingConfigs {
       release {
           keyAlias keystoreProperties['keyAlias']
           keyPassword keystoreProperties['keyPassword']
           storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
           storePassword keystoreProperties['storePassword']
       }
   }
   buildTypes {
       release {
           signingConfig signingConfigs.release
       }
   }
buildTypes 블록 수정

이렇게 설정이 완료 되었습니다. flutter build appbundle --no-tree-shake-icons 명령어를 입력하면 서명된 릴리스 파일이 [프로젝트]/build/app/outputs/bundle/release/app-release.aab 경로에 생성된 것을 확인할 수 있습니다.

flutter build appbundle

변경사항이 적용되지 않을 경우 flutter clean을 실행 후 다시 빌드해주세요