Подписываем Android apk приложения

1. Создаем хранилище ключей

Вызываем команду для создания хранилища ключей и указываем алиас ключа:

keytool -genkey -keystore mykeys.keystore -alias keyjsonclient -validity 10000 -keyalg RSA -keysize 2048

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

Пример создания ключа в хранилище:

Enter keystore password:  
What is your first and last name?
  [Unknown]:  Maria Shpatserman
What is the name of your organizational unit?
  [Unknown]:  
What is the name of your organization?
  [Unknown]:  NetUnix
What is the name of your City or Locality?
  [Unknown]:  
What is the name of your State or Province?
  [Unknown]:  
What is the two-letter country code for this unit?
  [Unknown]:  RU
Is CN=Maria Shpatserman, OU=Unknown, O=NetUnix, L=Unknown, ST=Unknown, C=RU correct?
  [no]:  yes

Enter key password for 
	(RETURN if same as keystore password):  
Re-enter new password: 

Просматриваем созданные в хранилище ключи командой:

keytool -list -keystore mykeys.keystore -v

2. Подписываем свой apk файл

В IDE в выходной папке сборки (out либо target) находим свой не выровненный файл-архив нашего приложения jsonclient.unaligned.apk.
Не забываем удалить подпись созданную IDE (удаляем META-INF).
Вызываем команду для подписи файла:

jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore /home/masha/keystore/mykeys.keystore jsonclient.unaligned.apk keyjsonclient
Enter Passphrase for keystore: 
Enter key password for keyjsonclient: 
jar signed.

Указываем пароль к хранилищу и к ключу. И получаем подписанный архив.
Если возникло сообщение об ошибке вида

jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 417 but got 414 bytes)

Значит подпись уже в архиве есть. Удаляем подпись открыв архив и удалив папку META-INF. Вызываем команду jarsigner по новой.
Если возникло предупреждение:

Warning: 
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2044-04-16) or after any future revocation date.

Значит Вы используете версию JDK >6 ( к примеру, Java 7 ). И при вызове команды jarsigner нужно использовать дополнительный параметр:

jarsigner -tsa http://timestamp.digicert.com ....

3. Выравниваем apk файл

Из папки androidsdk вызываем команду zipalign:

/home/masha/androidsdk/android-sdk-linux/build-tools/21.1.2/zipalign -v -f 4 jsonclient.unaligned.apk jsonclient.apk

Если для подписи файла использовать утилиту apksigner, то выравнивание файла с помощью утилиты zipalign нужно выполнять перед командой apksigner.
Поздравляю теперь Вы можете выкладывать свой подписанный и выровненный файл в Google play Market.