플러터 안드로이드 앱 배포

소요 시간: 5분

배포하기 전에 아래 사항들이 내 앱의 설정과 맞는지 확인하자.


체크리스트

  1. 앱 패키지 변경
  2. 앱 이름 변경
  3. 앱 아이콘 변경
  4. SDK 버전 확인
  5. (선택) 광고 퍼미션 추가
  6. (선택) 네트워크 접속 퍼미션 추가


앱 서명하기

구글 플레이 스토어에 배포하려면, 디지털 서명서로 내 앱에 서명해야 한다.

안드로이드에서는 서명키는 두 개 사용한다. upload 서명과 app 서명이다.

개발자는 upload 키로 서명된 .aab 또는 .apk 파일을 구글 플레이 스토어에 업로드한다. 사용자가 앱을 설치하면 app 서명 키가 포함된 apk 파일을 받는다.

키스토어 생성하기

터미널을 열고 운영체제에 맞는 명령어를 실행한다.

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

# window
keytool -genkey -v -keystore $env:USERPROFILE\upload-keystore.jks `
        -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 `
        -alias upload

물어보는 질문에 답하면 key.jks 파일이 생성되면서 이 파일이 저장된 경로를 알려준다. 해당 경로로 이동해 upload-keystore.jks 파일을 찾는다.

내 앱에서 키스토어 참조하기

내 앱에서 이 키스토어의 정보를 읽을 수 있게 참조해야 한다.

1. 찾은 upload-keystore.jks 파일을 [flutter project] > android > app 폴더로 옮긴다.

2. 다시 상위 폴더인 android로 돌아와 key.properties 파일을 생성하고 다음 코드를 입력한다.

storePassword=<password-from-previous-step>
keyPassword=<password-from-previous-step>
keyAlias=upload
storeFile=<keystore-file-location>

3. 참고로 key.properties 파일은 보안이 필요한 파일이다. 공개적인 장소에 보관하는 건 피해야 한다. 대표적으로 github에는 푸시하면 안 된다. android > .gitignore에 key.properties를 추가한다.

key.properties
**/* keystore
**/*. jks

Gradle에서 서명 불러오기

릴리스 모드에서 앱을 빌드할 때 업로드 키를 사용하도록 Gradle을 구성한다. Gradle을 구성하려면 <project>/android/app/build.gradle 파일을 편집한다.

1.  android 속성 블록 앞에 키스토어 속성 파일을 정의하고 로드한다.

2. keystoreProperties 객체를 설정하여 key.properties 파일을 로드한다.

// [project]/android/app/build.gradle

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

android {
   ...
}

3. android 속성 블록 내부에 있는 buildTypes 속성 블록 앞에 서명 구성을 추가한다.

// [project]/android/app/build.gradle

android {
    // ...

    signingConfigs {
        release {
            keyAlias = keystoreProperties['keyAlias']
            keyPassword = keystoreProperties['keyPassword']
            storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
            storePassword = keystoreProperties['storePassword']
        }
    }
    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
            signingConfig = signingConfigs.release
        }
    }
...
}

이제 플러터로 배포용 앱을 빌드하면 자동으로 해당 앱에 서명된다.


배포용 앱 빌드하기

업로드 파일을 만들자.

터미널에서:

1. cd [project]를 입력한다.

2. flutter build appbundle을 실행한다.

3. (flutter build를 실행하면 기본적으로 릴리스 빌드가 됩니다.)

앱의 릴리스 번들은 [project]/build/app/outputs/bundle/release/app.aab에 생성된다. 이 파일을 플레이 스토어에 올리고 사용자들이 다운받는다.

플러터 리스트