подпись приложения android studio
Подписывание пакета приложения для Android
В разделе Подготовка приложения к выпуску для сборки и архивации приложения для последующего подписывания и публикации использовался Диспетчер архивов. Из этого раздела вы узнаете, как создать удостоверение подписывания Android, как создать новый сертификат подписи для приложений Android и как опубликовать заархивированное приложение напрямую на диск. Полученный неопубликованный APK-файл можно установить на устройства с Android, минуя магазин приложений.
В разделе Архивирование для публикации в диалоговом окне Канал распространения предлагается два варианта распространения. Выберите Прямое:
В разделе Архивирование для публикации в диалоговом окне Подписать и распространить. предлагается два варианта распространения. Выберите Прямое и нажмите Далее:
Создание нового сертификата
Можно использовать существующий сертификат, нажав кнопку Импорт, и затем продолжив с пункта Подписывание пакета APK. Если у вас еще нет сертификата, нажмите кнопку + для создания нового сертификата:
Появится диалоговое окно Создание хранилища ключей Android. Создайте при помощи этого окна новый сертификат подписи, который затем можно будет использовать для подписывания приложений Android. Введите необходимые сведения в этом диалоговом окне (выделено красным), как это показано на рисунке:
На следующем рисунке приведен пример сведений, которые необходимо ввести в этом окне. Нажмите Создать для создания нового сертификата:
Полученное хранилище ключей находится в следующем расположении:
C:\Users\Имя_пользователя\AppData\Local\Xamarin\Mono for Android\Keystore\Псевдоним\Псевдоним.keystore
Например, при использовании chimp в качестве псевдонима вышеуказанные шаги создадут ключ подписи в следующем расположении:
C:\Users\ИМЯ_ПОЛЬЗОВАТЕЛЯ\AppData\Local\Xamarin\Mono for Android\Keystore\chimp\chimp.keystore
Папка AppData по умолчанию скрыта, и для доступа к ней вам, возможно, потребуется отобразить ее.
Кроме того, обязательно сохраните резервную копию файла полученного хранилища ключей и пароль в безопасном месте (оно не указано в этом руководстве). Если вы потеряете ваш файл хранилища ключей (например, если вы сменили компьютер или переустановили Windows), то вы не сможете подписать приложение тем же сертификатом, что и предыдущие версии.
Подробные сведения о хранилище сертификата см. в разделе Отображение MD5 и SHA1 сигнатур хранилища ключей.
Диалоговое окно Создание нового сертификата используется для создания нового сертификата подписи, который можно использовать для подписания приложений Android. После ввода всех необходимых сведений нажмите кнопку OK:
Полученное хранилище ключей находится в следующем расположении:
Например, вышеуказанные шаги создадут новый ключ подписи в следующем расположении:
Обязательно сохраните резервную копию файла полученного хранилища ключей и пароль в безопасном месте – оно не указано в этом руководстве. Если вы потеряете файл хранилища ключей (например, сменили компьютер или переустановили macOS), вы не сможете подписать приложение тем же сертификатом, что и предыдущие версии.
Подробные сведения о хранилище сертификата см. в разделе Отображение MD5 и SHA1 сигнатур хранилища ключей.
Подписывание пакета APK
При нажатии кнопки Создать новое хранилище ключей (содержащее новый сертификат) будет сохранено и отобразится в списке Удостоверение подписывания, как это показано на следующем рисунке. Для публикации приложения в Google Play нажмите Отмена и перейдите к разделу Публикация в Google Play. Для публикации напрямую выберите удостоверение подписывания и нажмите Сохранить как, чтобы опубликовать приложение для независимого распространения. Например, на приведенном ниже рисунке выбрано созданное ранее удостоверение подписывания chimp:
Перейдите в желаемое расположение для сохранения и нажмите Сохранить. Если неизвестен пароль ключа, откроется диалоговое окно Пароль для подписывания для ввода пароля выбранного сертификата:
После подписания файла щелкните Открытое распространение:
В результате проводник Windows откроет папку, содержащую сформированный APK-файл. На этом этапе Visual Studio завершает компиляцию приложения Xamarin.Android в APK-файл, готовый к распространению. На рисунке ниже изображен пример готового к публикации приложения MyApp.MyApp.apk:
Как мы видим, новый сертификат был добавлен в хранилище ключей. Для публикации приложения в Google Play нажмите Отмена и перейдите к разделу Публикация в Google Play. В противоположном случае нажмите Далее для публикации приложения напрямую (для независимого распространения), как это показано в следующем примере:
Диалоговое окно Опубликовать напрямую перед публикацией отображает сводку по подписанному приложению. Проверьте правильность следующих сведений и нажмите Опубликовать.
С помощью диалогового окна Выходной APK-файл укажите путь для сохранения файла. Нажмите кнопку Сохранить.
Затем введите пароль сертификата (пароль, который был указан в диалоговом окне Создание нового сертификата) и нажмите OK:
APK-файл подписан сертификатом и сохранен по указанному пути. Нажмите Показать в Finder:
В результате откроется Finder с расположением подписанного APK-файла:
APK-файл готов к копированию из Finder в место назначения. Перед распространением рекомендуется установить APK-файл на устройство с Android и проверить работоспособность приложения. Дополнительные сведения о прямой публикации APK-файлов см. в разделе Независимая публикация.
Следующие шаги
После подписывания пакета приложения для выпуска его необходимо опубликовать. Следующие разделы описывают несколько способов публикации приложения.
Ручная подписка APK
Тут вам покажем несколько способов инструментов, при помощи которых можно подписывать приложения Android перед публикацией их в Google App Play.
Подписка APK средствами IDE Android Studio
Вы можете использовать Android Studio для ручного создания подписанных APK, по одному за раз, или для нескольких вариантов сборки сразу. Вместо того, чтобы вручную подписывать APK, вы также можете настроить свои настройки сборки Gradle для автоматической обработки подписей во время процесса сборки. В этом разделе описывается процесс ручной подписи. Подробнее о подписании приложений как части процесса сборки см. В разделе Настройка процесса сборки для автоматической подписки APK.
Чтобы вручную подписать APK для выпуска в Android Studio, выполните следующие действия:
Когда процесс завершится, вы найдете свой подписанный APK в выбранной вами папке назначения. Теперь вы можете распространять подписанный APK через торговую площадку приложения, например, в Google Play Store, или использовать выбранный вами механизм распространения подписанного приложения конечным пользователям.
Чтобы пользователи могли успешно устанавливать обновления для вашего приложения, вам нужно будет подписать APK с тем же сертификатом на протяжении всего срока действия вашего приложения.
Подробнее об этом и других преимуществах подписания всех ваших приложений с помощью одного и того же ключа, по поводу безопасности и редактирования.
Есть сгенерированные ключи подписи или создаем?
Мы уже разбирали тут, как генерировать хранилище ключей с ключом подписи. Если кратко, то вы можете подписать свое приложение из командной строки с помощью инструмента apksigner или настроить Gradle для его подписки во время сборки. В любом случае вам нужно сначала сгенерировать закрытый ключ с помощью keytool. Например командой
Примечание: keytool находится в каталоге bin/ вашего JDK. Чтобы найти ваш JDK из Android Studio, выберите «File»> «Project Structure», а затем «SDK Location», и вы увидите местоположение JDK
В этом примере команды консоль еще запросит ввести пароли для хранилища ключей и ключа подписи и запросит заполнить поля Distinguished Name для вашего ключа. Затем он генерирует хранилище ключей в виде файла с именем my-release-key.jks, сохраняя его в текущем каталоге (вы можете перемещать его по своему усмотрению). Хранилище ключей содержит один ключ, действительный в течение 10 000 дней.
Теперь вы можете создать unsigned APK, т.е. построить конфигурацию release и подписать его вручную или вместо этого настроить Gradle для автоматического подписания APK.
Подписка APK средствами командной строки Android SDK
Инструмент apksigner, доступный в версии 24.0.3 и выше для Android SDK Build Tools, позволяет вам подписывать APK и подтверждать, что подпись APK будет проверена успешно на всех версиях платформы Android, поддерживаемых этими APK. В этом подразделе представлено краткое руководство по использованию инструмента и служит ссылкой для различных параметров командной строки, которые поддерживает инструмент
Примечание 1. если вы подписываете APK с помощью apksigner и вносите дальнейшие изменения в APK, подпись APK становится недействительной. Поэтому перед подписанием APK вы должны использовать такие инструменты, как zipalign.
Примечание 2. Чтобы использовать инструмент apksigner, вы должны иметь версию 24.0.3 или выше установленных инструментов Android SDK Build Tools. Вы можете обновить этот пакет с помощью диспетчера SDK.
1). Открываем командную строку и перемещаемся в корневую директорию —из Android Studio, выбираем View > Tool Windows > Terminal. Затем вызываем команду assembleRelease :
Это создает APK под именем module_name-unsigned.apk в папке project_name/module_name/build/outputs/apk/. APK будет неподписанным(unsigned) и невыровненным(unaligned), который на данный момент — он не может быть установлен до тех пор, пока не будет подписан вашим секретным ключом.
2). Align the unsigned APK using zipalign:
zipalign гарантирует, что все несжатые данные начинаются с конкретного выравнивания байтов относительно начала файла, что может уменьшить объем оперативной памяти, потребляемой приложением.
3). Подписываем APK своим личным ключом с помощью apksigner:
В этом примере выводится подписанный APK на my-app-release.apk после его подписания с закрытым ключом и сертификатом, который хранится в одном файле хранилища ключей: my-release-key.jks.
Инструмент apksigner поддерживает другие параметры подписки, включая подписание файла APK с использованием отдельного закрытого ключа и файлов сертификатов и подписку APK с использованием нескольких подписчиков. Для получения дополнительной информации см. ссылку apksigner.
4). Убеждаемся, что ваш APK подписан:
Пример подписки средствами Android SDK
Если вышеописанное вызывает трудности, то давайте сделаем некоторый простой пример генерации ключа командой keytool, выполнения операции zipalign и подписи командой apksigner.
Сначала строим релиз средствами Cordova и Android SDK
Команда keytool генерации ключа в консоли:
Операция zipalign в консоли:
Обратите внимание, что zipalign мы выполняем по прямому пути версии приложения, которая соответствует версии нашего разрабатываемого приложения.
Операция подписи apksigner:
Обратите внимание, что apksigner мы выполняем по прямому пути версии приложения и указываем путь к сгенерированному ключу, которая соответствует версии нашего разрабатываемого приложения. Далее, после нажатия Enter, консоль запросит поочередно запросить пароль от хранилища ключей и от самого ключа.
Подписка APK средствами командной строки JDK
Выше мы уже знакомились с инструментом keytool для создания хранилища ключей и самих ключей подписи в составе JDK, а в данной секции описано то, как средствами JDK подписывать этим ключом приложение и для этого есть специальный инструмент в составе JDK в той же папке, что и keytool — jarsigner.
Команда подписи с ее параметрами записывается так
Имена параметров нам знакомы по keytool:
После данной команды приложение будет подписано и будет готово к установке на устройства или можно распространять через Google App Play.
Другие инструменты подписи
Пожалуй, сюда можно добавить такие инструменты, как:
Создание подписи приложения с помощью Google Play App Signing
Поскольку ключ подписи используется для проверки того, что именно вы являетесь разработчиком приложения, и для обеспечения безопасных обновлений для ваших пользователей, обеспечение безопасности ключа очень важно как для вас, так и для пользователей. Существуют различные способы подписания своих приложений, один из таких мы рассмотрели в предыдущей статье.
Недавно Google добавил новую возможность хранить ключи: в своей собственной инфраструктуре благодаря Google Play App Signing. Основное отличие здесь заключается в том, что вы подписываете приложение специальным ключом загрузки, который Google проверяет и удаляет, заменяя его оригинальным ключом подписи приложения, который вы предоставили.
С его помощью можно управлять ключами подписи приложений как для новых, так и для опубликованных приложений, которые в свою очередь будут храниться у Google в их собственном хранилище ключей. Чтобы присоединиться к этой программе, необходимо подписаться на неё в своей Google Play Console. Стоит отметить, что в последствии отписаться от неё уже будет невозможно.
Таким образом, при подключении к Google Play App Signing происходит следующее:
Такой способ очень полезен, поскольку в случае, если вы потеряли хранилище ключей, Google Play App Signing позволит сбросить ключ для установки нового. Согласитесь, это намного проще, чем каждый раз публиковать приложение заново с новым именем пакета и ключом.
Попробуем, используя этот способ, опубликовать новое приложение : Менеджер системных приложений.
Для начала необходимо создать ключ загрузки, по которому Google будет проверять APK. Для этого средствами Android Studio через меню Build — Generate Signed APK создадим новое хранилище ключей, в котором будет содержаться наш ключ загрузки. Создание подписи приложения будет происходить с помощью Gradle, а файл, содержащий путь до хранилища и пароли, вынесем из проекта и будем хранить отдельно.
О том, как это можно сделать для своего приложения, можно почитать в данной статье.
Теперь перейдём в консоль разработчика. Создадим новое приложение и дадим ему название. После этого нужно перейти в «Версии приложения» — «Управление рабочей версией» — «Создать выпуск«. Здесь вам будет предложено подключиться к програме Google Play App Signing, нажимаем «Продолжить«.
Если перейти в «Подписи приложения«, то можно обнаружить, что был создан сертификат для подписи, однако сертификат загрузки остался пустым. Это потому, что мы ещё не загрузили первый подписанный APK файл.
Вернёмся в создание выпуска. После получения подтверждения о том, что мы подключились к программе, можно перейти к загрузке APK.
Здесь нужно загрузить APK файл своего приложения, подписанный ключом, который был создан выше. Этот ключ и станет ключом загрузки для приложения, которым вы должны будете подписывать все APK в будущем.
После того, как вы загрузите APK, подписанный ключом загрузки, его сертификат появится в «Подписи приложения«.
После заполнения всех необходимых полей в консоли и публикации приложения в Google Play, в приложении уже будет использоваться другой ключ подписи, который будет находиться у Google и отправляться пользователям при загрузке приложения из маркета.
Узнать, что приложение подписано Google, а не самим разработчиком, можно по следующему элементу метаданных, содержащемуся в тэге в файле манифеста:
Как сбросить ключ загрузки?
В случае, если вы потеряли свой ключ загрузки или он был похищен кем-либо, вы можете сбросить его в консоли разработчика. Чтобы сделать это, нужно:
Скачаем опубликованное приложение и посмотрим, что у него внутри. Для этого воспользуемся любым декомпилятором APK файлов.
Если открыть манифест приложения, то внутри можно обнаружить ту самую строку с метаданными, о которой мы говорили выше.
Данный идентификатор будет использоваться в инструментах отчётности об ошибках и по нему можно определить нужный APK-файл.
К сожалению, оптимизации APK не происходит, как было заявлено разработчиками. Google Play должен предоставлять оптимизированный APK с нужными локалями и плотностью экрана. Однако если посмотреть, что находится в ресурсах декомпилированного APK, то можно обнаружить там все локализации, которые были созданы для приложения, и разметки экранов с плотностью.
Кроме декомпилятора это также можно проверить утилитой aapt.exe (Android Asset Packaging Tool), которая входит в состав Android SDK. Для этого нужно ввести следующую команду:
Как подписаться, если приложение уже опубликовано?
В случае, если вы хотите подписать своё опубликованное приложение на Google Play App Signing, то вам нужно будет в консоли разработчика открыть проект приложения и затем выбрать «Управление релизом» — «Версии приложения«.
В открывшемся окне помимо различный вариантов сборок и версий вашего приложения должно появиться приглашение подключиться к Google Play App Signing.
Вам перекинет на страницу «Подписи приложений» с описанием программы. Вам нужно будет оттуда скачать утилиту PEPK и с помощью неё выполнить следующую команду, заменив выделенные участки на свои:
Эта утилита позволяет вам извлечь определённый ключ из хранилища ключей и экспортировать его в PEM сертификат. Для примера попробуем экспортировать ключ для другого приложения. После ввода команды нас попросят ввести пароли от хранилища и от ключа, и если всё завершится без ошибок, значит операция выполнена успешно.
Если PEPK выдаёт ошибку на неправильный alias, хотя вы полностью уверены, что он верен — попробуйте написать его только маленькими буквами, если в нём имеются заглавные.
Затем на той же странице в консоли разработчика нужно нажать на «Закрытый ключ для подписи приложения» и выбрать наш созданный сертификат. Таким образом Google поймёт, что именно мы являемся разработчиком приложения. После этого можно приступать к созданию ключа загрузки, по которому в будущем будет происходить публикация всех APK-файлов.
Для этого нужно создать ключ тем же способом, каким мы создавали его в начале статьи. Затем с помощью стандартной утилиты Java под названием Keytool нужно будет экспортировать ключ в PEM сертификат с помощью следующей команды:
На странице консоли разработчика нажимаем «Сертификат открытого ключа загрузки» и выбираем созданный сертификат с ключом загрузки.
После проделанных операций у нас станет активна кнопка «Зарегистрировать», нажимаем её и, если нет никаких ошибок, Google Play App Signing будет подключён к вашему приложению и вы увидите отпечатки сертификата.
Теперь вы можете загружать новые APK, подписывая их своим ключом загрузки, после чего Google будет заменять его на ключ из собственного хранилища.
Новая технология от Google немного облегчила жизнь разработчикам, будем жать, когда она действительно облегчит выходной APK-файл.
Создание подписи приложения с помощью Google Play App Signing : 2 комментария
Почему-то обошли вниманием самое важное: как указать свой первый ключ загрузки. В документации написано что после нажатия на кнопку «продолжить» запускается некий Enrollment Process в котором можно скачать Play Encrypt Private Key tool, экспортировать ключ и загрузить этот ключ на сервер.
У меня оно просто сказало «Молодец, теперь будет использоваться GPAS» и не дает загружать никакие APK.
Ну и стоит написать что вернуться на обычный способ подписи можно только через удаление приложения и создание его заново.
Ситуация аналогична с Константином, читал пост с надеждой найти ответ.