Подпишите свое приложение

Android требует, чтобы все APK-файлы были подписаны цифровой подписью с помощью сертификата, прежде чем они будут установлены на устройство или обновлены. При выпуске с использованием пакетов Android App Bundle вам необходимо подписать пакет приложений с помощью ключа загрузки перед его загрузкой в ​​консоль Play, а служба подписи приложений Google позаботится обо всем остальном. Если приложения распространяются с помощью APK-файлов в Play Store или других магазинах, вам необходимо вручную подписать APK-файлы для загрузки.

На этой странице вы познакомитесь с некоторыми важными понятиями, связанными с подписанием приложений и безопасностью, с тем, как подписать приложение для выпуска в Google Play с помощью Android Studio и как настроить подписывание приложений в Play.

Ниже приводится общий обзор шагов, которые вам может потребоваться предпринять, чтобы подписать и опубликовать новое приложение в Google Play:

  1. Создайте ключ загрузки и хранилище ключей.
  2. Подпишите свое приложение с помощью ключа загрузки
  3. Настройка подписи приложений Play
  4. Загрузите свое приложение в Google Play.
  5. Подготовьте и разверните выпуск вашего приложения

Если вместо этого ваше приложение уже опубликовано в Google Play Store с существующим ключом подписи приложения или вы хотите выбрать ключ подписи приложения для нового приложения вместо того, чтобы Google сгенерировал его, выполните следующие действия:

  1. Подпишите свое приложение с помощью ключа подписи вашего приложения.
  2. Загрузите ключ подписи вашего приложения в Play App Signing.
  3. (Рекомендуется) Создайте и зарегистрируйте сертификат загрузки для будущих обновлений вашего приложения.
  4. Загрузите свое приложение в Google Play.
  5. Подготовьте и разверните выпуск вашего приложения

На этой странице также описано, как управлять собственными ключами при загрузке приложения в другие магазины приложений. Если вы не используете Android Studio или предпочитаете подписывать свое приложение из командной строки, узнайте, как использовать apksigner .

Подписание приложений в Google Play

С помощью функции подписи приложений Google Google управляет и защищает ключ подписи вашего приложения, а также использует его для подписи ваших APK-файлов для распространения. А поскольку пакеты приложений откладывают создание и подписание APK в Google Play Store, вам необходимо настроить подпись приложений в Play, прежде чем загружать пакет приложений. Это позволит вам получить следующие преимущества:

  • Используйте Android App Bundle и поддерживайте расширенные режимы доставки Google Play. Android App Bundle делает ваше приложение намного меньше, ваши выпуски проще, а также позволяет использовать функциональные модули и предлагать мгновенный опыт.
  • Повысьте безопасность своего ключа подписи и дайте возможность использовать отдельный ключ загрузки для подписи пакета приложений, который вы загружаете в Google Play.
  • Обновление ключа позволяет изменить ключ подписи приложения в случае, если существующий ключ скомпрометирован или вам необходимо перейти на более надежный криптографический ключ.

Для подписи приложений в Play используются два ключа: ключ подписи приложения и ключ загрузки , которые более подробно описаны в разделе « Ключи и хранилища ключей» . Вы сохраняете ключ загрузки и используете его для подписи своего приложения для загрузки в Google Play Store. Google использует сертификат загрузки для подтверждения вашей личности и подписывает APK-файлы с помощью ключа подписи вашего приложения для распространения, как показано на рисунке 1. Используя отдельный ключ загрузки, вы можете запросить сброс ключа загрузки , если ваш ключ когда-либо будет утерян или скомпрометирован.

Для сравнения: если вы потеряете ключ подписи приложения, в котором не включена функция подписи приложений Play, вы потеряете возможность обновлять свое приложение.

Рисунок 1 . Подписание приложения с помощью Play App Signing

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

При использовании подписи приложений Play, если вы потеряете ключ загрузки или если он скомпрометирован, вы можете запросить сброс ключа загрузки в Play Console. Поскольку ваш ключ подписи приложения защищен Google, вы можете продолжать загружать новые версии своего приложения в качестве обновлений исходного приложения, даже если вы измените ключи загрузки. Чтобы узнать больше, прочитайте Сброс утерянного или скомпрометированного закрытого ключа загрузки .

