debug.keystore는 android sdk를 PC에 설치할 때 기본적으로 포함되어 있는 정보이기 때문에 PC 마다 다르다. 위치는 보통 /Users/.android/debug.keystore 경로에 존재한다.
따라서 팀 프로젝트 진행 시 팀원들 마다 다른 debug.keystore 파일을 갖게 된다.
안드로이드 스튜디오에서 따로 키를 설정하지 않고 빌드하면 기본적으로 PC에 설치된 debug.keystore로 애플리케이션을 설치하게 된다.
이렇게 될 경우 만약 프로젝트를 다른 PC로 가져와 실행하고 설치하려는 경우 문제가 발생할 수 있고, 만약 외부 API를 사용하는 경우 외부 API에 등록된 debug.keystore와 현재 PC의 debug.keystore 값이 다르기 때문에 문제가 발생할 수 있다.
이럴 때 우리는 두 가지 방법을 사용할 수 있다.
추후 확장성을 생각하면 1번 방법이 편할 것이다.
그럼 프로젝트 키스토어 관리 방법에 대해 알아보자!
debug keystore는 앞서 말했던 것 처럼 androidstudio 설치 시 기본으로 발급되는 keystore 이기 때문에 Mac 의 경우 /Users/.android/debug.keystore 경로에 있을 것이다.
얘를 프로젝트의 debug key로 설정하려면 keystore를 android 프로젝트에 복붙해주면 된다. 나 같은 경우는 경로를 app/keystore/debug.keystore 로 설정해주었따. 그리고 build.gradle 파일에서 signingConfigs를 설정해주면 된다.
우리는 Kotlin DSL 방식을 사용하기 때문에 아래와 같이 적어주면 된다.
(왜인지 모르겠지만 debug 키의 경우 key password 나 keystore password를 따로 안적어줘도 된다. 다만 아래에서 자세히 보겠지만 release 키의 경우 key password 나 keystore password를 적어줘야 한다.)
android {
signingConfigs {
getByName("debug") {
storeFile = file("./keystore/debug.keystore")
}
}
}
그리고 이렇게 signingConfigs를 설정해줬다면 이를 buildTypes에서 키로 사용하도록 설정해주면 된다.
buildTypes {
getByName("debug") {
isMinifyEnabled = false
signingConfig = signingConfigs.getByName("debug")
}
}
그리고 keystore는 깃에 올라가면 안되는 정보이기 때문에 gitignore를 설정해줘서 해당 파일을 안전하게 보호해줘야 한다. 나는 추후 keystore 폴더에 release 키 정보를 함께 넣으면서 release.keystore와 key.properties 파일을 넣을 예정이기 때문에 폴더 자체가 ignore 되도록 설정해줬다.
// .gitignore
app/keystore/
만약 gitignore 파일 변경사항을 푸쉬해도 ignore가 적용되지 않는다면 이 글을 참고하자.
release keystore는 안드로이드 스튜디오를 통해 손쉽게 발급받을 수 있다.
Build → Generate Signed App Bundle/APK 에서 CreateNew Keystore를 통해 생성할 수 있다.


Certificate 정보는 필수로 적지는 않아도 되며, 주의할 점은 Keystore Password와 Key Password는 같아야 한다.

이렇게 생성된 keystore는 해당 경로로 Project에 추가되게 된다.
나 같은 경우에는 debug key와 함께 gitignore 되게 하기 위해서 keystore 폴더 하위로 위치를 변경시켜줬다.
debug키와 마찬가지로 아래와 같이 signingConfigs를 설정해주면 된다. 여기서 주의할 점은 debug key의 경우 기본적으로 발급되는 key이기 때문에 getByName(”debug”) 로 설정해주면 되지만, release 키 같은 경우, 새로 발급해준 key 이기 때문에 생성한다는 의미로 create(”release”) 로 적어줘야 한다. 그리고 storeFile 뿐만 아니라 password, alias 까지 필수로 적어줘야 한다.
android {
signingConfigs {
create("release") {
storeFile = file("./keystore/release.keystore")
storePassword = "password"
keyAlias = "release"
keyPassword = "password"
}
}
여기까지 잘 설정이 되었다.
그러면 발급받은 debug.keystore와 release.keystore를 팀원들과 공유하면, 앱 빌드 시 해당 키로 서명된 앱을 빌드할 수 있게 된다.
keystore 파일이 gitignore로 설정되어 깃허브에서 다른 사람들은 볼 수 없지만, 왜인지 password가 build.gradle 파일에 그대로 노출되는게 찜찜해서 해당 정보들도 보호해보자.
해당 정보를 properties 파일에서 불러올 수 있도록 수정해보자.
keystore 정보가 담긴 properties 파일 또한 gitignore 될 수 있도록 gitignore에 설정해준 keystore 폴더 하위에 위치시킬 예정이다.
properties 파일 이름은 keystore.properties로 설정해줬다.
그리고 build.gradle에 노출되어있던 정보를 properties 파일로 옮겨주자.
properties 파일은 String = String 형식으로 저장되기 때문에 쌍따옴표를 쓰면 오히려 오류가 난다. 따라서 아래와 같이 문자만 적어줘야 한다.
storePath = ./keystore/release.keystore
storePassword = 비밀번호 정보
keyAlias = release
keyPassword = 비밀번호 정보
이렇게 적었으면 build.gradle 파일에서 아래와 같이 해당 정보를 properties 정보를 불러와서 적용해주면 된다.
signingConfigs {
create("release") {
val keystorePropertiesFile = rootProject.file("app/keystore/keystore.properties")
val keystoreProperties = Properties().apply {
load(keystorePropertiesFile.reader())
}
storeFile = file(keystoreProperties["storePath"].toString())
storePassword = keystoreProperties["storePassword"].toString()
keyAlias = keystoreProperties["keyAlias"].toString()
keyPassword = keystoreProperties["keyPassword"].toString()
}
}
이렇게 하면 아주 안전하게 keystore 관련 정보를 보호할 수 있다!
한가지 주의할 점은 해당 코드가 다른 팀원들 컴퓨터에서도 오류없이 작동되도록 하려면 keystore 파일 뿐만 아니라 properties 파일도 공유해줘야 한다!
좋은 글 감사합니다~