apk는 이전 버전과 동일한 인증서로 서명되어야 합니다.
저는 얼마 전에 구글 플레이(안드로이드 마켓이라고 불렸던 시절)에 앱을 올렸습니다.
오늘 앱을 업데이트했는데, 이전 키스토어를 삭제하고 새로 만들었습니다.
업로드 시 APK는 이전 버전과 동일한 인증서로 서명되어야 한다고 표시됩니다.
업로드 실패
다른 인증서로 서명된 APK를 이전 APK에 업로드했습니다.동일한 인증서를 사용해야 합니다.
기존 APK가 지문이 있는 인증서로 서명되었습니다.
SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96:4F:84:DD:BA:33 ]
업로드한 APK에 서명하는 데 사용된 인증서에 지문이 있습니다.
[SHA1: 20:26:F4:C1:DF:0F:2B:D9:46:03:FF:AB:07:B1:28:7B:9C:75:44:CC]
그러나 이 인증서가 없으며 응용프로그램에 활성 사용자가 있기 때문에 삭제하고 다시 게시하지 않습니다.
새 인증서로 앱에 서명하려면 어떻게 해야 합니까?
아무 것도 없어요.설명서 읽기: Android Market에 대한 업데이트 게시
업데이트된 응용 프로그램을 업로드하기 전에 매니페스트 파일의 요소에서 Android:versionCode 및 Android:versionName 특성이 증가했는지 확인합니다.또한 패키지 이름은 동일해야 하며 .apk는 동일한 개인 키로 서명되어야 합니다. 패키지 이름과 서명 인증서가 기존 버전의 이름과 일치하지 않으면 마켓은 이를 새 응용 프로그램으로 간주하고 사용자에게 업데이트로 제공하지 않습니다.
당신은 실수로 디버그 키로 서명했나요?
Google Play에서는 디버그 키 저장소로 서명된 앱을 게시할 수 없습니다.이러한 APK를 업로드하려고 하면 Google Play가 실패하고 "디버깅 모드에서 서명된 APK를 업로드했습니다."라는 메시지가 표시됩니다.릴리스 모드에서 APK에 서명해야 합니다."
그러나 디버그 키 저장소에 서명된 업데이트를 업로드하려고 하면 이 메시지가 표시되지 않습니다. Google Play는 SHA1 지문을 참조하여 질문에 표시된 메시지를 표시합니다.
따라서 먼저 실수로 디버그 키로 앱에 서명했는지 확인합니다.
어떤 서명 키가 사용되었는지 어떻게 확인합니까?
APK에서 정보 수집
Java " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "keytool
:
keytool -printcert -jarfile original.apk
keytool -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 지문 값, 소유자 ID 값 및 유효 시작/종료 날짜입니다.
에 그 에약keytool
-jarfile
합니다), "Java 7" 또는 "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 및 만료 값 비교
Owner/X.509 ID 값이 다음인 경우 원래 릴리스 키가 아닌 디버그 키로 APK에 서명했습니다.
SHA1 지문 값이 원래 APK와 업데이트 APK 간에 다를 경우 두 APK에 대해 동일한 서명 키를 사용하지 않았습니다.
Owner/X.509 ID 값이 다르거나 두 APK 간에 인증서 만료 날짜가 다를 경우 두 APK에 대해 동일한 서명 키를 사용하지 않았습니다.
두 인증서 간에 Owner/X.509 값이 동일하더라도 지문 값과 같이 일치하지 않는 인증서가 있으면 인증서가 다르다는 것을 의미하지는 않습니다.
원래 키 저장소 검색, 백업 확인
두 APK의 인증서 정보가 서로 다른 경우 원래 키 저장소, 즉 Google이 재생하는 첫 번째 SHA1 지문 값이 있는 파일을 찾아야 합니다.keytool
가 말했습니다.
올바른 SHA1 지문이 있는 키 저장소 파일을 찾을 때까지 컴퓨터에서 찾을 수 있는 모든 키 저장소 파일을 검색합니다.
keytool -list -keystore my-release.keystore
암호를 입력하라는 메시지가 나타나면 를 누릅니다. 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에 새 목록을 만들어야 합니다.
사람들이 이전 앱을 설치한 경우에도 새 앱을 설치할 수 있도록 코드를 변경해야 할 수도 있습니다. 예를 들어, 충돌하는 콘텐츠 공급자가 없는지 확인해야 합니다.
기존 설치 기반, 리뷰 등을 잃게 되며 기존 고객이 이전 앱을 제거하고 새 버전을 설치하도록 하는 방법을 찾아야 합니다.
다시 한 번 이 버전에 사용하는 키 저장소 및 암호를 안전하게 백업해야 합니다.
아무것도 - Google은 애플리케이션이 서명에 사용된 키로 식별된다고 분명히 말합니다.따라서 키를 분실한 경우 새 응용 프로그램을 만들어야 합니다.
저는 갑자기 이런 일이 일어났습니다.저는 정말 제가 아무것도 바꾸지 않았다고 생각합니다.
하만지,Build => Clean Project
고쳤습니다.
오늘 저는 같은 문제에 직면했습니다. 불행하게도 제 키스토어 파일에 두 개의 별칭이 있습니다.
여기서 나는 그 질문에 대한 답을 얻습니다. 너무 오랫동안 검색한 후 마침내 나는 이것에 대한 키와 비밀번호를 해독할 수 있습니다. 나는 내 열쇠와 별명 또한 jks 파일을 잊어버렸지만 다행히도 내가 그것에 입력한 비밀번호 뭉치를 알고 있습니다. 하지만 그것에 대한 정확한 조합을 찾는 것은 나에게 어려운 일이었습니다.
솔루션 - 다운로드 - Keytool IUI 버전 2.4.1 플러그인
이제 창이 팝업됩니다. ..jks 파일이 올바르면 별칭 이름이 표시됩니다.별칭을 마우스 오른쪽 버튼으로 클릭하고 "인증서 체인 보기"를 누릅니다.그것은 SHA1 키를 보여줄 것입니다. 당신이 구글 앱 스토어에서 apk를 업로드하는 동안 얻은 키와 이 키를 일치시킵니다.
일치한다면 당신은 올바른 jks 파일과 별칭을 가지고 있습니다.
이제 운이 좋게도 나는 일치하는 비밀번호를 많이 가지고 있습니다.
이제 이 화면으로 이동하여 동일한 jks 경로를 입력합니다. 그리고 암호(사용자가 가지고 있는 암호 중)는 "인증서 파일"에 아무 경로나 입력합니다.
화면에 오류가 표시되면 암호가 일치하지 않습니다.만약 그것이 어떠한 오류도 보이지 않는다면, 그것은 당신이 올바른 jks 파일과 올바른 별칭과 비밀번호를 가지고 있다는 것을 의미합니다. 이제 당신은 플레이 스토어에서 당신의 apk를 업로드할 수 있습니다 :)
키스토어를 Google Play에 업로드하지 않고도 키스토어에 액세스할 수 있는 키스토어 탐색기(https://keystore-explorer.org/) 를 적극 추천합니다.이렇게 하면 암호를 잘못 입력했는지 문제를 해결할 수 있습니다.
이전 apk 파일이 있는 경우(백업) jarSigner를 사용하여 해당 apk에서 인증서를 추출한 다음 키를 사용하거나 키 도구를 사용하여 인증서를 복제하면...유용한 링크는 jarsigner 문서 및 주요 도구 문서입니다.
다음 항목을 확인하십시오.android/app/build.gradle
을 신청합니다.
android{
...
buildTypes {
release {
// signingConfig signingConfigs.debug
signingConfig signingConfigs.release
}
}
...
}
앱 번들을 출시하기 전에, 그것은 그것을 가지고 있어야 합니다.signingConfig signingConfigs.release
▁enabled▁instead▁line다▁this니습있 대신 이 행을 사용할 수 있습니다.signingConfig signingConfigs.debug
줄 선이
제가 이런 어리석은 실수를 저질렀습니다.
업데이트된 앱을 다른 기기에서 테스트하고 있었습니다.debug sign in config
업데이트를 게시할 준비가 되었을 때 구성을 변경하지 않고 디버그 구성이 있는 번들을 릴리스했습니다.
약 한 시간 동안 머리를 긁고 나서 저는 이것이 있다는 것을 깨달았습니다.debug config
그때마다 나는 그것을 로 바꿨습니다.release mode
이제 문제가 해결되었습니다.
최근 V1 또는 V2 활성화, 별칭 이름 변경을 통해 로그인한 후 잘못된 키 저장소 파일을 사용하고 있다는 것을 알게 된 경우와 같은 다양한 로그인 방법을 시도한 후 이 문제가 발생했습니다.
새 기능 Google Play 앱 서명을 사용하여 새 키 파일을 생성할 수 있습니다.
2017년 5월 이후 구글 플레이 스토어는 플레이 스토어에 새로운 기능을 추가하고 안드로이드 개발자들에게 좋은 소식입니다.이 기능을 통해 개발자는 KeyStore 파일을 잃어버린 앱이나 앱을 업데이트할 수 있습니다.당신은 플레이 스토어 콘솔에서 구글 플레이 앱 서명을 활성화해야 합니다.
https://support.google.com/googleplay/android-developer/answer/7384423?hl=en
http://www.geekcodehub.com/2018/05/23/keystore-lost-in-android/
제 [어리석은] 실수는 앱 릴리스 대신 app-debug.apk 파일을 사용한 것입니다.pk 파일서명된 APK를 생성할 때 "Build Variant" 프레임에서 "release"를 선택해야 합니다.앱 릴리스.apk 파일은 프로젝트 루트의 "app\release" 폴더 아래에 있어야 합니다.
제게 도움이 된 것: 이전에 .aab 파일을 업로드한 적이 있다는 것을 깨닫고 이제 .apk 파일을 업로드하려고 했습니다.빌드 설정에서 빌드 앱 번들(Google Play)을 확인해야 했습니다.
Floating 개발자용:key.properties 파일을 다시 확인해야 합니다.
- 안드로이드/키 속성
Select Sign-in(로그인 선택) 키(AppBundle 텍스트 상단)를 클릭하고 Release signed by Google(구글로 서명된 릴리스)을 선택합니다.
언급URL : https://stackoverflow.com/questions/4843212/the-apk-must-be-signed-with-the-same-certificates-as-the-previous-version
'it-source' 카테고리의 다른 글
원격에서 다른 원격으로 분기를 Git push branch? (0) | 2023.08.09 |
---|---|
오류: 기본 엔진이 지정되지 않았으며 확장 기능이 제공되지 않았습니다. (0) | 2023.08.09 |
VS Code에서 통합 터미널을 별도의 창에서 열 수 있습니까? (0) | 2023.08.09 |
java.lang을 가져오는 중입니다.REST Assured를 사용하여 테스트할 때 AbstractMethodError가 발생함 (0) | 2023.08.09 |
두 json 개체를 jquery와 병합 (0) | 2023.08.09 |