В следующем разделе описаны некоторые важные термины и понятия, связанные с подписанием приложений и безопасностью. Если вы предпочитаете пропустить этот шаг и узнать, как подготовить свое приложение к загрузке в Google Play Store, перейдите в раздел Подпишите свое приложение для выпуска .

Хранилища ключей, ключи и сертификаты

Хранилища ключей Java (.jks или .keystore) — это двоичные файлы, которые служат хранилищами сертификатов и закрытых ключей.

Сертификат открытого ключа (файлы .der или .pem ), также известный как цифровой сертификат или сертификат личности, содержит открытый ключ пары открытого/закрытого ключей, а также некоторые другие метаданные, идентифицирующие владельца (например, имя и местоположение), который владеет соответствующим секретным ключом.

Ниже приведены различные типы ключей, которые вы должны понимать:

  • Ключ подписи приложения: ключ, который используется для подписи APK-файлов, установленных на устройстве пользователя. В рамках модели безопасного обновления Android ключ подписи никогда не меняется в течение всего срока службы вашего приложения. Ключ подписи приложения является частным и должен храниться в секрете. Однако вы можете поделиться сертификатом, созданным с использованием ключа подписи вашего приложения.
  • Ключ загрузки: ключ, который вы используете для подписи пакета приложения или APK перед его загрузкой для подписи приложения в Google Play . Вы должны хранить ключ загрузки в секрете. Однако вы можете поделиться сертификатом, созданным с использованием вашего ключа загрузки. Вы можете сгенерировать ключ загрузки одним из следующих способов:

    • Если вы решите, что Google сгенерирует для вас ключ подписи приложения при вашем согласии, то ключ, который вы используете для подписи вашего приложения для выпуска, будет назначен вашим ключом загрузки.
    • Если вы предоставляете Google ключ подписи приложения при выборе нового или существующего приложения, у вас есть возможность сгенерировать новый ключ загрузки во время или после вашего согласия для повышения безопасности.
    • Если вы не создадите новый ключ загрузки, вы продолжите использовать ключ подписи приложения в качестве ключа загрузки для подписи каждого выпуска.

    Совет. Чтобы обеспечить безопасность ваших ключей, рекомендуется убедиться, что ключ подписи приложения и ключ загрузки отличаются.

Работа с поставщиками API

Сертификат для ключа подписи приложения и ключа загрузки можно скачать на странице «Выпуск» > «Настройка» > «Подписание приложения» в Play Console . Это используется для регистрации открытых ключей у поставщиков API; он предназначен для общего доступа, поскольку не содержит вашего закрытого ключа.

Отпечаток сертификата — это короткое и уникальное представление сертификата, которое поставщики API часто запрашивают вместе с именем пакета для регистрации приложения для использования их службы. Отпечатки MD5, SHA-1 и SHA-256 сертификатов загрузки и подписи приложений можно найти на странице подписи приложений в Play Console. Другие отпечатки пальцев также можно вычислить, загрузив исходный сертификат ( .der ) с той же страницы.

Подпишите свою отладочную сборку

При запуске или отладке проекта в IDE Android Studio автоматически подписывает ваше приложение сертификатом отладки, созданным инструментами Android SDK. При первом запуске или отладке проекта в Android Studio среда IDE автоматически создает хранилище ключей и сертификат отладки в $HOME/.android/debug.keystore и устанавливает хранилище ключей и пароли ключей.

Поскольку сертификат отладки создается средствами сборки и небезопасен по своей конструкции, большинство магазинов приложений (включая Google Play Store) не принимают для публикации приложения, подписанные с помощью сертификата отладки.

Android Studio автоматически сохраняет информацию о подписи отладки в конфигурации подписи, поэтому вам не придется вводить ее каждый раз при отладке. Конфигурация подписи — это объект, содержащий всю необходимую информацию для подписи вашего приложения, включая расположение хранилища ключей, пароль хранилища ключей, имя ключа и пароль ключа.

Дополнительные сведения о том, как создавать и запускать приложения для отладки, см. в разделе Создание и запуск приложения .

