본문 바로가기
프로그래밍/리액트 네이티브

리액트 네이티브 안드로이드 release용 파일 만들기(feat. 파이어베이스 구글 로그인)

by 망고데이 2020. 1. 21.
반응형

드디어 앱 개발을 마쳤다. 이제 google play store에 앱 파일을 업로드 해야 배포를 할 수 있다.

이 때는 react-native run-android를 하는 것과는 달리 릴리즈 형태로 빌드를 해야 한다.

여기서 내가 사용한 방법은 먼저 release-key를 만들고, 번들을 만드는 것이다. 이 때 내가 만든 번들 파일은 .aab의 확장자를 갖는데 다른 블로그에서는 apk파일을 직접 만들기도 한다. 그래서 차이에 대해 알아봤다.

 

역시나 stackoverflow에 설명이 잘 되어 있다.

(출처: https://stackoverflow.com/questions/52059339/difference-between-apk-apk-and-app-bundle-aab)

일단 .aab 파일은 다음과 같이 만든다.(환경이 윈도우이다..)

./gradlew bundleRelease

그리고 .apk파일은 아래와 같이 만든다.

./gradlew assembleRelease

옵션만 놓고 보면, 첫 번째는 릴리즈용 번들을 만드는 것 같아 보인다. 그리고 두 번째는 릴리즈용 asssemble? 조립을 하는 것으로 보이는데..

일단 stackoverflow의 내용을 보면, app bundle은 퍼블리싱 포맷이란다. 그리고 apk는 패키징 포맷이라고 한다. 그리고 실제로 디바이스에 설치되는 게 이 apk 파일이다. 그리고 aab파일을 가지고 있으면 번들 툴을 사용해서 apk를 만들 수 있다. 아마도 google play store에서 이 작업을 해주는 거 같다.(그러니까 apk가 생기고 배포가 되겠지)

아래 사진을 가져왔는데 aab 파일에 base 모듈과 다이나믹 특성, 메타데이터, config 등이 들어 있는 거 같다. 정말 간단하게 보면 이렇고, 그래서 배포를 할 때 두 파일 어떻게 배포를 하든 파일 자체만 놓고 보면 차이는 크게 없다는 것이다.

이제 google play console에 올리기만 하면 되는데..

사실 여기에는 앞에서 언급한 release-key를 만드는 과정이 선행되어야 한다. (안그럼 빌드할 때 에러가 날 것이다)

마찬가지로 설명이 잘 되어 있는 블로그를 가져왔다.

https://bomjjack.github.io/programming/2018/01/06/rn-android-app-release/

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

 

이런 식으로 입력하면 해당 커맨드를 실행한 곳에 my-release-key.keystore 가 생성된다.

그러면 위에 블로그를 순서대로 따라하면서 파일을 android/app에 놓고, gradle.property에 파일명, key_alias, 비밀번호 등을 넣어주고 변수를 build.gradle에 넣어줘서 릴리즈용 파일을 만들 때 사용할 수 있다.

파이어베이스 구글 로그인

위의 블로그에서도 언급했지만, 파이어베이스의 구글 로그인 인증을 사용하기 위해서는 keystore의 sha1키를 사용해야 한다. 값을 추가하는 부분은 파이어베이스 -> 설정 -> 일반 -> 내 앱 부분에 디지털 지문 추가에 있다. 

추가할 때 보면 다른 유형도 입력할 수 있게 되어 있기는 한데 내가 보고 따라한 예제들은 하나같이 sha1만 넣길래.. 다른 것도 되지 않을까? 싶긴 한데 해보지는 않았다.

아무튼 이렇게 개발 할 때 sha1키랑, 릴리즈할 때는 또다른 sha1 키를 넣어주어야 한다. 안그럼 개발시에 구글 로그인 잘 되다가 배포하고나서 안되서 삽질할 수 있다.(...ㅠ)

또 하나, 키를 추가했으면 google-services.json 받아서 다시 넣어주어야 한다. 저기 설정이 바뀌면 저 파일이 바뀌는 듯 하다.

이렇게 해서 빌드를 마치고 .aab 파일이나 .apk 파일을 만들었으면 구글 플레이 콘솔에 가서 넣어주고 배포를 진행하면 된다.

배포의 전 과정도 아니고 파일 만드는 아주 작은 과정이지만 이 과정에서 삽질을 많이 했기에..ㅠ 따로 남겨 보았다.

추가 및 수정(2020.01.23)

나 같은 경우는 Google Play 앱 서명을 사용하도록 설정했다. 언제 했는지는 모르겠는데 권장이라고 되어 있어서 했나보다. 그런데 이게 또 약간 헤깔리게 할 수 있다.

내가 로컬에서 release용이라고 만든 keystore에서 sha1을 뽑아내면 이건 업로드용 인증서 지문이 된다. 그리고 Google Play에서는 이걸로 신원을 확인한 다음, 배포 목적의 앱 서명 키를 다시 만든다. 그게 앱 서명 인증서이다. 

즉, 구글 로그인에서 사용하는 sha1은 이 키를 사용해야 한다. 이 건 google play console > 출시 관리 > 앱 서명 > 앱 서명 인증서에서 찾을 수 있다.

정리하면, release할 때는 google play store에 .aab 혹은 .apk 파일을 업로드하고, 로컬에서 확인할 수 있는 인증서 지문이 아니라(이건 업로드용 인증서 지문) 출시 관리 > 앱 서명의 앱 서명 인증서를 firebase 인증에 넣어주고 google-services.json로 다시 빌드? 이거 좀 이상한데.. 그럼 한 번에 배포를 못한다는 말인데? 나는 삽질을 여러 번 했기 때문에 순서가 어떻게 되는지는 기억이 나질 않는데.. 나중에 새 앱 만들어서 배포할 때 추가로 정리를 해야겠다. 

지금 추측으로는 어차피 play console 서명을 사용하니까 google-sevices.json을 다시 안받아도 될 거 같긴 한데.. 자세한 건 새로 앱 만들 때 다시 확인해보고 다시 정리해야겠다.

아무튼 결론은 앱 서명 인증서는 Google Play 앱 서명을 사용한다면 play console에 있는 서명을 이용해야 한다는 것.

 

반응형