Android는 keystore를 이용해 개발자 자신의 앱을 signing 한다. 그런데, 이미 1.0을 release했는데 업데이트가 잘 되는지 궁금 할때 처럼, 기존 자신의 app을 지우지 않은 채 설치(정확히는 update)를 하며 테스트를 해야할 때가 있다. 이때, 매번 export 메뉴를 이용해 내 keystore를 지정, signing을 하는 번거로운 작업을 반복 해야할까?
이 때는, debug용 keystore를 추가로 만들면 된다. Eclipse ADT를 이용해 개발할 때에는 기본적으로 범용 debug.keystore가 들어있다. 이 keystore를 대신할 keystore를 만드는 것이다. 방법은 간단하다. release keystore를 이용해 나만의 debug용 keystore를 만든 후 “Preference > Android > Build > Custom debug keystore”에서 만든 debug용 keystore로 바꿔주면 된다. 이렇게 하면 매번 export하지 않고 “Run As > Android Application”을 통해 app을 계속 설치할 때 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 에러를 안 볼 수 있다.
명령어는 다음과 같다.
keytool -importkeystore -v -srckeystore [릴리즈용 키스토어 파일이름] -destkeystore [디버그용 키스토어 파일이름] -srcstorepass [릴리즈용 키스토어 비밀번호] -deststorepass android -srcalias [alias 이름] -destalias androiddebugkey -srckeypass [alias 비밀번호] -destkeypass android
예제는 다음과 같다.
keytool -importkeystore -v -srckeystore my.keystore -destkeystore my.debug.keystore -srcstorepass mystorepassword -deststorepass android -srcalias myAlias -destalias androiddebugkey -srckeypass myaliaspassword -destkeypass android
아니, 왜 비번이 “android”인가? 위에서 언급한 IDE 안의 keystore는 자동으로 생성된다. 그리고 이 keystore를 이용해 signing할 때마다 비밀번호를 입력하는 번거로운 작업이 필요하다. 이를 IDE가 대신 해주는데, 비번을 고정해서 사용하고 있는 거다. “android”로, 그래서 그에 맞추어 비번을 바꿔줘야 IDE를 통한 빌드를 사용할 수 있다.
그럼 debug용 키와 release용 키는 어디가 같고 어디가 다른걸까? 간단히 말하면 핑거프린트(fingerprint)가 같다. 그리고 위에서 수정한대로 비밀번호와 알리아스(alias)가 다르다. fingerprint가 뭔지 궁금하다면 다른 글을 참조하자.
참, keytool은 안드로이드 SDK가 아니라 JDK(Java Development Kit) 안에 들어있다.keystore가 안드로이드에서 유용하게 쓰이지만, 원래는 Java에서 지원하는 기능이라 그렇다.
핑백: 키스토어가 debug용인지 release용인지 구분하는 법 | Dog발자
핑백: keystore 정보 입력하기 | Dog발자