Как решить загрузку хранилища ключей: неверный формат хранилища ключей?

Я получаю ключ к своему приложению три месяца назад. Теперь я форматирую свой компьютер, и когда я подписываю свое приложение своим ключом выпуска, я получаю сообщение об ошибке: java.lang.RunTimeException: загрузка хранилища ключей: недопустимый формат хранилища ключей.

Как мне решить эту ошибку?

Команда была такой: jarsigner -verbose -keystore "D:\releasekey.keystore" "D:\myApp.apk" ключ выпуска

Я использую старое хранилище ключей (первое), но получаю сообщение об ошибке.

Я попробовал и получил это:

java.io.IOException: java.io.IOException: invalid keystore format 
at sun.security.provider.javaKeyStore.engineLoad(JavaKeyStore.java:650) 
at sun.security.provider.javaKeyStore$JKS.engineLoad(JavaKeyStore.java:55) 
at java.security.KeyStrore.load(KeyStore.java:1214) 
at sun.security.tools.KeyTool.doCommands(KeyTool.java:789) 
at sun.security.tools.KeyTool.run(KeyTool.java:340) 
at sun.security.tools.KeyTool.main(KeyTool.java:333) 

введите здесь описание изображения


person weldsonandrade    schedule 06.09.2012    source источник


Ответы (1)


В хранилище ключей хранится закрытый ключ шифрования, используемый для подписи приложения — повторный запуск команды сгенерирует совершенно другой ключ (пароль просто защищает файл, содержащий его — он не имеет прямого отношения к самому ключу шифрования) — вы НЕ можете восстановить /rebuild, если вы потеряли файл хранилища ключей.

Если вы его потеряете, вашим пользователям придется полностью удалить существующее приложение, прежде чем они смогут установить вашу новую версию, и они потеряют все данные, сохраненные в приложении, при его удалении (ни в коем случае, это функция безопасности в Android)

Что еще хуже, магазин Android Play не позволит вам загрузить новую версию, потому что они не закодированы с использованием того же ключа, что и старая версия. Вам нужно будет выпустить новую версию под другим именем пакета. Это означает ваши существующие пользователи не могут даже автоматически обновиться (они должны найти новую версию) - и вы даже не можете сказать им, что им нужно обновиться (вы не можете загрузить новую версию старого приложения...)

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

Удачи!

person msEmmaMays    schedule 06.09.2012
comment
привет, я восстанавливаю свой старый ключ выпуска, но я не могу использовать jarsiner, потому что упоминается ошибка (загрузка хранилища ключей) - person weldsonandrade; 06.09.2012
comment
О, тогда, может быть, это: искаженные trust.certs stackoverflow.com /вопросы/126798/ - person msEmmaMays; 06.09.2012
comment
Привет, я не нахожу этот архив, я был в C:\Users\weldson\AppData\LocalLow\Sun\Java\Deployment\security и там только два архива (baseline.timestamp, baseline.versions). знак равно - person weldsonandrade; 06.09.2012
comment
Его может не быть в ваших личных AppData — это может быть в основных каталогах установки программы — найдите на всем компьютере файл с именем «trusted.certs» — убедитесь, что он находится в папке /Java/ — и переименуйте его, а не удаляйте. (на всякий случай, если вам нужно положить его обратно) - person msEmmaMays; 06.09.2012
comment
Я действительно искал во всем компьютере и ничего. У меня нет этого архива. - person weldsonandrade; 06.09.2012
comment
вы можете попробовать это, чтобы просмотреть содержимое и посмотреть, может ли он прочитать файл - keytool -list -v -keystore D:\releasekey.keystore - person msEmmaMays; 06.09.2012
comment
Я попробовал и получил это: java.io.IOException: java.io.IOException: недопустимый формат ключей в sun.security.provider.javaKeyStore.engineLoad(JavaKeyStore.java:650) в sun.security.provider.javaKeyStore$JKS.engineLoad (JavaKeyStore.java:55) в java.security.Keystrore.load(KeyStore.java:1214) в sun.security.tools.KeyTool.doComands‹KeyTool.java:789) в sun.security.tools.KeyTool.run( KeyTool.java:340) в sun.security.tools.KeyTool.main(KeyTool.java:333) - person weldsonandrade; 06.09.2012
comment
отредактируйте свой вопрос, чтобы добавить информацию - комментарии отстой для такого рода вещей - person msEmmaMays; 06.09.2012
comment
строка 650 здесь - docjar.com/html /api/sun/security/provider/ Он проверяет второй байт в файле, чтобы увидеть, является ли он «0x01» или «0x02». Если вы откроете файл хранилища ключей в шестнадцатеричном редакторе и проверите этот второй байт, что делает это сказать? Похоже, ваш файл поврежден - person msEmmaMays; 06.09.2012
comment
давайте продолжим это обсуждение в чате - person weldsonandrade; 06.09.2012
comment
Извините, мне нужно идти спать, я неправильно прочитал код, это должен быть первый байт (а не второй) - на вашем скриншоте это 0x8b - поэтому он не работает. Похоже, файл поврежден. Единственная другая возможность - вы используете более старую версию java, чем у вас была до переформатирования, но было только две версии, так что это маловероятно) - person msEmmaMays; 06.09.2012
comment
Я думаю, что файл поврежден =/ - person weldsonandrade; 06.09.2012
comment
Версия Java более новая. Приобрел другую программу для восстановления данных, молюсь на работу. - person weldsonandrade; 06.09.2012