Некоторые (но не все) пользователи получают сообщение "Файл пакета был неправильно подписан при загрузке моего приложения из Google Play".

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

«Пакетный файл был подписан неправильно»

Однако когда я пытаюсь воспроизвести эту ошибку (используя сброс Nexus 7 до заводских настроек), все идет гладко.

Это похоже на проблему, описанную в этом вопросе, но принятый ответ в данном случае не подходит.

Я видел предложения использовать JDK 6 вместо JDK 7, но ответы вроде этого приводят Я считаю, что это решение предназначено для ситуаций, когда хранилище ключей было создано в более старой версии Java. Кроме того, меня беспокоит, как отказ от новой версии со старой версией Java повлияет на наших клиентов, у которых не возникли проблемы с первоначальной установкой.

  1. Имеет ли смысл то, что версия JDK, используемая для подписи приложения, отрицательно влияет только на некоторых клиентов? Если да, то какие факторы могут определить, на каких устройствах возникает проблема?
  2. Может ли изменение того, как подписывать двоичный файл (но не сертификат), окажет какое-либо негативное влияние на нашу способность обновлять приложение для пользователей, у которых в настоящее время нет этой проблемы
  3. Если версия Java, которую я использовал для подписи APK, не является проблемой, что еще может вызвать такую ​​ошибку?

Изменить: все пользователи с этой проблемой (или без нее) работают под управлением Android 4.0 или более поздней версии. Приложение не поддерживает более ранние версии Android.


person lzam    schedule 12.09.2014    source источник


Ответы (1)


После небольшого чтения, я собираюсь сделать удар, вам нужно явно указать алгоритм для jarsigner JDK7.

Добавьте это в файл build.xml вашего проекта:

<presetdef name="signjar">
    <signjar sigalg="MD5withRSA" digestalg="SHA1" />
</presetdef>

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

Эта запись в блоге также содержит интересную информацию о подписании apk: Подпись кода Android

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

person C B J    schedule 23.09.2014
comment
Спасибо, я ценю это. В повседневной работе я работаю с большим количеством устройств. Я мог бы сам провести небольшое тестирование в этой области. Если найду что-нибудь полезное, дам знать. - person C B J; 24.09.2014
comment
Есть ли у вас новости по этому поводу? У меня точно такая же проблема, как описывает Изам выше, и было бы интересно, если бы это решение помогло. - person Ursin Brunner; 09.02.2015
comment
Это один из худших недостатков фрагментации Android, который я когда-либо видел. - person Bruno Bronosky; 29.05.2015
comment
Ржу не могу. К сожалению, не самое худшее, что я видел. - person C B J; 02.06.2015