Подписать пакет приложений Android из командной строки

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

Я получил эту ошибку при загрузке пакета в Google Play:

You uploaded an APK with an invalid signature (learn more about signing). Error from apksigner:

Я пытаюсь подписать пакет приложений с помощью этой команды:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore xample.jks bundle.aab keystoreAlias

Большое тебе спасибо.


person hallz12    schedule 28.05.2018    source источник
comment
Подписание пакета Android App Bundle действительно выполняется с помощью jarsigner, и ваша команда выглядит нормально. Вы зарегистрировались в подписи приложений от Google Play в Play Console?   -  person Pierre    schedule 30.05.2018
comment
@Pierre Привет, да, я зарегистрировался в программе подписания приложений в Google Play в Play Console. На самом деле я могу загрузить пакет приложений, когда я создал пакет приложений непосредственно из Android Studio (Создать подписанный пакет приложений). Однако в моей ситуации мне приходится подписывать пакет приложений вручную с помощью команды CI. И, к сожалению, получил эту ошибку при загрузке пакета приложений в Google Play.   -  person hallz12    schedule 30.05.2018
comment
@ Пьер, ты прав, это моя ошибка. Я могу подписать свой комплект приложений, если создам неподписанный комплект приложений. В моем случае мне нужно повторно подписать пакет приложений. Я попытался разархивировать пакет, удалить папку META-INF, заархивировать обратно в файл .aab, а затем повторно подписать с помощью jarsigner. И, к сожалению, я получил ошибку в описании выше при загрузке пакета в Play Console. Есть ли у вас какие-нибудь предложения? Спасибо.   -  person hallz12    schedule 31.05.2018
comment
На ум не приходит ничего очевидного. Вы можете рассмотреть возможность обращения в службу поддержки Play Console, чтобы они могли изучить более подробно: support.google.com/googleplay/android-developer/?hl=en   -  person Pierre    schedule 31.05.2018
comment
Привет, @Pierre, спасибо за ответ. У вас есть ссылка, по которой я могу попробовать отказаться от пакета приложений для Android с использованием другого хранилища ключей? Возможно ли это сделать? Спасибо!   -  person hallz12    schedule 31.05.2018
comment
В идеале вы не захотите повторно подписывать его и создадите пакет, который изначально не подписан. Если это невозможно, то ваш текущий подход выглядит разумным, и я не совсем уверен, в чем проблема. Судя по сообщению об ошибке, Play Console по какой-то причине считает, что это APK. Имеет ли загружаемый файл расширение .aab?   -  person Pierre    schedule 31.05.2018
comment
Да, я загружаю файл .aab, который переименовываю из своего zip-файла (после удаления папки META-INF), затем увольняюсь с помощью jarsigner, затем загружаю его в Play Console. Хм, думаю, тогда я попробую изменить свой рабочий процесс, постараюсь не отказываться от пакета приложений. Спасибо за вашу помощь!   -  person hallz12    schedule 31.05.2018


Ответы (2)


Возможно, вы уже нашли способ решить свою проблему. Тем не менее, поскольку это может помочь кому-то в будущем, я просто хотел сказать, что у меня была такая же проблема, и изменение алгоритма хеширования на SHA-256 помогло мне ее решить.

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore xample.jks bundle.aab keystoreAlias

person Jason    schedule 26.01.2019

У меня была такая же ошибка для другой ситуации (или, может быть, такая же).

Я пытался переупаковать *.aab пакет с некоторыми изменениями. Сначала я использовал zip или jar для создания неподписанного архива. После этого я подписал его с помощью jarsigner tool. Я обнаружил, что *.aab не является обычным zip-файлом, используя bundletool

> java -jar bundletool.jar validate --bundle application.aab

[BT:0.12.0] Error: The App Bundle zip file contains directory zip entry 'base/' which is not allowed.
com.android.tools.build.bundletool.model.exceptions.BundleFileTypesException$DirectoryInBundleException: The App Bundle zip file contains directory zip entry 'base/' which is not allowed.
        at com.android.tools.build.bundletool.validation.BundleZipValidator.validateBundleZipEntry(BundleZipValidator.java:29)
        at com.android.tools.build.bundletool.validation.ValidatorRunner.lambda$validateBundleZipFile$1(ValidatorRunner.java:47)
        at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:406)
        at com.android.tools.build.bundletool.validation.ValidatorRunner.validateBundleZipFile(ValidatorRunner.java:46)
        at com.android.tools.build.bundletool.validation.AppBundleValidator.validateFile(AppBundleValidator.java:92)
        at com.android.tools.build.bundletool.commands.ValidateBundleCommand.execute(ValidateBundleCommand.java:78)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:92)
        at com.android.tools.build.bundletool.BundleToolMain.main(BundleToolMain.java:46)

Я использовал эту утилиту для создания *.aab, после чего подписал его с помощью jarsigner. Вам необходимо заархивировать содержимое подпапки base/* в отдельный архив.

> java -jar bundletool.jar build-bundle --modules base.zip --output application.aab

> jarsigner -keystore $KEYSTORE -storetype $STORETYPE -storepass $STOREPASS -digestalg SHA1 -sigalg SHA256withRSA application.zip $KEYALIAS

> java -jar bundletool.jar validate --bundle application.aab

App Bundle information
------------
Feature modules:
    Feature module: base
            File: assets/META-INF/AIR/application.xml
            ...
person mrchnk    schedule 15.01.2020