Apk должен быть подписан теми же сертификатами, что и предыдущая версия



некоторое время назад я загрузил свое приложение в Google Play (когда оно называлось Android Market).



сегодня я обновил приложение, но я удалил предыдущее хранилище ключей и создал новое.

При загрузке он говорит, что APK должен быть подписан теми же сертификатами, что и предыдущая версия:




не удалось загрузить



вы загрузили APK, который подписан с другим сертификатом для ваших предыдущих APKs. Вы должны использовать то же самое сертификат.



ваши существующие APKs подписаны с сертификатом (ами) с отпечатками пальцев:

[ 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 ]




но у меня нет этого сертификата, и я не хочу удалять и повторно публиковать приложение, потому что оно активно пользователи.



Что я могу сделать, чтобы подписать мое приложение с новым сертификатом?

572   7  

7 ответов:

ничего. Прочитайте документацию: публикация обновлений на Android Market

перед загрузкой обновленного приложения убедитесь, что вы увеличили атрибуты android:versionCode и android:versionName в элементе файла манифеста. Кроме того, имя пакета должно быть одинаковым и the .apk должен быть подписан тем же закрытым ключом. Если имя пакета и сертификат подписи не совпадают с именем существующей версии, Market будет считать его новым приложением и не будет предлагать его Пользователям в качестве обновления.

вы подписали с ключом отладки по ошибке?

Google Play не позволяет публиковать приложение, подписанное с вашим хранилищем ключей отладки. Если вы попытаетесь загрузить такой APK, Google Play потерпит неудачу с сообщением " вы загрузили APK, который был подписан в режиме отладки. Вам нужно подписать свой APK в режиме выпуска."

однако, если вы попытаетесь загрузить обновление который подписан с хранилищем ключей отладки, вы будете не видите это сообщение; Google Play отобразит сообщение, показанное в вопросе, ссылаясь на отпечатки пальцев SHA1.

Итак, во-первых, проверьте, подписали ли вы приложение с вашим ключом отладки по ошибке.


Как проверить, какие ключи подписи были использованы?

соберите информацию из APK

вы можете проверить, какие сертификаты были подписаны оригинальным APK и update APK с помощью этих команд, используя Java 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 -verify -verbose:summary -certs original.apk
jarsigner -verify -verbose:summary -certs update.apk

к сожалению, это не показывает отпечаток пальца SHA1, но показывает личность владельца X. 509 вместе с датами истечения срока действия сертификата. Например:

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", а также предупреждения о цепочках сертификатов или метках времени; в этом случае они не актуальны.

сравните значения владельца, SHA1 и Expiry между APKs

  • если владелец/ X. 509 значение идентификатора CN=Android Debug, O=Android, C=US, то вы подписали APK с вашим ключ debug, не оригинальный ключ релиз

  • если SHA1 значение отпечатка пальца отличается между оригиналом и АПК обновления, то вы сделали не используйте один и тот же ключ подписи для обоих APKs

  • если владелец/ X. 509 значения идентификаторов различны, или даты истечения срока действия сертификата отличаются между двумя APKs, то вы сделали не используйте один и тот же ключ подписи для обоих APKs

обратите внимание, что даже если значения Owner/X. 509 идентичны между двумя сертификатами, это не означает, что сертификаты идентичны - если что - то еще не совпадает - например, значения отпечатков пальцев-то сертификаты разные.


Поиск оригинальное хранилище ключей, проверьте резервные копии

если два APKs имеют различную информацию о сертификате, то вы должны найдите исходное хранилище ключей, т. е. файл с первым значением отпечатка пальца SHA1, который Google Play (или keytool) сказали Вы.

поиск по всем файлам хранилища ключей, которые вы можете найти на вашем компьютере, и в любых резервных копиях у вас есть, пока у вас есть один с правильным отпечатком пальца SHA1:

keytool -list -keystore my-release.keystore

просто пресс Enter если вам будет предложено ввести пароль - вам не обязательно вводить его, если вы просто хотите быстро проверить значение SHA1.


я нигде не могу найти оригинальное хранилище ключей

если вы не можете найти оригинальный ключей, вы никогда иметь возможность публиковать любые обновления для этого конкретного приложения.

