소셜 로그인 기능을 구현하거나 Firebase를 사용하는 경우 키를 생성해야 하는 경우가 있다. 또한 앱을 제작하고 구글 플레이 콘솔이나 애플 앱스토어에 등록하기 위해서는 앱 서명이 필수적이다. ios 같은 경우 맥에서 프로젝트를 진행하면 xcode가 일정 부분 해결해주지만 Android는 직접 앱 서명을 제작하고 등록해주어야 한다.
처음 앱 제작을 하면 갖가지 키들이 나오고 서명이 어쩌고 하는 말들이 막연하게 느껴져 공포스러울 수 있다. 아래 과정들을 천천히 따라 해 보면 조금 해소될 수 있기를 바란다.
순서는 아래와 같다.
1. 자바 설치
우선 java가 설치되어 있어야 한다. java11 버전 이상을 설치하는 것을 권장한다. 자바 설치 및 자바 환경변수 설정과 관련된 내용은 생략한다.
2. 키를 저장할 폴더로 이동
- Mac : /Users/{사용자이름}/.android
- Windows : C:\Users\{사용자이름}\.android
cd /Users/{사용자이름}/.android
or
cd C:\Users\{사용자이름}\.android
자신이 원하는 위치에 생성해도 잘 작동은 한다.
3. 키 생성
디버그 키만 생성해도 앱 배포 전까지는 큰 문제없겠지만 나중에 까먹을 수 있어 나는 그냥 세 개 다 만들어놓고 시작했다.
3.1. DEBUG KEY 생성
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 999999 -dname "CN=Android Debug,O=Android,C=US"
3.2. RELEASE KEY 생성
keytool -genkey -v -keystore release.keystore -alias androidreleasekey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 999999 -dname "CN=Android Debug,O=Android,C=US"
3.3 앱 서명 KEY 생성
keytool -genkey -v -keystore key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
여기는 디버그키 또는 릴리즈키와는 다르게 몇 가지 문답을 작성해야 한다.
키 저장소 비밀번호는 나주에 찾기 힘드니 잘 기억해두고, 나머지는 자유롭게 질의 작성을 하면 된다. 국가 코드는 자신이 속한 조직이 어디냐에 따라 입력하면 되고 한국은 82로 입력하면 된다. 마지막 "~(가) 맞습니까"에 y로 대답하면 키가 생성된다.
여기서 생성된 key.jsk 파일은 app 수준 gradle이 있는 경로(android/app 폴더 아래)에 넣어준다.
앱 서명키는 이후 프로젝트 수준 gradle이 있는 경로(android 폴더 아래)에 아래와 같은 key.properties를 생성해주어야 한다.
storePassword=[비밀번호]
keyPassword=[비밀번호]
keyAlias=key
storeFile=./key.jks
그다음 프로젝트 수준 build.gradle에 아래 내용을 추가해준다.
android {
...
// Key 관련
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
...
}
여기까지 잘 수행하였다면 이제 어지간해서 앱 배포 때까지 앱 서명이나 키 관련된 것을 건드리게 될 일이 없을 가능성이 높다. 물론 여기까지 잘 수행하고 다음 내용인 Firebase를 이용한 어떤 기능 수행 후에도 오류가 없을 때의 얘기이다.
추가적으로 저 keytool의 command들을 알아두면 좋으니 아래에 같이 첨부한다.
Commands:
-certreq Generates a certificate request
-changealias Changes an entry's alias
-delete Deletes an entry
-exportcert Exports certificate
-genkeypair Generates a key pair
-genseckey Generates a secret key
-gencert Generates certificate from a certificate request
-importcert Imports a certificate or a certificate chain
-importkeystore Imports one or all entries from another keystore
-keypasswd Changes the key password of an entry
-list Lists entries in a keystore
-printcert Prints the content of a certificate
-printcertreq Prints the content of a certificate request
-printcrl Prints the content of a CRL file
-storepasswd Changes the store password of a keystore
4. KEY 확인
아래 각각의 키들의 SHA1 값들을 확인한다.
DEBUG KEY 확인
keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
RELEASE KEY 확인
keytool -list -v -keystore release.keystore -alias androidreleasekey -storepass android -keypass android
앱 서명 KEY 확인
keytool -list -v -keystore key.jks
명령을 실행하면 셋다 아래와 같은 화면을 볼 수 있다.
우리가 필요한 값은 여기서 나온 SHA1 옆에 있는 값들이다.
5. KEY 등록
우선 Firebase의 자신의 프로젝트에 들어간 후 프로젝트 설정 화면으로 간다.
이후 위에서 확인한 SHA1 키들을 모두 디지털 지문 추가를 눌러 작성하고 저장해준다.
6. google-services.json
google-services.json 파일 버튼을 눌러 다운로드한다.
다운로드한 google-services.json 파일을 앱 수준 gradle이 있는 경로에 넣어준다.
여기까지가 완료하면 앱 서명과 key관련 세팅은 끝났다. 참고로 다른 컴퓨터에 해당 프로젝트를 복붙해서 사용하면 키를 같이 가지고 가던지 그 컴퓨터에서 새로 키를 생성하고 디지털 지문을 추가해주어야 한다. 추가하고 나면 google-services.json을 다시 다운로드하고 이전 파일 위에 덮어쓰면 된다.
참고 자료
https://www.lesstif.com/java/java-keytool-keystore-20775436.html