Как подписать APK с несколькими сертификатами?
Как подписать APK с несколькими сертификатами, чтобы я мог это сделать, когда публиковал в Android Market:
Версия 1.0 = > Подписано с сертификатом A
Версия 2.0 = > Подписано сертификатом A и B
Версия 3.0 = > Подписан с сертификатом B
Android Market действительно дает мне некоторую надежду, но я не уверен, что с этим делать, когда я загружаю другой сертификат знака, он дает мне это сообщение:
"Apk должен быть подписан с хотя бы одним сертификатом, общим с предыдущей версией".
Мотив:
Я опубликовал приложение на рынке с помощью Android Signing Tool как часть MotoDev Studio для Android. Проблема в том, что он обрабатывает сами ключи, и нет способа (документально) получить их. Я хочу изменить его, чтобы использовать хранилище ключей и сертификат, который я больше контролирую и могу использовать, даже если я больше не использую MotoDev Studio. Также кажется, что MotoDev Studio заблокирует вас от новых функций, таких как общие библиотеки.
ОБНОВЛЕНИЕ 5/3/2011:
Они действительно очень быстро и оперативно обновили MotoDev Studio, но похоже, что я считаю, что Google должен по-прежнему обеспечивать работу для тех, кто хотите изменить сертификаты своих приложений. Обновление приложения для всех использует один и тот же сертификат, создавая новые с течением времени и, возможно, создавая новый, чтобы вы могли передать поддержку и распространение своего приложения другим пользователям.
Ответы
Ответ 1
Если вы хотите подписывать 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, как обычно, а затем подписать новый ключ в командной строке, как указано выше.
Ответ 2
Мне было очень приятно видеть этот пост, пока я не увидел комментарий @ddrruver (2010-06-05) и комментарий @cistearns (2011-03-01).
Тем не менее, на самом деле существует серьезная проблема безопасности с описанным вами способом перехода (если это будет работать так, как вы ожидаете), что делает довольно простым для злоумышленника замену вашего приложения, если оно может заставить ваших пользователей установить свои материал:
- Вы отпустите свое приложение, подписанное сертификатом A.
- Злоумышленник получает apk, дополнительно подписывает его с сертификатом M и распространяет приложение.
- Затем злоумышленник может освободить вредоносное приложение, подписанное с сертификатом M, чтобы заменить ваши и получить доступ к любым данным, которые он может хранить.
Обычно, если злоумышленник пытался что-то заменить, установка откажется, если оригинал не будет удален - в этот момент данные будут стерты.
С другой стороны, существует еще несколько допустимых вариантов использования для перехода ключа/сертификата: обновление ключа, передача другому разработчику и т.д.
Это можно сделать более надежно, разрешив переход на новый ключ из старого ключа. См. вопрос в проекте Android.
Ответ 3
У меня была проблема сегодня, и вот что я сделал:
- Резервное копирование старого файла motodev.keystore
- Используйте последнюю студию motodev (2.0.1), чтобы изменить мой пароль motodev.keystore(измените его в представлении motodev, где вы можете импортировать хранилище ключей)
- Преобразуйте файл хранилища motodev (типа JCEKS) в обычный файл хранилища ключей (тип JKS) с помощью программы keytool.exe в комплекте с java:
keytool -importkeystore -srckeystore motodev.keystore -srckeystoretype JCEKS -destkeystore android.keystore -destkeystoretype JKS
Теперь файл android.keystore можно использовать в плагинах Google Eclipse для экспорта вашего приложения в подписанный APK