환경
- M1 Mac OS Monterey 12.5
- Android Studio Chipmunk 2021.2.1 Patch1 (ARM)
- Gradle 7.2
- Android Build Gradle 7.1.2
- Kolin 1.7.0
debug.keystore 생성
debug.keystore 는 android sdk 를 PC에 설치하면 기본적으로 포함되어 있습니다.
따라서, 따로 생성하지 않아도 됩니다.
debug.keystore 로 생성한 apk는 debugging 의 용도로 쓰이며
정식적인 배포가 아니므로 기기에서는 위험 apk 파일로 간주합니다.
debug keystore 위치
- window : C:/users/.android/debug.keystore
- Mac: ~/.android/debug.keystore 또는 /Users/.android/debug.keystore
debug keystore 의 기본 정보
정보를 변경하지 않았다면 초기 세팅 정보는 아래와 같습니다.
- keystore file name: debug.keystore
- keystore pw: android
- key alias: androiddebugkey
- key password: android
주의할 점
debug.keystore 는 android sdk 가 설치된 저장소(PC)마다 keystore 의 정보가 다릅니다.
만약 프로젝트를 다른 PC로 가져와 빌드 & 실행 하려는 경우.
빌드나 실행하는 과정에서 기기 보안관련 문제나 혹은 설치 문제가 발생할 수도 있고
외부 API 에 등록된 debug.keystore 해시 키(hash key) 값과
현재 PC가 바라보고 있는 SDK 의 debug.keystore 값이 다르기 때문에 문제가 발생할 수 있습니다.
(예를 들어, 페이스북 로그인, 구글 로그인 등등)
이럴때는 debug.keystore 파일을 프로젝트에 넣어 가지고 다니거나
각각의 PC의 해당하는 debug.keystore 의 hash key 를 모두 외부 API에 등록하는 방법이 있습니다.
release.keystore 생성
release.keystore 는 배포할 목적을 가진 apk 를 signing 하는 역할에 쓰여지며
구글 플레이 마켓에 apk 를 올리는 중요한 역할을 하는 key 입니다.
(현재는 Uploded Key 라는 개념으로 변경 됨)
만약. 분실 할 경우 마켓에 배포 중인 앱을 관리(배포, 수정 등) 할 수 없게 되므로 중요하게 보관하여야 합니다.
이에 대비하여 구글 플레이 콘솔에서는 마켓 키를 생성하여 이로 배포 할 것을 권장하고 있습니다.
(구글 플레이콘솔에 저장해두는 Cloud Key 같은 개념. 마켓 키 != 업로드 키. 두 키는 정보가 다르다.)
그리고 만약 release.keystore 를 유출하게 될 경우.
누군가의 의해 악의적인 의도를 가진 apk 가 생성되어 배포될 수 있으므로
관리에 세심한 주의가 필요합니다.
이제 release.keystore 파일을 생성해보도록 하겠습니다.
Android Studio 를 이용한 release.keystore 생성 (추천)
build -> Generate Signed Bundle / APK 로 이동합니다.
Next 를 눌러줍니다.
Android App Bundle or APK 아무거나 선택하셔도 무방합니다.
아래 창이 나타나면 Create New 버튼을 눌러줍니다.
아래 창이 나타나면 정보들을 입력해줍니다.
먼저 keystore 가 어디에 생성 될 건지 Path 를 잡아줍니다.
그리고 keystore 이름을 정해줍니다.
저 같은 경우는 테스트용으로 testrelease.keystore 라고 정하였습니다.
그리고 keystore 의 alias, password 를 적어줍니다.
모든 정보를 다 적을 필요는 없습니다.
Country Code 정도만 채워주고
중요한 것은 key alias 와 password 입니다.
절대 잊어 먹지 않도록 주의가 필요합니다.
OK 를 눌러줍니다.
성공적으로 생성되면 아래 처럼 정보가 들어 간 것을 볼 수 있습니다.
이제 Cancel 을 누르고 keystore 가 생성될 경로로 잡았던 폴더에
실제로 release.keystore 가 생성이 잘 되었는지 확인해봅시다.
release.keystore 가 잘 생성되었네요 ㅎㅎ
이를 이용해 구글 플레이 마켓에 앱을 배포하는 것 까지 할 수 있습니다.
잃어버리지 않도록 조심합시다.
터미널을 이용한 release.keystore 생성
터미널 창을 열어 아래의 명령어를 입력합니다.
당연히 java jdk 가 설치되어 있어야 합니다.
$ keytool -genkey -v -keystore <keystore name> -alias <alias name> -keyalg <alg name> -keysize <key size> -validity <validity days>
- 예) $ keytool -genkey -v -keystore my-release-key.keystore -alias my_key -keyalg RSA -keysize 2048 -validity 10000
- keystore
- 생성될 .keystore 확장자의 파일 이름
- alias
- 키의 별명
- keyalg
- 키 암호화 알고리즘.
- RSA나 DSA 중 하나를 선택합니다.
- keysize
- 키의 크기를 나타낸다.
- 이 옵션을 빼면 기본적으로 1024비트의 크기로 저장합니다.
- 구글에서는 2048비트 이상의 키 크기를 권장
- validity
- 유효기간이다. 단위는 일. 365를 입력하면 1년이지만 이렇게 입력하면 경고가 뜹니다.
- 구글에서는 최소 25년 이상(9125일)의 유효기간을 입력할 것을 권장하고 있습니다.
- 10000일 정도로 해주면 적당 할 듯
- keystore
명령어를 입력하면 비밀번호 설정 부터
key 생성자의 정보를 요청하는 질문이 나오는데
순서대로 입력 후 마지막에 y 를 입력하여 확정 짓습니다.
생성이 완료되면 터미널 명령어를 실행한 경로에 .keystore 파일이 생성되어 있습니다.
keystore hash key 확인 하기
구글로그인이나 페이스북, 카카오 로그인 등등
서드파티를 사용하다 보면 Hash Key 를 알아야 하는 경우가 많이 있습니다.
어떤 방법으로 확인 할 수 있는지 알아보겠습니다.
Android Studio 를 이용한 Hash Key 확인 (추천)
Android Gradle 에서 signing config 관련 스크립트에 값을 설정 해두었다면
이후 부터는 편하게 확인 할 수 있습니다.
이 방법으로 debug.keystore, release.keystore 두 가지를 모두 간편하게 확인할 수 있다는 장점이 있습니다.
단, debug, release keystore 에 대한 정보가 (app)build.gradle 에 하드코딩 되어 있어야 합니다.
예시)
android {
signingConfigs {
debug {
keyAlias 'androiddebugkey'
keyPassword 'android'
storePassword 'android'
storeFile file('../debug.keystore')
}
release {
keyAlias 'release'
keyPassword 'releasePassword'
storePassword 'releasePassword'
storeFile file('../release.keystore')
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
}
참고로 저 같은 경우는 debug signing 은 따로 그래들에 하드코딩 하지 않고
아래 처럼 사용하고 있습니다.
signingConfigs {
release {
storeFile file('./keystore/release.keystore')
storePassword '....'
keyAlias '....'
keyPassword '....'
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.release
}
}
debug build, release build 모두 release signing 하나 만을 사용하고 있습니다.
debug signing 을 따로 설정하는 경우 build type 이나 flavor 옵션에 따라서
signing key 가 다른 경우가 생기는데 이럴 때 개발 환경에 예외 케이스들이 많이 생기기 때문에
작업 시 실수가 발생할 수 있는 여지도 많고 귀찮은 상황이 발생할 때가 많습니다.
예시)
- 앱 signing key 가 다르기 때문에 항상 재설치 여부를 묻는 귀찮음. 혹은 설치 에러 발생.
- 외부 API 를 release 용 빌드로 테스트 해야 하는데 모르고 debug 용 빌드로 테스트하고 있었다던가..
- apk 를 구글 플레이 콘솔에 업로드 할 때 실수로 debug signing 으로 뽑아서 업로드를 하려고 했다거나...
- ???: 전달 받은 apk 가 설치가 안되요! -> 기기의 설정 -> 앱 설치 보안문제
- ???: 전달 받은 apk 로는 구글플레이에서 업데이트를 받을 수 없네요. 어떻게 된 거죠?
따라서 저는 release signing 만을 사용하고 있습니다.
우측 Gradle 탭을 이용해 확인
먼저 File -> Preferences -> Experimental 창으로 이동합니다.
그 후 Do not build Gradle Task list during Gradle sync 라는 옵션에 체크가 되어있는지 확인하고
체크가 되어 있다면 해제 시켜줍니다.
OK 를 눌러 창을 빠져 나옵니다.
프로젝트 Gradle 을 한번 싱크해줍니다.
안드로이드 스튜디오에서 우측 상단의 gradle 탭을 클릭합니다.
그리고 Tasks -> android 순서대로 이동 후
signingReport 를 더블 클릭합니다.
그럼 keystore 에 관한 hash key 정보들이 gradle build 탭에 출력된 것을 볼 수 있습니다.
명령어를 직접 입력하여 실행
만약 gradle -> Tasks -> android 에서 아무것도 보이지 않는 다면 ctrl 키를 두번 누릅니다.
아래와 같은 창이 열리면 gradle signingReport 라고 치고 엔터를 누릅니다.
이렇게 gradle task 를 실행시키면 keystore 와 관련된 정보들이
MD5, SHA1, SHA-256 형식으로 나열되어 출력되는 것을 볼 수 있습니다.
아래는 재미로 만든 저의 사이드 프로젝트에서 한번 테스트 했을 때의 출력 모습입니다. ㅎㅎ
여기서 필요한 정보들을 복사하여 외부 서드파티 라이브러리들에 Hash Key 값을 입력해주면 됩니다.
터미널을 이용한 Hash Key 확인 방법
debug.keystore Hash Key 확인
아래 예시는 SHA-1, SHA-256 형식으로 확인할 수 있는 명령어 입니다.
(keytool 은 java jdk 가 설치되어 있고, 환경변수로 잡혀있어야 사용 가능합니다.)
keytool -list -v -keystore <debug.keystore-path> -alias androiddebugkey -storepass android -keypass android
예) $ keytool -list -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android
debug.keystore 가 저장 된 경로에서 위 명령어대로 입력하고, 실행 해보면 생성된 해시 키를 확인 할 수 있습니다.
아래와 같이 출력 된 것을 확인 할 수 있습니다.
별칭 이름: androiddebugkey
생성 날짜: 2020. 8. 31.
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: C=US, O=Android, CN=Android Debug
발행자: C=US, O=Android, CN=Android Debug
일련 번호: 1
적합한 시작 날짜: Mon Aug 31 21:59:02 KST 2020 종료 날짜: Wed Aug 24 21:59:02 KST 2050
인증서 지문:
SHA1: 7A:D8:B5:74:91:CA:8B:ED:87:44:6E:1F:93:55:78:31:06:03:97:FB
SHA256: C2:15:AC:D9:42:C4:F5:AC:67:CD:5F:1C:C2:DC:52:05:34:F4:50:C8:51:07:7E:DB:75:AD:19:25:A9:C5:0B:69
서명 알고리즘 이름: SHA1withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 1
release.keystore Hash Key 확인
아래 예시는 SHA-1, SHA-256 형식으로 확인할 수 있는 명령어 입니다.
(keytool 은 java jdk 가 설치되어 있고, 환경변수로 잡혀있어야 사용 가능합니다.)
keytool -list -v -keystore <release.keystore-path> -alias <release-key-ailas>
예) $ keytool -list -v -keystore happyant.keystore -alias happyant
release.keystore 가 저장 된 경로에서 위 명령어대로 입력하고
실행 해보면 아래와 같이 해시 키를 확인 할 수 있습니다.
키 저장소 비밀번호 입력:
별칭 이름: happyant
생성 날짜: 2021. 4. 24.
항목 유형: PrivateKeyEntry
인증서 체인 길이: 1
인증서[1]:
소유자: CN=..., OU=happyant, O=Unknown, L=Unknown, ST=Unknown, C=82
발행자: CN=..., OU=happyant, O=Unknown, L=Unknown, ST=Unknown, C=82
일련 번호: 2484f2e5
적합한 시작 날짜: Sat Apr 24 17:11:28 KST 2021 종료 날짜: Wed Sep 09 17:11:28 KST 2048
인증서 지문:
SHA1: .....
SHA256: .....
서명 알고리즘 이름: SHA256withRSA
주체 공용 키 알고리즘: 2048비트 RSA 키
버전: 3
이상으로 포스팅을 마치겠습니다.
감사합니다.
[Android] - 구글플레이 콘솔에서 앱 서명키 정보 확인
'Develop > Android' 카테고리의 다른 글
[Android] Foldable Phone(폴더블 폰) 접힘 여부 알아내는 법 (0) | 2020.06.23 |
---|---|
[Android] SMS 자동으로 읽어오기 (0) | 2020.05.22 |
[Android] Doze Mode (0) | 2020.04.08 |
[Android] Night Mode 지원 방법 (0) | 2020.04.07 |
[Android] 앱 업데이트 이후 실행 여부 체크하기 (0) | 2020.04.07 |