실수로 디버그 키로 서명 했습니까?
Google Play에서는 디버그 키 저장소로 서명 된 앱을 게시 할 수 없습니다. 이러한 APK를 업로드하려고하면 "디버그 모드로 서명 된 APK를 업로드했습니다. APK를 릴리스 모드로 서명해야합니다"라는 메시지와 함께 Google Play가 실패합니다.
그러나 디버그 키 저장소로 서명 된 업데이트 를 업로드하려고하면 이 메시지 가 표시 되지 않습니다 . Google Play는 SHA1 지문을 참조하여 질문에 표시된 메시지를 표시합니다.
먼저 실수로 디버그 키로 앱에 서명했는지 확인하십시오.
사용 된 서명 키를 어떻게 확인합니까?
APK에서 정보를 수집
Java를 사용하여 다음 명령을 사용하여 원래 APK 및 업데이트 APK에 서명 된 인증서를 확인할 수 있습니다 keytool
.
keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk
다음은 APK 서명 방식에 대한 자세한 정보를 보여줍니다.
Owner: CN=My App, O=My Company, L=Somewhere, C=DE
Issuer: CN=My App, O=My Company, L=Somewhere, C=DE
Serial number: 4790b086
Valid from: Mon Nov 11 15:01:28 GMT 2013 until: Fri Mar 29 16:01:28 BST 2041
Certificate fingerprints:
MD5: A3:2E:67:AF:74:3A:BD:DD:A2:A9:0D:CA:6C:D4:AF:20
SHA1: A6:E7:CE:64:17:45:0F:B4:C7:FC:76:43:90:04:DC:A7:84:EF:33:E9
SHA256: FB:6C:59:9E:B4:58:E3:62:AD:81:42:...:09:FC:BC:FE:E7:40:53:C3:D8:14:4F
Signature algorithm name: SHA256withRSA
Version: 3
여기서주의해야 할 중요한 부분 (각 APK에 대해)은 SHA1 지문 값, 소유자 신원 값 및 유효 시작 날짜 까지 입니다.
해당 keytool
명령이 작동하지 않으면 ( -jarfile
옵션에 Java 7 필요) 다음 jarsigner
명령을 통해보다 기본적인 정보를 얻을 수 있습니다 .
jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk
불행히도 SHA1 지문은 표시되지 않지만 인증서 만료 날짜와 함께 X.509 소유자 ID가 표시됩니다. 예를 들면 다음과 같습니다.
sm 4642892 Thu Apr 17 10:57:44 CEST 2014 classes.dex (and 412 more)
X.509, CN=My App, O=My Company, L=Somewhere, C=DE
[certificate is valid from 11/11/13 12:12 to 29/03/41 12:12]
[CertPath not validated: Path does not chain with any of the trust anchors]
인증서 체인 또는 타임 스탬프에 대한 경고와 함께 "CertPath not validated"메시지는 무시해도됩니다. 이 경우에는 관련이 없습니다.
APK간에 소유자, SHA1 및 만료 값을 비교하십시오.
소유자 인 경우 / X.509 식별 값이 CN=Android Debug, O=Android, C=US
, 당신은 당신과 함께 APK에 서명 한 디버그 키 가 아닌 원래 릴리스 키
만약 SHA1의 지문 값이 원래 및 업데이트 된 APK와 다른, 당신은 않았다 없는 모두의 APK에 대해 동일한 서명 키를 사용하여
경우] 소유자 / X.509 식별 값이 다른, 또는 인증서 만료 날짜가 두 APK가 사이에 차이가, 당신은 않았다 없는 모두의 APK에 대해 동일한 서명 키를 사용하여
두 인증서간에 Owner / X.509 값이 동일하더라도 이는 지문 값과 같이 일치하는 항목이없는 경우 인증서가 동일하다는 것을 의미하지는 않습니다.
원래 키 저장소를 검색하고 백업을 확인하십시오.
두 APK에 서로 다른 인증서 정보가있는 경우 가 있는 경우 원래 키 저장소, 즉 Google Play (또는 keytool
)가 말한 첫 번째 SHA1 지문 값을 가진 파일을 찾아야 합니다.
올바른 SHA1 지문이있는 파일이있을 때까지 컴퓨터 및 모든 백업에서 찾을 수있는 모든 키 저장소 파일을 검색하십시오.
keytool -list -keystore my-release.keystore
그냥 누르면 Enter비밀번호를 묻는 메시지가 표시되면을 . SHA1 값을 빠르게 확인하려면 비밀번호를 입력 할 필요가 없습니다.
어디에서든 원래 키 저장소를 찾을 수 없습니다
원래 키 저장소를 찾을 수 없으면 절대 이 특정 앱에 대한 업데이트를 게시 할 수 .
Android는 애플리케이션 서명 페이지 에서이를 명시 적으로 언급 합니다.
경고 : 키 저장소와 개인 키를 안전하고 안전한 곳에 보관하고 안전한 백업을 유지하십시오. 앱을 Google Play에 게시 한 다음 앱에 서명 한 키를 잃어버린 경우 항상 동일한 키로 앱의 모든 버전에 서명해야하므로 앱에 대한 업데이트를 게시 할 수 없습니다.
APK의 첫 번째 릴리스 이후 모든 후속 릴리스는 정확히 동일한 키로 서명해야합니다.
원본 APK에서 원본 서명 키를 추출 할 수 있습니까?
아니요. 불가능합니다. APK에는 공개 키만 포함되며 개인 키 정보는 포함되지 않습니다.
새로운 서명 키로 마이그레이션 할 수 있습니까?
원본을 찾더라도 A 키로 APK에 서명 한 다음 A 키와 B 키로 다음 업데이트에 서명 한 다음 B 키로 만 다음 업데이트에 서명 할 수 없습니다.
여러 키로 APK (또는 JAR 파일)에 서명하는 것은 기술적으로 가능하지만 Google Play는 더 이상 여러 서명이있는 APK를 허용하지 않습니다.
이렇게하면 "APK에 여러 개의 인증서로 서명되었습니다. 하나의 인증서로만 서명하고 다시 업로드하십시오"라는 메시지가 나타납니다.
어떡해?
새로운 애플리케이션 ID (예 : "com.example.myapp"에서 "com.example.myapp2"로 변경)를 사용하여 앱을 빌드하고 Google Play에서 새로운 업체 정보를 만들어야합니다.
사람들이 기존 앱이 설치되어 있어도 새 앱을 설치할 수 있도록 코드를 변경해야 할 수도 있습니다. 예를 들어 콘텐츠 제공자가 충돌하지 않는지 확인해야합니다.
기존 설치 기반, 리뷰 등을 잃게되며 기존 고객이 기존 앱을 제거하고 새 버전을 설치하도록하는 방법을 찾아야합니다.
이 버전에 사용하는 키 저장소와 비밀번호를 안전하게 백업하십시오.