오드로이드를 안드로이드 소스 컴파일용으로 사용하다보니 apk를 설치할 기회가 없었는데, 스터디 덕분에 시도해 보니 즉시 안되는 군요. 그래서 스터디 발표시 부족한 부한 부분을 보충했습니다.
안드로이드 마켓에 배포를 하기 위해서는 애플리케이션에 서명을 해주어야 한다. 자신이 인증하는 애플리케이션임을 서명을 통해서 알리는 것이다.
그러기 위해서는 개인 키를 포함하는 암호화된 서명 파일이 있는 keystore가 필요하고 이를 JDK에서 제공하는 jarsigner 로 공개키로 서명하게 된다.
이클립스에서 Android SDK를 통해서 애플리케이션을 실행할 때마다 자동으로 디버그 서명을 만들고 이 서명이 애플리케이션이 사용될 때마다 서명되기 때문에 눈에 보이지는 않지만 항상 애플리케이션을 서명되고 있다.
- 디버그 서명 위치: ~/.android/debug.keystore
개인 인증서의 효용
본인이 개발한 애플리케이션임을 알리고 관리를 위해서는 가능하면 하나의 인증서로 관리하는 것이 편리할 것이다.
- 업그레이드 간편화
- 여러 애플리케이션을 하나의 프로세스로 실행
- 코드, 데이터 공유
서명 인증서 만들기
JDK에서 제공하는 keytool로 공개키와 개인키 쌍을 만들 수 있다. 이 키 쌍은 keystore에 저장되며 이 keystore를 통해 접근이 가능하다.
http://java.sun.com/j2se/1.5.0/docs/tooldocs/#security 참조
keytool 사용
key store 생성
$ keytool -genkey -v -keystore myandroid.keystore -alias mykeystore -keyalg RSA -validity 10000
keystore 암호를 입력하십시오: <---- 키 저장소에 접근 할 수 있는 암호
새 암호를 다시 입력하십시오:
이름과 성을 입력하십시오.
[Unknown]: Gangtai goh
조직 단위 이름을 입력하십시오.
...다음에 대해 유효 기간이 10,000일인 1,024비트 RSA 키 쌍 및 자체 서명된 인증서(SHA1withRSA) 생성 중
: CN=Gangtai goh, OU=self, O=Go for Android, L=SEOUL, ST=Unknown, C=KO
<gtkokeystore>에 대한 키 암호를 입력하십시오.
(keystore 암호와 같은 경우 Enter를 누르십시오):
[gtko.keystore 저장 중]
키 쌍을 만들며 myandroid.keystore에 저장() 며 이 키는 mykeystore 라는 이름으로 접근이 가능하다. 키를 만드는 알고리즘은 RSA이고 10000일(27년)간 유효하다.
finger print 확인
keytool -list 로 SDK의 인증서의 MD5 지문을 확인 할 수 있다.
keytool -list -alias mykeystore -keystore myandroid.keystore
keystore 암호를 입력하십시오:
gtkokeystore, 2009. 10. 22, PrivateKeyEntry,
인증서 지문(MD5):
AF:FE:77:FA:3D:F9:28:FB:AC:86:92:6E:E3:A9:9C:66
애플리케이션 서명
1_ 먼저 서명이 안된 애플리케이션(.apk)를 만든다: Eclipse에서 프로젝트 선택후 컨텍스트 메뉴(오른쪽 마우스 클릭)에서 Android Tools -> Export Unsigned Application Package..
2_ 개인키 저장소에 있는 키(비밀키)로 서명한다
- jarsigner -verbos -keystore mykey.keystore Myandroid.apk mykeyalias
Eclipse 에서 signed application package
1) Project Context menu -> Android Tools -> Export Signed Applicaiton package
개인키가 저장된 keystore 를 선택한다.
keystore에 저장된 alias 를 선택하고 keypass를 넣는다.
최종 application package 를 선택한다.
adb install 로 설치
- $ adb install -l MJAndroid.apk
pkg: /data/local/tmp/MJAndroid.apk
Success
실패시 - 서명 안된 application package 설치시
pkg: /data/local/tmp/MJAndroid.apk
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
디버그 인증서로 sign후 설치시
pkg: /data/local/tmp/MJAndroid.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
참조
- Apache HTTPS 키 생성: 암호화 키 생성

정말 잘 설명해 놓은
어플리케이션 서명에서 마켓 배포까지, 한눈에 보기
를 보시면 더 편합니다. ㅎㅎㅎ