Подписывание кода для Android

В этой статье вы узнаете, как подписывать код для Android (APK). Вам нужно будет подписать свое приложение для Android, если вы выбрали Android как одну из платформ при создании и сборки своего проекта упаковки.

Важно!

Если вместо этого вы хотите подписать приложение AAB для распространения в Google Play, см. статью Подписывание своего приложения.

Подготовьте свой компьютер

Для начала вам потребуется предоставить следующую информацию:

Создание ключей

Примечание

Пропустите и перейдите к подписыванию пакета APK, если вы уже сгенерировали ключи и хэш подписи при создании регистрации приложения.

Мы будем использовать keytool.exe (доступный после установки Android Studio, из расположения папки "Drive:\Program Files\Android\Android Studio\jre\bin\keytool.exe"), чтобы создать сертификат для подписи пакета приложения. Keytool используется для управления хранилищем ключей (базой данных) криптографических ключей, цепочек сертификатов X.509 и доверенных сертификатов.

Чтобы сгенерировать ключ, откройте командную строку и выполните следующую команду:

keytool -genkey -alias SIGNATURE_ALIAS -keyalg RSA -keystore PATH_TO_KEYSTORE -keysize 2048 -validity 10000

Параметры:

  • genkey — команда для генерации ключа.
  • alias — псевдоним, который будет использоваться в будущем для ссылки на запись хранилища ключей, содержащую ключи, которые будут сгенерированы.
  • keyalg — имя алгоритма ключа.
  • keystore — имя хранилища ключей, которое вы используете.
  • keysize — размер каждого генерируемого ключа.
  • validity — срок действия ключа как количество дней.

Пример:

  • При подготовке Key Vault параметр PATH_TO_KEYSTORE должен иметь расширение .pfx.

    keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.pfx -keysize 2048 -validity 10000

  • При подготовке к ручной подписи PATH_TO_KEYSTORE должен иметь расширение .jks.

    keytool -genkey -alias powerappswrap -keyalg RSA -keystore powerappswrap.jks -keysize 2048 -validity 10000

Снимок экрана с командой keytool с использованием параметров из приведенного выше примера.

Генерирование хэша подписи

Примечание

Пропустите и перейдите к подписыванию пакета APK, если вы уже сгенерировали ключи и хэш подписи при создании регистрации приложения.

После генерации ключа мы будем использовать команду exportcert в keytool для экспорта сертификата хранилища ключей.

keytool -exportcert -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE | openssl sha1 -binary | openssl base64

Параметры:

  • exportcert — считывает из хранилища ключей сертификат, связанный с псевдонимом, и сохраняет его в файле cert_file. Если файл не указан, сертификат выводится в StdOut.
  • alias — псевдоним, используемый при генерации ключей ранее.
  • keystore — имя хранилища ключей, которое вы используете.
  • openssl — генерирует ключ SHA1 для Android.

Добавьте сгенерированный хэш подписи в URI перенаправления во время регистрации приложения.

Преобразование шестнадцатеричного SHA1 в хэш подписи в кодировке Base64 вручную

Вы можете увидеть следующую ошибку, если ваш хэш подписи неправильно закодирован или неприемлем на портале Azure:

"Хэш подписи должен быть SHA1 в кодировке base64".

При появлении этой ошибки попробуйте сгенерировать хэш подписи, выполнив следующие действия:

  1. Выполните keytool -list -v -alias SIGNATURE_ALIAS -keystore PATH_TO_KEYSTORE, чтобы просмотреть информацию о сертификате в подробном режиме.
  2. Скопируйте значение SHA1 в разделе Отпечатки сертификатов из вывода. Убедитесь, что вы копируете только шестнадцатеричное значение.
    Например: EF:11:45:3D:F1:72:D9:8C:43:32:CD:0A:49:C2:E4:75:2D:B3:2D:9F
  3. Используйте любой доступный конвертер "Шестнадцатеричное значение в Base64", чтобы преобразовать скопированное шестнадцатеричное значение отпечатка сертификата в кодированное значение Base64.
    Пример значения в кодировке Base64: 8CPPeLaz9etdqQyaQubcqsy2Tw=
  4. Скопируйте сгенерированное значение в кодировке Base64 в качестве Хэша подписи на портале Azure во время регистрации приложения.

Подписывание пакета APK

Чтобы подписать пакет APK, мы будем использовать средство apksigner. Это средство позволяет подписывать APK и гарантирует, что подпись пакета APK будет успешно проходить проверку на всех платформах Android, поддерживаемых APK.

Найдите свой apksigner

  1. Проверьте путь SDK Android в Android Studio.

  2. Выберите Инструмент > Диспетчер пакетов SDK > Расположение пакета SDK Android.

    Если вы используете iOS, проверьте файл apksigner в каталоге buildTools Version:

    Перейдите в каталог SDK > build-tools > buildToolsVersion > lib и проверьте файл apksigner.jar

Используйте файл apksigner

Выполните следующую команду, чтобы использовать apksigner и подписать пакет:

apksigner.bat sign --ks PATH_TO_KEYSTORE --ks-key-alias KEY_ALIAS PATH_TO_APK

Параметры:

  • ks — путь к хранилищу ключей.
  • ks-key-alias — путь псевдонима ключа к файлу APK.

При появлении запроса введите пароль.

Дополнительная информация: Средства командной строки Android Studio: apksigner

Распространение приложения

Вы можете разместить пакет в службе распространения, такой как Центр приложений. Для распространения с помощью Microsoft Intune см. Добавление бизнес-приложения Android в Microsoft Intune. Чтобы узнать, как предоставить приложению доступ к службе защиты приложений Intune, см. Предоставить вашему приложению доступ к службе защиты приложений Intune.

См. также