플러터

플러터로 개발한 앱 플레이스토어 배포용 APK 생성하기 (패키지 이름 변경, 키 서명, 프로가드, 앱번들 만들기)

슬기로운IT생활 2021. 3. 29. 22:12
728x90

미소닭갈비 가게를 소개하는 앱을

플러터로 개발했다.

 

이제 개발한 앱을 구글 플레이스토어에 등록하기 위해

배포용 APK를 만들어야 한다.

패키지(Package) 이름 변경

우선 패키지 이름부터 변경해보자

VS Code에서 Shift+Ctrl+F를 누르면

프로젝트 전체에서 검색할 수 있다.

이때 기본 패키지 이름 형식인 'com.example'로

검색하면 다음과 같이 나온다.

그림

여기서 찾아들어가서

com.example.miso_chicken_rib으로 되어 있는 걸 변경하는데

보통은 본인 회사 이름으로 변경한다.

예) com.회사이름.앱이름

주의 : 패키지 이름은 한번 플레이 스토어에 올리면

수정할 수 없기 때문에 신중하게 작성할 것

그림

앱 버전 확인

pubspec.yaml에서 버전을 변경하면 된다.

나는 첫 번째 버전이기 때문에 디폴트 값인

1.0.0+1로 처리하겠다.

1.0.0은 버전 이름을 나타내고

+1은 버전 코드로 업데이트 시 각각 + 처리하면 된다.

예를 들어 1.0.0+1 출시 후

다음 버전은 1.0.0+2 또는 1.0.1+2 이런 식으로

원하는 부분을 + 처리하면 된다.

그림

앱 권한 체크

아래 경로와 같이 AndroidManifest.xml 파일을 열어서

앱에서 사용할 권한을 필요한 경우 추가한다.

플러터 프로젝트 생성 시 기본으로

INTERNET 권한이 포함되어 있으며

미소 닭갈비 앱을 개발하면서

사용하는 권한은 웹뷰 호출 정도 수준이라서

특별히 추가하지는 않겠다.

그림

앱 이름 설정 및 아이콘 변경은

이전 포스팅에서 처리했으니

필요한 경우 아래 URL 참고하면 된다.

참고로 앱 이름은 '닭갈비'에서 '미소닭갈비'로 변경했다.

확인해보니 시뮬레이터에서만 앱 이름 5글자 표현이 안되었기 때문이다.

https://blog.naver.com/PostView.nhn?blogId=kroa&logNo=222188129902&categoryNo=33&parentCategoryNo=0&viewDate=¤tPage=2&postListTopCurrentPage=&from=postList

플러터 앱 아이콘 쉽게 추가하기 - 앱 이름 설정

이번에는 플러터 앱 아이콘을 아주 쉽게 추가해보겠다.​패키지를 이용해서 안드로이드와 iOS를 한방에 ...

blog.naver.com

앱 서명하기

구글 플레이스토어에 업로드하기 위해

본인의 디지털 키를 앱에 서명해야 한다.

개발자를 인증하기 위한 인증서라고 이해하면 되며

VSCODE 터미널에서 다음과 같이 입력하여

keytool을 이용해 키 스토어 서명서를 생성한다.

그림

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

key.jks는 키 파일로 암호화 알고리즘은 RSA를 사용하며

암호화 키 사이즈는 2048, 서명서 유효기간은 10000일로 설정한다는 의미이다

여기서 ~/key.jks라고 되어 있는데

본인 PC에 인증서를 저장할 경로를 넣어주면 된다.

예) D:\flutter_source\depoly_key\miso_chicken_rib/key.jks

명령어를 입력하면 아래와 같이

키 저장소 비밀번호를 입력하라고 나오며

비밀번호를 입력하면 된다.

그림

이후 이름과 성, 조직 단위 이름, 조직 이름, 시/도 이름,

조직의 두 자리 국가 코드 등을 입력하라고 나오는데

차례로 입력 후 맞는지 물어볼 때 'Y'를 입력해서 끝내면 된다

그림

이후 비밀번호를 다시 입력하고

아래와 같이 지정한 경로에 JSK 키가 생성된다.

그림

본인은 이 key.jks 파일을

android/app 폴더에 넣어줬다.

그림

앱 키 스토어 참조

이제 배포용 앱 빌드 시 참조하기 위해

android/app 폴더에 key.properties 파일 생성 후

아래 내용을 포함한다.

storePassword=<키생성시 입력한 암호>

keyPassword=<키생성시 입력한 암호>

keyAlias=key

storeFile=./key.jks

Gradle 서명 구성

이후 Gradle 빌드 시 key.properties 파일 참조를 위해

Gradle에서 android 블록 상단에 아래 내용을 추가한다.

그림

코드는 아래와 같다.

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

이후 Gradle에서 buildType 블록 상단에

singnigConfigs 블록을 추가한다.

signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } }

또한 앱을 릴리즈(배포용)으로 빌드 하기 위해

buildTypes의 release를

signingConfig signingConfigs.release로 변경한다.

그림

signingConfig signingConfigs.release

프로가드 활성화

앱의 난독화를 위해 프로가드를 활성화해야 한다.

APK 파일 크기를 줄이고 코드를 디컴파일 시

소스 코드를 알 수 없도록 난독화한다.

프로가드 룰 구성을 위해 /android/app/proguard-rules.pro

파일을 생성하고 다음 규칙을 추가한다.

그림

## Flutter wrapper -keep class io.flutter.app.** { *; } -keep class io.flutter.plugin.** { *; } -keep class io.flutter.util.** { *; } -keep class io.flutter.view.** { *; } -keep class io.flutter.** { *; } -keep class io.flutter.plugins.** { *; } -dontwarn io.flutter.embedding.**

Gradle 빌드 시 프로가드 파일 참조가 가능하도록

build.gradle 파일에서 buildTypes 블록 내에

다음 내용을 추가하여 프로가드를 사용한다고 선언한다.

그림

minifyEnabled true useProguard true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

앱 번들 또는 APK 만들기

플레이 스토어 게시할 때 2가지 릴리즈 방식을 사용할 수 있으며

앱 번들 생성 방식과 APK 생성 방식이 있는데

구글 가이드에 의하면 앱 번들 생성을 추천하고 있다.

앱 번들의 장점은 번들 도구와

구글 플레이를 통해 테스트가 가능한 점이며

단점은 arm, x86 코드가 모두 컴파일되어 APK 파일이 무거워진다.

- 앱 번들 생성 명령어

flutter build appbundle

그림

아니 앱에 뭐 아무것도 없는데 37.7MB라니

용량이 너무 큰 것 같다;;

이미지 파일 같은 걸 최적화를 안 해서 그런가?

이건 나중에 고민해 보겠다.

- APK 생성 명령어

flutter build apk --split-per-abi

그림

확실히 APK는 번들 대비 용량이 줄어들었다.

그래도 26.7MB 면 큰 것 같긴 하다.

핸드폰에서 APK 설치 및 테스트

flutter install 명령어를 입력하면

연결된 디바이스(핸드폰)로 APK가 배포되며

테스트를 해볼 수 있다.

그림

연결된 핸드폰에서 정상적으로 동작함을 확인할 수 있다.

이제는 다음 포스팅에서 구글 플레이스토어에 내가 만든 앱을 등록해보겠다.

728x90