민스씨의 일취일장
Android | Flutter로 만든 안드로이드 앱 배포 준비 과정 본문
Flutter로 만든 안드로이드 앱 배포 준비 과정 글이다.
Flutter로 만든 안드로이드 앱 배포 준비 과정
버전 관리
가장 먼저 해야 할 일은, 버전을 관리하는 것이다. 하나의 애플리케이션의 버전은 유일해야 하기 때문에 변경 수준에 맞게 버전을 관리해 줘야 한다. 버전 관리는 pubspec.yaml 파일의 version 속성값 관리를 뜻한다.
version : major.minor.patch+version
ex)
version : 1.1.1+15
여기서 1.1.1을 버전 이름(version name)이라 하며, 15를 빌드 넘버(build number)라 부르는데, 안드로이드는 버전 코드(version code) iOS에서는 프로젝트 버전(project version)이라고 부르기도 한다.
버전 관리 예시
1.0.0+1 -> 1.0.1+2 -> 1.1.0+3 -> 1.1.1+4 -> 1.1.2+5 -> 2.0.0+6 ...
빌드넘버(버전코드 / 프로젝트버전)은 매번 증가해야 하며, 애플리케이션 업그레이드 정도에 따라서 버전 이름을 변경시켜주면 된다. 보통은 다음과 같은 방식으로 버전 이름을 변경해준다.
mojor + 1 | 이전 버전과 호환이 불가능한 큰 변화가 있을 때 |
minor + 1 | 기능 개선 및 새로운 기능이 추가 됐을 때 |
patch + 1 | 버그가 수정되었을 때 |
앱 서명
안드로이드 플레이스토어에 앱을 게시하기 위해서는 개발자의 서명이 필요한데, 이를 앱 서명이라고 부른다. 앱 서명은 앱의 성능, 기능과는 전혀 관련이 없고, 권한을 갖고 있는 개발자(앱의 무결성을 보장하고 신뢰할 수 있는)가 앱을 게시하는 것인지 확인하기 위해 플레이스토어와 개발자 사이에 필요한 인증 도구이다.
규약
하나의 앱 서명을 이용해 여러 앱을 게시해도 되고, 앱마다 다른 앱서명을 생성해 사용해도 된다. 다만, 하나의 앱에는 하나의 앱 서명을 이용해야 한다.
앱 하나당, 하나의 앱 서명
앱 서명 생성 과정
앱서명(업로드 키스토어)를 생성하는 방법은 두 가지가 있다. 하나는 명령어를를 이용한 방식이고, 다른 하는 안드로이드 스튜디오를 이용하는 방식이다. 보통은 명령어로 간단하게 생성한다.
keytool -genkey -v -keystore <파일명>.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <키 별칭>
이렇게 생성된 키스토어 파일은 android/app 디렉토리 내에 위치시켜야 한다. 파일을 생성해 옮겨도 되지만, 프로젝트 터미널에서 해당 위치로 바로 키스토어를 생성하는 것이 간편하다.
keytool -genkey -v -keystore android/app/appname-.jks -keyalg RSA -keysize 2048 -validity 10000 -alias <키 별칭>
📣 주의
해당파일을 github과 같은 원격 저장소에 올리지 않도록 주의해야 한다.
명령어를 입력하면 이제 비밀번호와 정보등을 입력하라고 요구할 것이다. 여기에 비밀번호와 이름 등을 입력하면 된다.
이름은 조직, 팀 등의 이름이어도 된다. 즉, 개발자의 실명이 아니어도 된다.
build.gradle 설정
build.gradle 설정을 하기앞서 먼저 key.properties를 android 디렉토리(안드로이드 루트)에 아래의 내용으로 생성해준다. 보안정보를 build.gradle에 직접 작성하지 않기 위함이다.
storeFile=../key.jks
storePassword=your-store-password
keyAlias=key
keyPassword=your-key-password
위의 keystore 생성시 키 패스워드만 작성했다. 이렇게 한 종류의 패스워드만 입력한 경우에는 storePassword와 keyPassword가 동일하다. 이렇게 작성한 후, 해당 파일은 .gitignore에 등록해줘 공개되지 않도록 한다. 이제 build.gradle 설정만 해주면 되는데, 아래 내용을 android/app 디렉토리 내의 build.gradle에 추가해준다.
⚠️ build.gralde 위치에 주의해야 한다. root가 아니라 android/app 위치이다.
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
}
}
...
}
이 단계까지 올바르게 수행했다면 릴리즈 서명이 자동으로 이뤄진다.
릴리즈 빌드 생성
이제 배포를 위한 파일을 생성할 것이다. 이 때 선택지는 APK와 AAB 두 가지가 있다. 참고로 이 포스트에서는 AAB로 빌드할 것이다.
APK vs. ABB
APK는 Android Package의 약자로 안드로이드 앱의 전체 패키지를 포함하는 파일을 의미한다. 즉, 하나의 파일에 앱의 모든 리소스와 코드가 포함된다. 따라서 모든 Android 기기에서 앱을 실행할 수 있고 App Store를 거치지 않고도 직접 다운받거나 전달해 설치 및 사용이 가능하다. 하지만 사용 장치에 최적화되어있진 않아 용량이 클 수 있다.
ABB는 Android App Bundle의 약자로, Google Play 스토어에 앱을 배포할 때 사용하는 파일이다. 전체 APK를 여러개의 APK로 분할해 사용할 기기에 최적화된 APK를 동적으로 생성할 수 있다. 뿐만아니라 앱의 기능또한 분할해 필요한 부분만 다운받고, 추후 필요한 부분은 추가로 다운로드해 사용할 수 있다. 다만 Play 스토어를 통해서만 해당 기능을 사용할 수 있다는 폐쇄성이 단점으로 볼 수 있다.
배포용 ABB 파일 빌드
flutter 프로젝트이니, 배포용 abb 파일 빌드는 flutter 명령어를 사용할 것이다. 명령어는 다음과 같다.
flutter build appbundle --release
성공적으로 build에 성공하면 아래와 같은 메시지를 볼 수 있을 것이다.
그럼 flutter 루트 위치에서부터 build/app/outputs/bundle/release에 생성한 app-release.aab가 생성돼 있는 것을 확인할 수 있다.
준비 완료
이렇게 배포할 애플리케이션 준비는 완료 되었다.
'Mobile' 카테고리의 다른 글
Android | 구글 플레이 콘솔 개발자 개인 계정 가입하기 (0) | 2025.02.03 |
---|