Это документация 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 с помощью хранилища ключей. Выглядит достаточно прямо, но не работает.