Android упоминает об этом явно на Подписание Вашего Заявления страницы:

предупреждение: храните хранилище ключей и закрытый ключ в надежном и безопасном месте и убедитесь, что у вас есть безопасные резервные копии. если вы опубликуете приложение в Google Play, а затем потеряете ключ, с помощью которого вы подписали свое приложение, вы не сможете публиковать какие-либо обновления своего приложения, поскольку вы всегда должны подписывать все версии своего приложения одним и тем же ключом.

после первого выпуска APK, все последующие релизы должны быть подписаны с точно таким же ключом.


могу ли я извлечь оригинальный ключ подписи из оригинального APK?

нет. Это невозможно. APK содержит только общедоступную информацию, а не информацию о вашем закрытом ключе.


можно ли перейти на новый ключ подписи?

нет. Даже если вы найдете оригинал, вы не можете подписать APK с помощью ключа A, а затем подписать следующее обновление с помощью обоих ключей A и B, а затем подписать следующее обновление после этого с помощью только ключ Б.

подписание APK (или любого файла JAR) с несколькими ключами является технически возможно, но Google Play больше не принимает APKs с несколькими подписями.

попытка сделать это приведет к сообщению "ваш APK был подписан с несколькими сертификатами. Пожалуйста, подпишите его только одним сертификатом и загрузите его снова."


что я могу сделать?

вам нужно будет создать свое приложение с новым идентификатором приложения (например, изменить с " com.образец.приложение" в "ком.образец.myapp2") и создать совершенно новый список на Google Play.

возможно, Вам также придется изменить свой код, чтобы люди могли установить новое приложение, даже если у них установлено старое приложение, например, вам нужно убедиться, что у вас нет конфликтующих поставщиков контента.

вы потеряете существующую базу установки, отзывы и т. д., и придется найти способ, чтобы получить ваши существующие клиенты, чтобы удалить старое приложение и установите новую версию.

опять же, убедитесь, что у вас есть безопасные резервные копии хранилища ключей и паролей, которые вы используете для этой версии.

ничего - Google ясно говорит, что приложение идентифицируется ключами, используемыми для его подписи. Следовательно, если вы потеряли ключи, вам нужно создать новое приложение.

сегодня я столкнулся с той же проблемой, к сожалению, у меня было два псевдонима в моем файле хранилища ключей.enter image description here

здесь я получу ответ на этот вопрос . После поиска слишком долго, наконец, я получаю, чтобы взломать ключ и пароль для этого . Я забыл свой ключ и псевдоним также файл jks, но, к счастью, я знаю кучу пароля, что я положил в него . но найти правильные комбинации для этого было самой трудной задачей для меня .

решение - Скачать это-Keytool iui версия 2.4.1 плагин enter image description here

окно появится теперь он показывает имя псевдонима ..Если вы файл jks является правильным .. щелкните правой кнопкой мыши на псевдониме и нажмите "Просмотреть цепочку сертификатов ".. он покажет ключ SHA1 .. сопоставьте этот ключ с ключом tha, который вы получаете, когда загружаете apk в Google app store ...

если он соответствует, то вы с правильным файлом jks и псевдонимом ..

теперь и у меня есть куча паролей к матчу .. enter image description here

сейчас пойдет на это выставлять проверили поставить тот же путь следующих .. и пароль (среди пароля у вас есть ) положить любой путь в "Файл сертификата"

Если на экране отображается ошибка, то пароль не совпадает .. если он не показывает никаких ошибок, то это означает, что вы с правильным файлом jks . правильный псевдоним и пароль() теперь с этим вы можете загрузить свой apk в play store:)

Если у вас есть предыдущий файл apk с вами(резервное копирование), то используйте jarSigner для извлечения сертификата из этого apk, а затем используйте этот ключ или используйте keytool для клонирования этого сертификата, может быть, это поможет... Полезные ссылки jarsigner docs и keytool docs.

недавно я столкнулся с этой проблемой, попробовав разные способы входа, такие как enable V1 или V2, войдя в систему, изменив имя псевдонима и последний узнал, что я использую неправильный файл хранилища ключей

Comments

    Ничего не найдено.