Я только что зарегистрировался в программе подписи приложений Google Play, которая требовала загрузки зашифрованной версии хранилища ключей выпуска и имела «необязательный» шаг для создания хранилища ключей загрузки - необязательно в кавычках, потому что я думаю, что это должен быть обязательный шаг. , но в любом случае после успешной регистрации у меня остается Загрузить сертификат, который я должен каким-то образом использовать для подписи моих будущих выпусков приложений.
Что я сделал до сих пор: я создал новое хранилище ключей из Android Studio, установил пароли хранилища и псевдонима и попытался импортировать upload_cert.der в существующий псевдоним - не удалось:
keytool -importcert -file upload_cert.der -alias upload -keystore upload-keystore.jks
keytool error: java.lang.Exception: Public keys in reply and keystore don't match
Я также попытался импортировать сертификат загрузки без указания псевдонима (или удаления существующего псевдонима и создания нового) или с другим псевдонимом:
keytool -importcert -file upload_cert.der -keystore upload-keystore.jks
... тоже не удалось: в итоге был создан новый псевдоним мой ключ, который не был защищен паролем и завершился ошибкой с сообщением:
Caused by: java.lang.RuntimeException: com.android.ide.common.signing.KeytoolException: Failed to read key upload from store "/path/to/upload-keystore.jks": trusted certificate entries are not password-protected
... естественно, я попытался установить пароль для псевдонима:
keytool -keypasswd -alias upload -keystore upload-keystore.jks
что также не удалось с сообщением:
keytool error: java.lang.Exception: Alias has no key
... а теперь у меня кончились идеи.
Тем временем я отправил вопрос / запрос в службу поддержки Google Play, чтобы обновить мой ключ загрузки, но я надеюсь, что есть решение этой ситуации (служба поддержки довольно медленно отвечает), поскольку в документации нет t каким-либо образом подразумевают, что создание хранилища ключей загрузки и загрузка зашифрованного закрытого ключа этого хранилища ключей является обязательным. Итак, либо документация расплывчата / неясна / неверна, либо есть способ использовать сгенерированный файл upload_cert.der. Есть предположения?
Редактировать:
Благодаря ответу и комментарию, предоставленным Пьер, я понял, что если вы не создадите / не предоставите ключ загрузки, следует использовать существующий исходный ключ подписи с upload_cert.der. Итак, единственное требование - вставить сертификат загрузки, запустив:
keytool -importcert -file upload_cert.der -keystore original-signing-keystore.jks
... и вы сможете продолжить публикацию своих приложений в Play Store.
Файл .der, который вы загрузили в Play Console (и который также доступен для загрузки на странице подписания приложений в Play Console), не содержит закрытого ключа, он содержит только открытый ключ, поэтому вы не сможете подписывайте что-нибудь с этим.
Только хранилище ключей, которое вы создали для создания сертификата загрузки, содержит закрытый ключ и должно использоваться для подписи ваших APK (или пакетов приложений).
Другими словами, вам не следует создавать другое хранилище ключей после регистрации в Play Signing, вы должны использовать созданное вами хранилище ключей для создания сертификата загрузки для подписи ваших будущих артефактов.
Надеюсь, это поможет.
Если вы не предоставили сертификат загрузки в Google Play при энтоллинге, Play считает ваш ключ подписи ключом загрузки, и вам следует продолжать загружать APK / пакеты, подписанные тем же исходным ключом. Если вы хотите подписать загруженные артефакты другим ключом, вам необходимо сбросить его, обратившись в службу поддержки, как вы это сделали.
Если это так, отлично, если я все еще могу использовать свой старый ключ подписи, это вариант ... Спасибо, я попробую и приму ответ, если он сработает.
Да, это помогает прояснить ситуацию, но, к сожалению, не решает мою проблему. Проблема в том, что я не создавал хранилище ключей загрузки перед регистрацией, потому что в то время это был «необязательный» шаг, и Google просто создал сам сертификат загрузки, который не связан с хранилищем ключей, которым я когда-либо владел. Надеюсь, это проясняет мой вопрос ... Я пытаюсь понять, почему это разрешено, если невозможно использовать автоматически сгенерированный upload_cert.der