Срок действия сертификата отладки истек

Срок действия самозаверяющего сертификата, используемого для подписи вашего приложения для отладки, составляет 30 лет с даты его создания. Когда срок действия сертификата истечет, вы получите ошибку сборки.

Чтобы решить эту проблему, просто удалите файл debug.keystore , хранящийся в одном из следующих мест:

  • ~/.android/ в OS X и Linux
  • C:\Documents and Settings\ user \.android\ в Windows XP
  • C:\Users\ user \.android\ в Windows Vista и Windows 7, 8 и 10

В следующий раз, когда вы создадите и запустите отладочную версию своего приложения, Android Studio заново создаст новое хранилище ключей и ключ отладки.

Подпишите свое приложение для выпуска в Google Play

Когда вы будете готовы опубликовать свое приложение, вам необходимо подписать его и загрузить в магазин приложений, например Google Play. При первой публикации приложения в Google Play вам также необходимо настроить подпись приложений Play. Подписание приложений в Play не является обязательным для приложений, созданных до августа 2021 года. В этом разделе показано, как правильно подписать приложение для выпуска и настроить подписывание приложений в Play.

Создайте ключ загрузки и хранилище ключей.

Если у вас еще нет ключа загрузки, что полезно при настройке подписи приложений Play, вы можете создать его с помощью Android Studio следующим образом:

  1. В строке меню нажмите «Сборка» > «Создать подписанный пакет/APK» .
  2. В диалоговом окне «Создать подписанный пакет или APK» выберите Android App Bundle или APK и нажмите «Далее» .
  3. Под полем « Путь к хранилищу ключей» нажмите «Создать новый» .
  4. В окне «Новое хранилище ключей» укажите следующую информацию о вашем хранилище ключей и ключе, как показано на рисунке 2.

    Рисунок 2. Создайте новый ключ загрузки и хранилище ключей в Android Studio.

  5. хранилище ключей

    • Путь к хранилищу ключей: выберите место, где должно быть создано хранилище ключей. Кроме того, в конец пути к местоположению следует добавить имя файла с расширением .jks .
    • Пароль: создайте и подтвердите безопасный пароль для вашего хранилища ключей.
  6. Ключ

    • Псевдоним: введите идентификационное имя для вашего ключа.
    • Пароль: создайте и подтвердите безопасный пароль для вашего ключа. Он должен совпадать с паролем вашего хранилища ключей. (Для получения дополнительной информации обратитесь к известной проблеме )
    • Срок действия (лет): установите период времени в годах, в течение которого ваш ключ будет действителен. Ваш ключ должен быть действителен не менее 25 лет, чтобы вы могли подписывать обновления приложения одним и тем же ключом на протяжении всего срока службы вашего приложения.
    • Сертификат: введите некоторую информацию о себе для сертификата. Эта информация не отображается в вашем приложении, но включена в ваш сертификат как часть APK.
  7. Заполнив форму, нажмите ОК .

  8. Если вы хотите создать и подписать свое приложение с помощью ключа загрузки, перейдите к разделу о том, как подписать свое приложение с помощью ключа загрузки . Если вы хотите сгенерировать только ключ и хранилище ключей, нажмите «Отмена» .

Подпишите свое приложение своим ключом

Если у вас уже есть ключ загрузки, используйте его для подписи приложения. Если вместо этого ваше приложение уже подписано и опубликовано в магазине Google Play с использованием существующего ключа подписи приложения, используйте его для подписи своего приложения. Позже вы сможете создать и зарегистрировать отдельный ключ загрузки в Google Play, чтобы подписывать и загружать последующие обновления в свое приложение.

