2011. 8. 17. 04:57

[펌] 이클립스에서 네이티브 애플리케이션을 디버그 모드로 서명하기

원본: http://ecogeo.tistory.com/264

드로이드 소스에 SRC/build/target/product/security 에 가면 eng 빌드에서 동작하는 테스트 키들이 있습니다. 이 테스트 키들은 user build 로 가면 각 제조사별로 다르게 Signing 되기 때문에 동작하지 않습니다.

- media.pk8, media.x509.pem 
- platform.pk8, platform.x509.pem 
- shared.pk8, shared.x509.pem 
- testkey.pk8, testkey.x509.pem  

4가지 키에 대한 간략한 설명은 다음과 같습니다.

* testkey - a generic key for packages that do not otherwise specify a key
* platform - a test key for packages that are part of the core platform
* shared - a test key for things that are shared in the home/contacts process
* media - a test key for packages that are part of the media/download system

jks 파일을 만드는 방법을 다음과 같습니다. (jks 파일은 이클립스에서 지정하여 자동으로 app 이 해당 키로 사이닝 되게 할 수 있습니다.)

1 PK8 유형의 키 파일을 PEM 유형 키로 변환

$ openssl pkcs8 -inform DER -nocrypt -in testkey.pk8 -out testkey.pem


2. 키와 인증서를 포함하는 PKCS#12 포맷의 저장소 생성

$ openssl pkcs12 -export -in testkey.x509.pem 
    -inkey testkey.pem -out testkey.p12 
    -password pass:android -name androiddebugkey


3. PKCS#12 포맷 저장소 파일을 자바 키저장소 포맷으로 변환

(1) JDK 1.5 인 경우 jetty 라이브러리에 포함된 PKCS12Import 클래스를 이용

$ java -classpath jetty-core-6.1.14.jar 
    org.mortbay.jetty.security.PKCS12Import testkey.p12 testkey.jks


(2) JDK 1.6 인 경우 JDK에서 제공하는 keytool 을 이용

$ keytool -importkeystore -deststorepass android 
    -destkeystore testkey.jks 
    -srckeystore testkey.p12 -srcstoretype PKCS12 -srcstorepass android
☞ 윈도우즈에서도 key 를 생성할 수 있습니다.

☞ 이클립스 Preferences > Android > Build 메뉴 Custom debug keystore 에 jks 파일을 지정하면 해당 키를 이용하여 사이닝 되게 됩니다.

☞ 만약 platform 키로 사이닝된 System 권한의 App 을 만들려면 메니페스트에 sharedUserId 를 선언해 주어야 합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.sskk.sample"
  android:sharedUserId="android.uid.system"
>