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.