Чтобы подписать приложение с помощью Android Studio, выполните следующие действия:

  1. Если в настоящее время у вас не открыто диалоговое окно «Создать подписанный пакет или APK» , нажмите «Сборка» > «Создать подписанный пакет/APK» .
  2. В диалоговом окне «Создать подписанный пакет или APK» выберите Android App Bundle или APK и нажмите «Далее» .
  3. Выберите модуль из раскрывающегося списка.
  4. Укажите путь к вашему хранилищу ключей, псевдоним вашего ключа и введите пароли для обоих. Если вы еще не подготовили хранилище ключей и ключ для загрузки, сначала сгенерируйте ключ и хранилище для загрузки , а затем вернитесь, чтобы завершить этот шаг.

    Рисунок 3 . Подпишите свое приложение с помощью ключа загрузки.

  5. Нажмите Далее .

  6. В следующем окне (показано на рисунке 4) выберите папку назначения для подписанного приложения, выберите тип сборки, а также варианты продукта, если применимо.

  7. Если вы создаете и подписываете APK, вам необходимо выбрать, какие версии подписи вы хотите поддерживать в своем приложении. Чтобы узнать больше, прочитайте о схемах подписи приложений.

  8. Нажмите Создать .

Рисунок 5. Щелкните ссылку во всплывающем окне, чтобы проанализировать или найти пакет приложений.

После того как Android Studio завершит создание подписанного приложения, вы можете найти или проанализировать свое приложение, щелкнув соответствующий параметр во всплывающем уведомлении, как показано на рисунке 5.

Теперь вы готовы включить свое приложение в Play App Signing и загрузить его для выпуска. Если вы новичок в процессе публикации приложений, возможно, вам захочется прочитать обзор запуска . В противном случае перейдите на страницу о том, как загрузить приложение в Play Console .

Использование подписи приложений Play

Как описано ранее на этой странице, настройка подписи приложений Play необходима для подписи вашего приложения для распространения через Google Play (за исключением приложений, созданных до августа 2021 года, которые могут продолжать распространять самоподписанные APK-файлы). Действия, которые вам необходимо предпринять, зависят от того, было ли ваше приложение еще не опубликовано в Google Play или оно уже подписано и было опубликовано до августа 2021 года с использованием существующего ключа подписи приложения.

Настройте новое приложение

Чтобы настроить подпись для приложения, которое еще не опубликовано в Google Play, выполните следующие действия:

  1. Если вы еще этого не сделали, сгенерируйте ключ загрузки и подпишите свое приложение с помощью этого ключа загрузки.
  2. Войдите в свою консоль Play .
  3. Следуйте инструкциям по подготовке и развертыванию выпуска , чтобы создать новый выпуск.
  4. После выбора варианта выпуска настройте подписывание приложений в разделе «Подписание приложений» следующим образом:
    • Чтобы Google Play сгенерировал для вас ключ подписи приложения и использовал его для подписи вашего приложения, вам не нужно ничего делать. Ключ, который вы используете для подписания первого выпуска, становится вашим ключом загрузки, и вам следует использовать его для подписи будущих выпусков.
    • Чтобы использовать тот же ключ, что и другое приложение в вашей учетной записи разработчика, выберите «Изменить ключ подписи приложения» > «Использовать тот же ключ, что и другое приложение в этой учетной записи» , выберите приложение и нажмите « Продолжить» .
    • Чтобы предоставить Google собственный ключ подписи для использования при подписании вашего приложения, выберите «Изменить ключ подписи приложения» и выберите один из параметров «Экспорт и загрузка» , который позволит вам безопасно загрузить закрытый ключ и его открытый сертификат.

В разделе « Наборы приложений» нажмите «Обзор файлов» , чтобы найти и загрузить приложение, которое вы подписали с помощью ключа загрузки. Дополнительную информацию о выпуске приложения см. в разделе «Подготовка и развертывание выпуска» . Когда вы выпускаете свое приложение после настройки подписи приложения Play, Google Play генерирует (если вы не загружаете существующий ключ) и управляет ключом подписи вашего приложения за вас. Просто подпишите последующие обновления вашего приложения, используя ключ загрузки вашего приложения, прежде чем загружать его в Google Play.

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

Включить существующее приложение

