Apk musi być podpisany tymi samymi certyfikatami, co poprzednia wersja

Wgrałem swoją aplikację do Google Play (kiedyś nazywała się Android Market) jakiś czas temu.

Dzisiaj zaktualizowałem aplikację, ale usunąłem poprzedni keystore i utworzyłem nowy.
Podczas przesyłania mówi, że APK musi być podpisany tymi samymi certyfikatami, co poprzednia wersja:

Upload nie powiodło się

Przesłałeś plik APK, który jest podpisany innym certyfikatem niż poprzednie pliki APK. Musisz użyć tego samego certyfikatu.

Twój istniejące Apk są podpisane certyfikatem (- ami) z odciskiem palca (- ami):
[SHA1: 89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96:4F:84:DD:BA: 33]
a certyfikat(y) użyty do podpisania APK, który przesłałeś, ma odcisk palca(ów):
[SHA1: 20:26:F4:C1:DF:0F:2B:D9:46:03:FF:AB:07:B1:28:7b:9C:75:44:CC]

Ale nie mam tego certyfikatu i nie chcę usuwać i ponownie publikować aplikacji, ponieważ ma aktywnych użytkowników.

Co mogę zrobić, aby podpisać moją aplikację nowym certyfikat?

Author: Christopher Orr, 2011-01-30

7 answers

Nic. Przeczytaj dokumentację: publikowanie aktualizacji na Android Market

Przed przesłaniem zaktualizowanej aplikacji upewnij się, że zwiększyłeś atrybuty android:versionCode i android:versionName w elemencie pliku manifestu. Ponadto Nazwa pakietu musi być taka sama i the .apk musi być podpisany tym samym kluczem prywatnym. Jeśli Nazwa pakietu i certyfikat podpisywania nie pasują do istniejącej wersji, Rynek uzna ją za nową aplikacji i nie zaoferuje jej użytkownikom jako aktualizacji.

 156
Author: Rubycon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 13:51:04

Czy przez pomyłkę podpisałeś się kluczem debugowania?

[13]}Google Play nie zezwala na publikowanie aplikacji podpisanej za pomocą klucza debugowania. Jeśli spróbujesz przesłać taki APK, Google Play nie powiedzie się z Komunikatem "przesłałeś APK, który został podpisany w trybie debugowania. Musisz podpisać swój APK w trybie wydania."

Jeśli jednak spróbujesz przesłać aktualizację, która jest podpisana keystore debug, zobaczysz Nie. wiadomość pokazana w pytaniu, odnosząca się do odcisków palców SHA1.

Więc najpierw sprawdź, czy aplikacja została omyłkowo podpisana kluczem debugowania.


Jak sprawdzić, które klucze podpisu zostały użyte?

Zbierz informacje z APK

Możesz sprawdzić, które certyfikaty oryginalny APK i APK aktualizacji zostały podpisane za pomocą tych poleceń, przy użyciu Java keytool:

keytool -list -printcert -jarfile original.apk
keytool -list -printcert -jarfile update.apk

To pokazuje szczegółowe informacje o tym, jak APK został podpisany, na przykład:

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

Ważnymi częściami, na które należy zwrócić uwagę - dla każdego APK - są SHA1 wartość odcisku palca, właściciel wartość tożsamości i Ważne od/do daty.


Jeśli to polecenie keytool nie działa (opcja -jarfile wymaga Javy 7), możesz uzyskać więcej podstawowych informacji za pomocą polecenia jarsigner:

jarsigner -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk

To niestety nie pokazuje odcisku palca SHA1, ale pokazuje tożsamość właściciela X. 509, wraz z daty ważności certyfikatu. Na przykład:

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]

Możesz zignorować dowolny komunikat "certpath not validated", wraz z ostrzeżeniami o łańcuchach certyfikatów lub znacznikach czasu; w tym przypadku nie są one istotne.

Porównaj wartości Owner, SHA1 i Expiry pomiędzy APK

  • Jeśli właściciel/X. 509 wartość tożsamości to CN=Android Debug, O=Android, C=US, następnie podpisałeś plik APK za pomocą klucza debugowania , a nie oryginalnego wydania klucz

  • Jeśli wartość odcisku palca SHA1 różni się między oryginalnymi i aktualizowanymi apkami, to Nie używasz tego samego klucza podpisywania dla obu Apków

  • Jeśli właściciel/X. 509 wartości tożsamości są różne, lub daty ważności certyfikatu różnią się między dwoma APK, to nie nie używać tego samego klucza podpisywania dla obu APK

Zauważ, że nawet jeśli wartości Owner / X. 509 są identyczne pomiędzy tymi dwoma certyfikatami nie oznacza to, że certyfikaty są identyczne - jeśli coś innego nie pasuje - np. wartości odcisków palców - wtedy certyfikaty są różne.


Wyszukaj oryginalny keystore, sprawdź kopie zapasowe

Jeśli dwa APK mają różne informacje o certyfikatach, to musisz znaleźć oryginalny keystore, tj. Plik z pierwszą wartością odcisku palca SHA1, którą powiedział Ci Google Play (lub keytool).

Przeszukaj wszystkie pliki keystore można znaleźć na komputerze i we wszystkich kopiach zapasowych, dopóki nie znajdziesz tego z prawidłowym odciskiem palca SHA1: [14]}

keytool -list -keystore my-release.keystore

