Android Sign APK с загрузкой сертификата (как обеспечить правильный отпечаток пальца) - PullRequest
0 голосов
/ 25 апреля 2018

Это документация Google по подписанию APK: https://developer.android.com/studio/publish/app-signing.html

Документация кажется довольно простой. Я был в состоянии собрать воедино процесс из различных других страниц и из потоков переполнения стека. Но после того, как я подписал APK, отпечаток сертификата SHA-1 в APK неправильный, что означает, что я не подписал APK с правильным сертификатом.

Вы загрузили APK, который не подписан сертификатом загрузки. Вы должны использовать тот же сертификат. Сертификат загрузки имеет отпечатков пальцев:

[SHA1: отпечаток пальца]

и сертификат, используемый для подписи APK, который вы загрузили отпечатков пальцев:

[SHA1: отпечаток пальца]

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

Вот что я сделал:

  • Зарегистрируйтесь в Google Developer и создайте приложение в консоли
  • Нажал на подпись приложения и загрузил сертификат загрузки (upload_cert.der)
  • Затем я использовал keytool для импорта сертификата и создания хранилища ключей: "C: \ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -importcert -file upload_cert.der -keystore [appname] .jks - псевдоним "[appname]". Это удалось в том, что он создал файл хранилища ключей. Но мое внутреннее чувство таково, что именно здесь процесс пошел не так. Я не думаю, что сертификат был импортирован.
  • Я проверил хранилище ключей с помощью этой команды: "C: \ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -list -keystore [appname] .jks и выведенный отпечаток полностью отличается от моего загрузить сертификат по отпечатку пальца .
  • Я также попробовал: "C: \ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -importcert -file upload_cert.der -genkey -v -keystore [appname] .jks -keyalg RSA -keysize 2048 -validity 10000 -alias [appname]
  • Это удалось и вытолкнул файл хранилища ключей .jks
  • Я сгенерировал неподписанный APK (архив)
  • В Visual Studio я нажал «Распространить ...» -> Ad Hoc
  • Импортировал мой файл хранилища ключей и нажал «Сохранить как», который, казалось, подписывал мой APK
  • Затем я загрузил его в магазин, но магазин отклонил его, сказав, что у него неправильный отпечаток пальца.
  • Итак, я тоже использовал ключ для проверки отпечатка пальца в файле RSA. "C: \ Program Files \ Java \ jdk1.8.0_161 \ bin \ keytool" -printcert -file [имя приложения] .RSA. Отпечаток пальца был неверным.

Какие шаги я пропускаю?

Примечание: в документе Google говорится, что это процесс для ручной подписи:

https://developer.android.com/studio/publish/app-signing.html#sign-manually

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -действительность 10000 -псевдоним my-alias

знак apksigner --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-align.apk

Но эти шаги никак не используют сертификат загрузки ...

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

Это имеет полный смысл. По сути, все, что я пытаюсь сделать, это подписать APK с помощью моего ключа загрузки из Google. У меня есть ключ загрузки. Но шаг, который Google не задокументировал, заключается в том, как превратить ключ загрузки в хранилище ключей, чтобы я мог подписать APK с помощью хранилища ключей. Выглядит достаточно прямо, но не работает.

1 Ответ

0 голосов
/ 25 апреля 2018

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

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

Это невозможно.Согласно Google Управление ключами подписи вашего приложения :

Сертификат: сертификат содержит открытый ключ, а также некоторую дополнительную информацию о том, кто владеет ключом.

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

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

.к следующим руководствам по публикации приложения в xamarin: Публикация в Google Play Подписание пакета приложений для Android Подписание вручную APK

...