Если вы обновляете приложение, которое уже опубликовано в Google Play, используя существующий ключ подписи приложения, вы можете включить функцию подписания приложений в Google Play следующим образом:

  1. Войдите в свою консоль Play и перейдите к своему приложению.
  2. В меню слева нажмите «Выпуск» > «Настройка» > «Подписание приложения» .
  3. Если применимо, ознакомьтесь с Условиями обслуживания и выберите «Принять» .
  4. Выберите один из вариантов, который лучше всего описывает ключ подписи, который вы хотите загрузить в Google Play, и следуйте отображаемым инструкциям. Например, если вы используете хранилище ключей Java в качестве ключа подписи, выберите « Загрузить новый ключ подписи приложения из хранилища ключей Java» и следуйте инструкциям по загрузке и запуску инструмента PEPK, а также загрузите сгенерированный файл с зашифрованным ключом.
  5. Нажмите Зарегистрироваться .

Теперь вы должны увидеть страницу с подробной информацией о подписи вашего приложения и загрузке сертификатов. Google Play теперь подписывает ваше приложение существующим ключом при его развертывании для пользователей. Однако одним из наиболее важных преимуществ подписи приложений Play является возможность отделить ключ, который вы используете для подписи артефакта, который вы загружаете в Google Play, от ключа, который Google Play использует для подписи вашего приложения для распространения среди пользователей. Итак, рассмотрите возможность выполнения шагов, описанных в следующем разделе, для создания и регистрации отдельного ключа загрузки.

Создать и зарегистрировать сертификат загрузки

Когда вы публикуете приложение, не подписанное ключом загрузки, консоль Google Play предоставляет возможность зарегистрировать его для будущих обновлений приложения. Хотя это необязательный шаг, рекомендуется публиковать свое приложение с ключом, отличным от того, который Google Play использует для распространения вашего приложения среди пользователей. Таким образом, Google сохраняет ваш ключ подписи в безопасности, и у вас есть возможность сбросить утерянный или скомпрометированный закрытый ключ загрузки . В этом разделе описывается, как создать ключ загрузки, сгенерировать на его основе сертификат загрузки и зарегистрировать этот сертификат в Google Play для будущих обновлений вашего приложения.

Ниже описаны ситуации, в которых вы видите возможность зарегистрировать сертификат загрузки в Play Console:

  • Когда вы публикуете новое приложение, подписанное с помощью ключа подписи, и включаете его в функцию подписи приложений в Play.
  • Когда вы собираетесь опубликовать существующее приложение, в котором уже включена функция подписи приложений Play, но оно подписано с использованием ключа подписи.

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

Если вы еще этого не сделали, сгенерируйте ключ загрузки и хранилище ключей .

После того, как вы создадите ключ загрузки и хранилище ключей, вам необходимо сгенерировать общедоступный сертификат из вашего ключа загрузки с помощью keytool с помощью следующей команды:

$ keytool -export -rfc
  -keystore your-upload-keystore.jks
  -alias upload-alias
  -file output_upload_certificate.pem

Теперь, когда у вас есть сертификат загрузки, зарегистрируйте его в Google при появлении соответствующего запроса в Play Console или при сбросе ключа загрузки .

Обновите ключ подписи приложения

В некоторых случаях вам может потребоваться изменить ключ подписи вашего приложения. Например, потому что вам нужен криптографически более надежный ключ или ваш ключ подписи был скомпрометирован. Однако, поскольку пользователи могут обновлять ваше приложение только в том случае, если оно подписано тем же ключом подписи, изменить ключ подписи для уже опубликованного приложения сложно.

Если вы публикуете свое приложение в Google Play, вы можете обновить ключ подписи для опубликованного приложения через Play Console — ваш новый ключ используется для подписи установок и обновлений приложений на Android 13 и более поздних версиях, а ваш старый ключ подписи приложения используется для подписывать обновления для пользователей более ранних версий Android.

Дополнительные сведения см. в статье Обновите ключ подписи приложения .

Сброс утерянного или скомпрометированного закрытого ключа загрузки

Если вы потеряли свой закрытый ключ загрузки или ваш закрытый ключ был скомпрометирован, вы можете создать новый и запросить сброс ключа загрузки в консоли Play.

Настройте процесс сборки для автоматической подписи вашего приложения.