Po prostu naciśnij Enter Jeśli pojawi się monit o hasło - nie musisz go wprowadzać, jeśli chcesz szybko sprawdzić wartość SHA1.


Nigdzie nie mogę znaleźć oryginalnego keystore

Jeśli nie możesz znaleźć oryginalnego klucza, nigdy nie będziesz w stanie opublikować żadnych aktualizacji konkretna aplikacja.

Android wspomina o tym wyraźnie na stronie Podpisywanie aplikacji:

Uwaga: przechowuj keystore i klucz prywatny w bezpiecznym miejscu i upewnij się, że masz ich bezpieczne kopie zapasowe. jeśli opublikujesz aplikację w Google Play, a następnie stracisz klucz, za pomocą którego podpisałeś aplikację, nie będziesz mógł publikować żadnych aktualizacji aplikacji, ponieważ zawsze musisz podpisywać wszystkie wersje aplikacji tym samym klucz.

Po pierwszym wydaniu pliku APK wszystkie kolejne wydania muszą być podpisane dokładnie tym samym kluczem.


Czy Mogę wyodrębnić oryginalny klucz podpisu z oryginalnego pliku APK?

Nie. To niemożliwe. APK zawiera tylko informacje publiczne, a nie informacje o kluczach prywatnych.


Czy mogę przenieść do nowego klucza podpisywania?

Nie. Nawet jeśli znajdziesz oryginał, nie możesz podpisać APK za pomocą klucza A, a następnie podpisz Następna aktualizacja za pomocą obu klawiszy A i B, a następnie podpisz następną aktualizację za pomocą tylko klucza B.

Podpisanie pliku APK (lub dowolnego pliku JAR) z wieloma kluczami jest technicznie możliwe, ale Google Play nie akceptuje już plików APK z wieloma podpisami.

Próba zrobienia tego spowoduje komunikat "Twój APK został podpisany z wieloma certyfikatami. Podpisz go tylko jednym certyfikatem i prześlij ponownie."


Co mogę zrobić?

Będziesz musiał Zbuduj swoją aplikację z nowym ID aplikacji (np. Zmień Z " com.przykład.myapp " do " com.przykład.myapp2") i utworzyć zupełnie nową ofertę w Google Play.

Być może będziesz musiał również zmienić kod, aby ludzie mogli zainstalować nową aplikację, nawet jeśli mają zainstalowaną starą aplikację, np. musisz upewnić się, że nie masz sprzecznych dostawców treści.

Stracisz swoją istniejącą bazę instalacyjną, recenzje itp. i będzie musiał znaleźć sposób, aby uzyskać dotychczasowych klientów aby odinstalować starą aplikację i zainstalować nową wersję.

Ponownie upewnij się, że masz bezpieczne kopie zapasowe klucza i hasła używanego w tej wersji.

 88
Author: Christopher Orr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-24 20:18:04

Nic - Google mówi wyraźnie, że aplikacja jest identyfikowana przez Klucze używane do jej podpisania. W związku z tym, jeśli zgubiłeś klucze, musisz utworzyć nową aplikację.

 7
Author: Eugene Mayevski 'Allied Bits,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-30 13:51:22

Dzisiaj miałem do czynienia z tym samym problemem, niestety, miałem dwa aliasy w pliku keystore.Tutaj wpisz opis obrazka

 4
Author: Krishan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-26 17:53:06

Tutaj dostaję odpowiedź na to pytanie . Po zbyt długim poszukiwaniu w końcu mogę złamać klucz i hasło do tego . Zapomniałem klucza i aliasu również Pliku jks, ale na szczęście znam kilka haseł, co włożyłem w nim . ale znalezienie odpowiednich kombinacji było dla mnie najtrudniejszym zadaniem .

Rozwiązanie - Pobierz to-Keytool IUI Wersja 2.4.1 plugin Tutaj wpisz opis obrazka

Pojawi się okno z nazwą aliasu ..jeśli plik jks jest poprawny .. kliknij prawym przyciskiem myszy na alias i naciśnij "wyświetl łańcuch certyfikatów".. pokaże klucz SHA1 .. dopasuj ten klucz do klucza, który otrzymujesz podczas przesyłania apk do google App store ...

Jeśli pasuje, to masz odpowiedni plik i alias jks ..

Na szczęście mam kilka haseł do dopasowania .. Tutaj wpisz opis obrazka

Teraz idź do tego scrren put the same JKS path .. i hasło (wśród hasła, które posiadasz ) umieść dowolną ścieżkę w "pliku certyfikatu"

Jeśli ekran pokazuje błąd, a następnie hasło nie pasuje .. jeśli nie pokazuje żadnego błędu, oznacza to, że masz poprawny plik jks . popraw alias i hasło() teraz możesz przesłać swój apk do Sklepu play:)

 2
Author: Arun Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 13:29:59

Jeśli masz poprzedni plik apk (kopia zapasowa), użyj jarsignera, aby wyodrębnić certyfikat z tego apk, a następnie użyj tego klucza lub użyj keytool, aby sklonować ten certyfikat, może to pomóc... Pomocne linki to jarsigner docs i keytool docs .

 1
Author: om252345,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-25 12:19:51

Ostatnio napotkałem ten problem, po wypróbowaniu różnych sposobów logowania, takich jak enable V1 lub V2, zalogowany przez zmianę nazwy aliasu i ostatnio dowiedziałem się, że używam niewłaściwego pliku przechowującego klucze

 0
Author: user2837615,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-04 05:30:59