2010-05-21 5 views
13

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

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

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

«Apk должен быть подписан хотя бы с одним сертификатом, совпадающим с предыдущей версией».

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

UPDATE 5/3/2011:
Они были на самом деле очень быстро и оперативно при обновлении MOTODEV Studio, но это, кажется, как я считаю, что Google должна по-прежнему обеспечивать работу вокруг для тех, кто хочет изменить их сертификаты Приложения. Обновление приложения для всех использует один и тот же сертификат, создавая новые с течением времени и, возможно, создавая новый, чтобы вы могли передать поддержку и распространение своего приложения другим.

ответ

12

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

например. Вы можете sign an 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, как обычно, а затем подписать новый ключ в командной строке, как указано выше.

+0

Хорошо, я посмотрю, примет ли Android Market его старый сертификат, а затем новый, а затем добавит новое обновление только с новым и посмотрит, работает ли он. Это то, о чем я думал, но я новичок в подписании кода вообще, и он ни разу не упоминает способ смены сертификатов. – ddcruver

+0

Ну, по крайней мере, в Android Docs. – ddcruver

+2

Кажется, что все работает нормально, похоже, это способ изменить сертификат в приложении Android Market. – ddcruver

2

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

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

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

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

+0

В jdk1.7.0_45 они изменили некоторые имена параметров. Теперь srcstorestype и deststoretype. –

3

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

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

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

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

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

Это может быть сделано более надежно разрешать переход новый ключ от старого ключа. См. issue in the Android project.

+0

«Злоумышленник получает apk, дополнительно подписывает его с сертификатом M и распространяет приложение». - который, основываясь на комментариях, которые вы указали, по-видимому, заблокирован консолью разработчика. – CommonsWare

+0

Да точно. Как бы то ни было, это не проблема безопасности. Я говорю, что если бы/было/было возможно перевести ключ таким образом, то он/будет/будет проблемой безопасности. –

+0

Обратите внимание, что Google Play (и консоль разработчика) не является единственным способом распространения файлов apk. –