В Android Studio вы можете настроить свой проект на автоматическое подписание версии выпуска вашего приложения во время процесса сборки, создав конфигурацию подписи и назначив ее типу сборки выпуска. Конфигурация подписи состоит из местоположения хранилища ключей, пароля хранилища ключей, псевдонима ключа и пароля ключа. Чтобы создать конфигурацию подписи и назначить ее типу сборки выпуска с помощью Android Studio, выполните следующие действия:

  1. В окне проекта щелкните правой кнопкой мыши свое приложение и выберите «Открыть настройки модуля» .
  2. В окне «Структура проекта» в разделе «Модули» на левой панели щелкните модуль, который вы хотите подписать.
  3. Откройте вкладку «Подписание» , затем нажмите « Добавить» . .
  4. Выберите файл хранилища ключей, введите имя для этой конфигурации подписи (поскольку вы можете создать более одной) и введите необходимую информацию.

    Рисунок 7 . Окно создания новой конфигурации подписи.

  5. Откройте вкладку «Типы сборки» .
  6. Нажмите на сборку выпуска .
  7. В разделе Signing Config выберите только что созданную конфигурацию подписи.

    Рисунок 8 . Выберите конфигурацию подписи в Android Studio.

  8. Нажмите ОК .

Теперь каждый раз, когда вы создаете тип сборки выпуска, выбирая параметр в разделе «Сборка» > «Сборка пакетов» / «APK» в Android Studio, IDE будет автоматически подписывать ваше приложение, используя указанную вами конфигурацию подписи. Вы можете найти подписанный APK или пакет приложения в каталоге build/outputs/ внутри каталога проекта создаваемого вами модуля.

Когда вы создаете конфигурацию подписи, ваша информация о подписи включается в виде обычного текста в файлы сборки Gradle. Если вы работаете в команде или публикуете свой код публично, вам следует обеспечить безопасность информации для подписи, удалив ее из файлов сборки и сохранив отдельно. Подробнее о том, как удалить информацию о подписи из файлов сборки, можно прочитать в разделе Удаление информации о подписи из файлов сборки . Дополнительную информацию о обеспечении безопасности данных для подписи см. в разделе «Безопасность ключа» ниже.

Подпишите каждый вкус продукта по-разному

Если в вашем приложении используются варианты продукта и вы хотите подписывать каждый вариант по-разному, вы можете создать дополнительные конфигурации подписи и назначить их по вариантам:

  1. В окне проекта щелкните правой кнопкой мыши свое приложение и выберите «Открыть настройки модуля» .
  2. В окне «Структура проекта» в разделе «Модули» на левой панели щелкните модуль, который вы хотите подписать.
  3. Откройте вкладку «Подписание» , затем нажмите « Добавить» . .
  4. Выберите файл хранилища ключей, введите имя для этой конфигурации подписи (поскольку вы можете создать несколько) и введите необходимую информацию.

    Рисунок 10 . Окно создания новой конфигурации подписи.

  5. Повторяйте шаги 3 и 4 по мере необходимости, пока не создадите все конфигурации подписи.
  6. Откройте вкладку «Ароматы» .
  7. Щелкните вариант, который вы хотите настроить, затем выберите соответствующую конфигурацию подписи в раскрывающемся меню «Конфигурация подписи» .

    Рисунок 11 . Настройте параметры подписи в зависимости от версии продукта.

    Повторите эти действия, чтобы настроить любые дополнительные варианты продукта.

  8. Нажмите ОК .

Вы также можете указать параметры подписи в файлах конфигурации Gradle. Дополнительные сведения см. в разделе Настройка параметров подписи .

Запуск отчета о подписании

Чтобы получить информацию о подписи для каждого варианта вашего приложения, запустите задачу Gradle signingReport в Android Studio:

  1. Выберите «Просмотр» > «Окна инструментов» > Gradle, чтобы открыть окно инструмента Gradle.
  2. Выберите YourApp > Tasks > android > SigningReport, чтобы запустить отчет.

Управляйте собственным ключом подписи

Если вы решите не использовать функцию подписания приложений в Play (только для приложений, созданных до августа 2021 года), вы сможете управлять собственным ключом подписи приложения и хранилищем ключей. Помните, что вы несете ответственность за безопасность ключа и хранилища ключей . Кроме того, ваше приложение не сможет поддерживать пакеты приложений Android, доставку функций Play и доставку ресурсов Play.

