Как подписать APK с несколькими сертификатами? - PullRequest
16 голосов
/ 21 мая 2010

Как подписать APK с несколькими сертификатами, чтобы я мог сделать это при публикации в Android Market:

Версия 1.0 => Подписано с сертификатом A
Версия 2.0 => Подписано с сертификатом A & B
Версия 3.0 => Подписано с сертификатом B

Android Market дает мне некоторую надежду, но я не уверен, что с этим делать, когда я загружаю с другим сертификатом подписи, он дает мне следующее сообщение:

"АПК должен быть подписан хотя бы одним сертификатом, общим с предыдущей версией."

Мотив:
Я опубликовал приложение на рынке, используя Android Signing Tool как часть MotoDev Studio для Android. Проблема в том, что он сам обрабатывает ключи, и нет способа (задокументированного) получить их. Я хочу изменить его, чтобы использовать хранилище ключей и сертификат, которые я могу контролировать и могу использовать, даже если я больше не использую MotoDev Studio. Также кажется, что MotoDev Studio заблокирует вас от новых функций, таких как общие библиотеки.

ОБНОВЛЕНИЕ 05.03.2011:
Они действительно очень быстро и оперативно обновили MotoDev Studio, но, похоже, я считаю, что Google все равно должен обойти тех, кто изменить сертификаты своих заявок. Обновление приложения для всех использует один и тот же сертификат, создавая новые со временем и, возможно, создавая новый, чтобы вы могли передать поддержку и распространение вашего приложения другим.

Ответы [ 3 ]

14 голосов
/ 21 мая 2010

Если вы хотите подписать APK более одного раза, просто сделайте это.
Но учтите, что Google Play не принимает APK с несколькими подписями.

например. Вы можете подписать APK из командной строки, используя jarsigner, например:
jarsigner -keystore original-keystore my-app-unsigned.apk key-alias псевдоним

Затем просто повторите это со вторым ключом:
jarsigner -keystore new-signing-keystore my-app-unsigned.apk key-alias

Не забудьте запустить zipalign впоследствии:
zipalign -v 4 my-app-unsigned.apk my-app.apk


Я только что перечитал часть о студии MotoDev. В этом случае вы можете просто сначала подписать APK, используя MotoDev, как обычно, а затем подписать новый ключ в командной строке, как указано выше.

4 голосов
/ 13 мая 2012

Мне было очень приятно видеть этот пост, пока я не увидел комментарий @ ddcruver (2010-06-05) и комментарий @cistearns (2011-03-01).

Однако на самом деле существует серьезная проблема безопасности с описанным вами методом перехода (если бы он работал так, как вы ожидаете), что делает злоумышленником достаточно тривиальным заменить ваше приложение, если они могут заставить ваших пользователей установить материал:

  • Вы выпускаете приложение, подписанное сертификатом A.
  • Атакующий получает apk, дополнительно подписывает его сертификатом M и распространяет приложение.
  • Затем злоумышленник может выпустить вредоносное приложение, подписанное сертификатом M, чтобы заменить ваше и получить доступ к любым данным, которые он может хранить.

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

С другой стороны, есть еще несколько допустимых вариантов использования для передачи ключа / сертификата: обновление ключа, передача другому разработчику и т. Д.

Это можно сделать более безопасно, разрешив переход к новому ключу со старого ключа. Пожалуйста, смотрите проблему в проекте Android .

2 голосов
/ 28 мая 2011

У меня была проблема сегодня, и вот что я сделал:

  1. Резервное копирование старого файла motodev.keystore
  2. Используйте недавнюю студию motodev (2.0.1), чтобы изменить мой пароль motodev.keystore (измените его в представлении motodev, где вы можете импортировать хранилище ключей)
  3. Преобразование файла хранилища ключей motodev (типа JCEKS) в обычный файл хранилища ключей Android (типа JKS) с помощью программы keytool.exe, входящей в комплект java:

keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS

Теперь файл android.keystore можно использовать в плагинах Google Eclipse для экспорта вашего приложения в подписанный APK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...