Когда я подписываю apk, я получаю "jarsigner: невозможно подписать jar: java.util.zip.ZipException: недопустимый размер записи в сжатом виде (ожидается 463, но получил 465 байт)" это сообщение об ошибке. Размер apk составляет почти 1 МБ. Когда я уменьшаю размер до 500 КБ, подписывая успех. Почему это так?.. Любая идея?
Jarsigner: невозможно подписать jar: java.util.zip.ZipException: недействительный размер записи сжат (ожидается 463, но получил 465 байт)
Ответ 1
Вы пытаетесь подписать уже подписанный .apk
.
Вам нужно экспортировать файл unsigned .apk
, а затем подписать его с помощью jarsigner
.
Ответ 2
Вы определенно можете подписывать уже подписанный apk несколько раз, используя разные ключи:
Обратите внимание, что вы можете подписывать APK несколько раз с помощью разных клавиш.
например. Я выполнил подписание Debug-Apk с ключом release, чтобы я смог протестировать обновления выпущенных версий. Кроме того, я смог подписать уже выпущенный apk с отладочным ключом для воспроизведения ошибок.
Это то, что вы должны делать
- Переименуйте файл
.apk
в.zip
- Распакуйте файл
.zip
и удалите папкуMETA-INF
- Замените папку еще раз и переименуйте ее в
.apk
- Подпишите apk:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \
-keystore my-release-key.keystore my_application.apk alias_name
Для ключа отладки псевдоним должен быть androiddebugkey
и пароль android
. Отстойное хранилище ключей по умолчанию $HOME/.android/debug.keystore
. См. Также Включение режима отладки.
Ответ 3
Это версия 1 Liner/1 Step ответа @Joerg выше:
zip -d foo.apk META-INF/\*
Это использует встроенную функцию "удалить из существующего архива" команды zip
. Когда вы запустите эту команду, вы увидите:
deleting: META-INF/MANIFEST.MF
deleting: META-INF/CERT.SF
deleting: META-INF/CERT.RSA
... как результат. Эти файлы являются существующей подписью. Удаление их позволяет вам снова подписать его.
Я также хотел бы повторить, что вы должны обязательно передать аргументы -sigalg SHA1withRSA
и -digestalg SHA1
в jarsigner
, чтобы избежать этой проблемы: https://code.google.com/p/android/issues/detail?id=19567
Ответ 4
В соответствии с документами googles вы можете подписать apk несколько раз http://developer.android.com/guide/publishing/app-signing.html#signapp. Если вы не можете получить неподписанную сборку, хотя вы можете просто надуть apk, а затем rejar it, вы сможете ее подписать.
Ответ 5
Насколько я столкнулся с этой ошибкой, это происходит, когда вы пытаетесь подписать zipaligned.apk файл.
Похоже, что jarsigner не выдерживает некоторых zipalign изменений.
Это часто случается.