Когда вы будете готовы создать свой собственный ключ и хранилище ключей, убедитесь, что вы сначала выбрали надежный пароль для своего хранилища ключей и отдельный надежный пароль для каждого закрытого ключа, хранящегося в хранилище ключей. Вы должны хранить хранилище ключей в безопасном и надежном месте. Если вы потеряете доступ к ключу подписи приложения или ваш ключ будет скомпрометирован, Google не сможет получить для вас ключ подписи приложения, и вы не сможете выпускать новые версии своего приложения для пользователей в качестве обновлений исходного приложения. Дополнительную информацию см. в разделе «Защитите свой ключ» ниже.

Если вы управляете собственным ключом подписи приложения и хранилищем ключей, то при подписании APK вы подпишете его локально, используя ключ подписи приложения, и загрузите подписанный APK непосредственно в Google Play Store для распространения, как показано на рисунке 12.

Рисунок 12 . Подписание приложения, когда вы управляете собственным ключом подписи приложения.

Когда вы используете функцию подписания приложений Google , Google сохраняет ваш ключ подписи в безопасности и гарантирует, что ваши приложения правильно подписаны и могут получать обновления на протяжении всего срока службы. Однако если вы решите управлять ключом подписи приложения самостоятельно, вам следует учитывать несколько моментов.

Рекомендации по подписанию

Вы должны подписывать свое приложение одним и тем же сертификатом на протяжении всего его ожидаемого срока службы. Есть несколько причин, почему вам следует это сделать:

  • Обновление приложения: когда система устанавливает обновление приложения, она сравнивает сертификаты в новой версии с сертификатами в существующей версии. Система разрешает обновление, если сертификаты совпадают. Если вы подписываете новую версию другим сертификатом, вы должны назначить приложению другое имя пакета — в этом случае пользователь устанавливает новую версию как совершенно новое приложение.
  • Модульность приложений: Android позволяет запускать APK-файлы, подписанные одним и тем же сертификатом, в одном и том же процессе, если приложения этого требуют, поэтому система рассматривает их как одно приложение. Таким образом, вы можете развернуть свое приложение в модулях, а пользователи смогут обновлять каждый из модулей независимо.
  • Совместное использование кода и данных посредством разрешений. Android обеспечивает принудительное применение разрешений на основе подписи, поэтому приложение может предоставлять функциональные возможности другому приложению, подписанному указанным сертификатом. Подписывая несколько APK одним и тем же сертификатом и используя проверки разрешений на основе подписей, ваши приложения могут безопасно обмениваться кодом и данными.

Если вы планируете поддерживать обновления приложения, убедитесь, что срок действия вашего ключа подписи приложения превышает ожидаемый срок действия этого приложения. Рекомендуется срок действия 25 лет или более. Когда срок действия вашего ключа истечет, пользователи больше не смогут беспрепятственно обновляться до новых версий вашего приложения.

Если вы планируете публиковать свои приложения в Google Play, ключ, который вы используете для подписи вашего приложения, должен иметь срок действия, заканчивающийся после 22 октября 2033 года. Google Play обеспечивает соблюдение этого требования, чтобы пользователи могли беспрепятственно обновлять приложения при появлении новых версий.

Держите свой ключ в безопасности

Если вы решили самостоятельно управлять ключом подписи приложения и хранилищем ключей и защищать его (вместо того, чтобы использовать функцию подписания приложений в Play ), защита ключа подписи приложения имеет решающее значение как для вас, так и для пользователя. Если вы позволите кому-либо использовать ваш ключ или оставите свое хранилище ключей и пароли в незащищенном месте, чтобы их могла найти и использовать третья сторона, ваша личность автора и доверие пользователя будут поставлены под угрозу.

Если третьей стороне удастся завладеть ключом подписи вашего приложения без вашего ведома или разрешения, этот человек может подписывать и распространять приложения, которые злонамеренно заменяют ваши подлинные приложения или повреждают их. Такой человек также может подписывать и распространять приложения под вашим именем, которые атакуют другие приложения или саму систему, а также повреждают или крадут пользовательские данные.

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

