프로그래밍/React-Native

안드로이드 앱 등록 프로세스 정리중...

콘파냐 2021. 12. 22. 19:00
반응형

이 글은 React-native로 개발한 앱을 Android 테스트용으로 등록하는 과정(2021/12/23일 기준)에 대한 정리다.

크게 두 단계로 나누어 생각하기로 한다.

첫 째로 React-Native에서의 준비단계는 abd파일 apk파일을 생성하는 것이다.

두 번째로 google play console에 등록하는 과정이다.

등록과정은 테스트 버전과 배포되는 공개 버전 사이에 큰 차이는 없으므로 참고가 될 것 같다.

React-Native 단계

구글에 앱을 올리기 위해서 가장 많이 문제가 되는 부분이 바로 업로드 키사이닝 키라는 개념인 것 같다.
이 부분을 자세하게 설명한 문서는 보지 못해서 초보 앱 개발자의 경우 많이 헤멜 것이다. 문서가 있긴 하지만 이미 개념을 잘 아는 사람을 위한 설명뿐이었다.
또한 이 부분은 구글 정책에 따라서 바뀌기 때문에 최신 정책과 기존 정책이 다르기도 해서 이미 앱을 등록한 경우와 새롭게 앱을 등록하는 경우 처리 방법이 다를 수 있어서 더욱 그렇다..
여기에서는 앱을 현시점에 처음 올리는 경우를 가정하여 최신 정책을 다룬다. 다음은 프로세스의 핵심만 정리한 것이다.

업로드 키(upload key)
앱을 빌드한 결과 파일(abd, apk)을 구글 플레이에 올리기 위해서는 앱이 실제 소유자에 의해서 업로드되었는지 식별할 수 있는 식별키가 필요하다. 이 개념이 업로드 키라고 보면 된다.
업로드 키의 생성은 - keytools로 하는데 자세한 명령은 아래 쪽에 다시 정리해 둔다.
이렇게 생성한 키로 앱을 서명하면 되는데 서명하는 방법은 서명방법 를 참고하여 정리해본다.
서명이 끝났다면 빌드를 하고 업로드한다.

업로드 키의 생성 방법 (패스워드 입력, country를 물어보는 곳에 KR....correct? 부분에서 y를 입력하고 나머지는 모두 엔터만 쳐서 넘겼음.)

$ keytool -genkey -v -keystore [key-name].keystore -alias [key alias] -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]: KR
Is CN=*****, OU=Unknown, O=Unknown, L=*****, ST=*****, C=***** correct?
  [no]: y

Enter key password for <my-key-alias>
    (RETURN if same as keystore password):

서명 방법 1단계
android/gradle.properties 에 앞에서 생성한 업로드 키에 대한 정보를 넣어줘야 한다.

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

서명 방법 2단계
android/app/build.gradle 파일에 다음 코드를 추가.

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

빌드

# cd android
# ./gradlew assembleRelease  # apk 파일 생성
./gradlew bundelRelease # abd 파일 생성

빌드한 결과를 디바이스에서 테스트하는 명령

react-native run-android --variant=release

Error 처리

Expiring Daemon because JVM heap space is exhausted 참고

// gradle.properties
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

kakao 로그인 설정

앱에서 kakao, naver, facebook과 같은 sns 로그인을 이용하려면 업로드 키와 서명키의 해시값을 등록해야 한다고 한다.
해시값을 얻는 방법은
구글 플레이 콘솔 - 설정 - 앱 무결성에 들어가면 (앱 서명키 인증서, 업로드 키 인증서)가 보인다. 인증서의 SHA-1 지문인증을 통해서 얻을 수 있다.
예시(keystore로 알아내기

keytool -exportcert -alias upload-alias -keystore ./upload.keystore | openssl sha1 -binary | openssl base64

예시(구글 콘솔 - 앱 무결성의 SHA-1 값으로 알아내기)

echo A1:B2:C3:D5:D1:E3:E1:AB:AC:E2:12:19:3B:1A:17:1E:1D:C6:15:A1  | xxd -r -p | openssl base64

위 두개의 값 (로컬에서 생성한 keystore로 해싱한 값과 앱 무결성에 있는 업로드 SHA-1 값으로 해싱한 값)이 같아야함.

얻은 해시값은 카카오 개발자 페이지의 자신의 앱에 등록한다.

LOCAL 환경 - debug key 해시

DEVELOP, STAGING 환경 - debug 모드일 땐 debug key 해시필요, release 모드일 땐 upload key 해시 필요

구글 플레이에 등록된 경우 -> 구글 플레이에서 사이닝 키의 해시가 필요하다.

정리하면 개발환경의 debug, release는 dubug 키 해시, uploade 키 해시가 필요하며

구글플레이에 등록된 경우엔 uploade 키가 사이닝 키로 변경되므로 사이닝 키의 해시가 카카오 앱에 등록되어 있어야 한다.

따라서 카카오 앱의 TEST 버전은 2개 또는 3개의 해시가 등록되어 있을 수 있으며

카카오 배포용 앱에는 반드시 사이닝 키 하나만 등록되어 있어야 한다.

 

업로드 키와 사이닝 키
이 후로는 업로드키로 앱을 서명하여 구글에 올리면 업로드 키만 확인하고 사이닝 키로 재 사인한 APK 파일을 생성한다고 한다. 따라서 로컬에서 구글로 업로드하기 위해 빌드한 APK 파일로 실행해도 유효하지 않게 된다.
현재 검토 중인 상태에서 Kakao 로그인이 막힌다. 검토가 안되어서 그런지는 모르겠다.

react-native-kakao-loing 라이브러리

  • 배포 후 로그인 시 팅기는 문제 해결참고, 참고

android/app/proguard-rules.pro 에 다음 추가

-keep class com.kakao.sdk.**.model.* { <fields>; }
-keep class * extends com.google.gson.TypeAdapter

내부 테스트

  • 검토가 필요 없으나 최초 게시 시 최대 48시간 기다려야 한다고 함.

앱 등록 단계

정리중...
구글 플레이 콘솔 - 설정 - 앱 무결성 에 들어가면 두 개의 인증서를 볼 수 있다.
그중 업로드 키 인증서는 내가 로컬에서 생성한 업로드키에 대한 인증서이다.
앱 서명키 인증서는 구글 자체내에서 생성한 사이닝 키 인증서이다. 업로드 키 인증서는 앱을 등록할 때 앱에 서명된 업로드키를 확인하기 위한 것이며 확인이 되면 사이닝 키로 변경하여 앱을 등록하게 된다. 따라서 업로드 키는 말 그대로 업로드 시에 식별을 위한 것이므로 앱의 배포시에는 제거된다.(주의) 그래서 카카오나 네이버와 같은 API 제공업체에서 앱 사이닝키의 해시값을 필요로 할 때 업로드 키의 해시값이 아닌 사아닝 키의 해시값을 등록해줘야한다.
(자세한 방법은 앞(kakao 로그인 설정)에서 설명했음)

반응형