Flutter 앱 배포 시 Android 서명 이슈 해결

문제 상황

회사에서 Flutter로 개발한 앱을 Play Store에 처음 배포하려던 중 서명 관련 에러가 발생했다.

ERROR: JAVA_HOME is set to an invalid directory

실제로는 JAVA_HOME 문제가 아니라 keystore 설정이 잘못되어 있었다.

원인 분석

android/key.properties 파일의 경로 설정이 상대 경로로 되어 있어서 빌드 시점에 파일을 찾지 못했다. 또한 android/app/build.gradle에서 서명 설정을 제대로 불러오지 못하고 있었다.

해결 방법

먼저 android/key.properties 파일을 생성하고 절대 경로로 수정했다.

storePassword=myStorePassword
keyPassword=myKeyPassword
keyAlias=upload
storeFile=/Users/username/upload-keystore.jks

그리고 android/app/build.gradle에 서명 설정을 추가했다.

def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

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

이후 flutter build appbundle 명령어로 정상적으로 빌드되었다.

교훈

  • keystore 파일은 절대 Git에 커밋하지 말 것
  • key.properties.gitignore에 추가
  • 팀원들과 keystore 공유는 별도 보안 채널 이용

Flutter 공식 문서를 처음부터 꼼꼼히 읽었다면 시간을 절약할 수 있었을 것 같다.