Ваша репутация как разработчика зависит от того, насколько правильно вы всегда обеспечиваете безопасность ключа подписи приложения, пока срок действия ключа не истечет. Вот несколько советов, как сохранить ключ в безопасности:

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

В общем, если вы будете соблюдать здравые меры предосторожности при создании, использовании и хранении ключа, он останется в безопасности.

Удалите информацию о подписи из файлов сборки.

Когда вы создаете конфигурацию подписи, Android Studio добавляет информацию о вашей подписи в виде обычного текста в файлы build.gradle модуля. Если вы работаете в команде или открываете исходный код своего кода, вам следует удалить эту конфиденциальную информацию из файлов сборки, чтобы она не была легкодоступна для других. Для этого вам следует создать отдельный файл свойств для хранения защищенной информации и ссылаться на этот файл в файлах сборки следующим образом:

  1. Создайте конфигурацию подписи и назначьте ее одному или нескольким типам сборки. В этих инструкциях предполагается, что вы настроили единую конфигурацию подписи для типа сборки выпуска, как описано в разделе Настройка процесса сборки для автоматической подписи вашего приложения выше.
  2. Создайте файл с именем keystore.properties в корневом каталоге вашего проекта. Этот файл должен содержать вашу информацию для подписи, а именно:
    storePassword=myStorePassword
    keyPassword=mykeyPassword
    keyAlias=myKeyAlias
    storeFile=myStoreFileLocation
    
  3. В файле build.gradle вашего модуля добавьте код для загрузки файла keystore.properties перед блоком android {} .

    классный

    ...
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    def keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    def keystoreProperties = new Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Котлин

    ...
    import java.util.Properties
    import java.io.FileInputStream
    
    // Create a variable called keystorePropertiesFile, and initialize it to your
    // keystore.properties file, in the rootProject folder.
    val keystorePropertiesFile = rootProject.file("keystore.properties")
    
    // Initialize a new Properties() object called keystoreProperties.
    val keystoreProperties = Properties()
    
    // Load your keystore.properties file into the keystoreProperties object.
    keystoreProperties.load(FileInputStream(keystorePropertiesFile))
    
    android {
        ...
    }
    

    Примечание. Вы можете сохранить файл keystore.properties в другом месте (например, в папке модуля, а не в корневой папке проекта, или на сервере сборки, если вы используете инструмент непрерывной интеграции). В этом случае вам следует изменить приведенный выше код, чтобы правильно инициализировать keystorePropertiesFile используя фактическое расположение файла keystore.properties .

  4. Вы можете обращаться к свойствам, хранящимся в keystoreProperties , используя синтаксис keystoreProperties[' propertyName '] . Измените блок signingConfigs файла build.gradle вашего модуля, чтобы он ссылался на информацию о подписи, хранящуюся в keystoreProperties , используя этот синтаксис.

    классный

    android {
        signingConfigs {
            config {
                keyAlias keystoreProperties['keyAlias']
                keyPassword keystoreProperties['keyPassword']
                storeFile file(keystoreProperties['storeFile'])
                storePassword keystoreProperties['storePassword']
            }
        }
        ...
      }

    Котлин

    android {
        signingConfigs {
            create("config") {
                keyAlias = keystoreProperties["keyAlias"] as String
                keyPassword = keystoreProperties["keyPassword"] as String
                storeFile = file(keystoreProperties["storeFile"] as String)
                storePassword = keystoreProperties["storePassword"] as String
            }
        }
        ...
      }
  5. Откройте окно инструмента «Варианты сборки» и убедитесь, что выбран тип сборки выпуска.
  6. Выберите вариант в разделе «Сборка» > «Сборка пакетов» / «APK», чтобы создать APK или пакет приложения для вашей сборки выпуска. Вы должны увидеть выходные данные сборки в каталоге build/outputs/ вашего модуля.

Поскольку ваши файлы сборки больше не содержат конфиденциальной информации, теперь вы можете включить их в систему контроля версий или загрузить в общую базу кода. Обязательно сохраните файл keystore.properties в безопасности. Это может включать удаление его из вашей системы контроля версий.