У меня есть приложение в Google Play в течение многих лет, которое претерпело бесчисленное количество обновлений. Некоторым людям не удается установить последнее обновление (первое за последнее время), они просто получают сообщение об ошибке «Неправильно подписанный пакет».
Это работает для моих устройств Android, которые есть у меня дома. Я создаю и подписываюсь с помощью пользовательской системы сборки, которая в основном сводится к вызову ant release
, за которым следует
jarsigner -verbose -keystore $(keystore) -storepass $(storepass) $(appname).apk $(alias)
zipalign -v 4 $(appname).apk $(finalname).apk
Это работало годами, не было никаких изменений в системе сборки или хранилище ключей, я не знаю, почему это перестало работать для некоторых пользователей.
Я заметил, что в документации добавлено следующее предостережение:
Начиная с JDK 7, алгоритм подписи по умолчанию [sic] изменился, требуя, чтобы вы указали подпись и алгоритмы дайджеста [sic] (-sigalg и -digestalg) при подписании APK.
Поэтому я добавил -sigalg SHA1withDSA -digestalg SHA1
, который создает APK другого размера. Я могу попробовать развернуть это, но я не хочу продолжать выпускать обновления и раздражать пользователей, не зная, что я действительно что-то исправляю.
Почему это не удается только некоторым людям? Как это исправить? Достаточно ли явно указать -sigalg/-digestalg?