Как изменить подпись приложения android

Функция подписания приложений в Google Play позволяет Google защищать ваш ключ подписи, а также использовать его для

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

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

Как это работает

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

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

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

Описания ключей, объектов и инструментов

Термин Описание
Ключ подписи приложения

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

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

Ключ загрузки

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

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

  • С помощью ключа подписи приложения. Если для подписания приложения вы используете ключ, сгенерированный Google, то ключом загрузки станет тот, которым был подписан первый выпуск.
  • С помощью отдельного ключа загрузки. Если вы предоставили собственный ключ подписи приложения, то в целях безопасности можете сгенерировать новый ключ загрузки. Если вы не хотите этого делать, используйте ключ подписи приложения в качестве ключа загрузки для подписания новых выпусков.
Сертификат (DER или PEM)

Сертификат, который содержит открытый ключ и дополнительную информацию о его владельце. Сертификат открытого ключа позволяет кому угодно узнать, кто подписал набор App Bundle или APK-файл. Этим сертификатом можно делиться, так как он не включает закрытый ключ.

Чтобы зарегистрировать ключи у поставщиков API, вы можете скачать открытый сертификат для ключа подписи и ключа загрузки на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console. Сертификатом открытого ключа можно делиться со всеми, так как он не включает закрытый ключ.

Цифровой отпечаток сертификата

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

Цифровые отпечатки MD5, SHA-1 и SHA-256 сертификатов загрузки и подписи приложения можно найти на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console. Вы также можете получить цифровой отпечаток другого типа. Для этого скачайте оригинальный сертификат в формате DER на той же странице.

Хранилище ключей Java (JKS или KEYSTORE) Хранилище сертификатов безопасности и закрытых ключей.
Инструмент PEPK

Инструмент для экспорта закрытых ключей из хранилища Java и их шифрования для передачи в Google Play.

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

Процесс подписания приложений

Вот как это работает:

  1. Вы подписываете набор App Bundle и загружаете его в Play Console.
  2. Google оптимизирует APK-файлы из вашего набора, а затем подписывает их с помощью ключа подписи приложения.
  3. Google добавляет к манифесту приложения две метки (com.android.stamp.source и com.android.stamp.type), используя инструмент apksigner, а затем подписывает APK-файлы с помощью ключа подписи приложения. Метки, добавленные через apksigner, позволяют определить, кто подписал APK-файлы.
  4. Google доставляет подписанные APK-файлы пользователям.

Как настроить функцию подписания приложений в Google Play и работать с ней

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

Шаг 1. Создайте ключ загрузки

  1. Создайте ключ загрузки, следуя инструкциям.
  2. Подпишите свой набор App Bundle с помощью ключа загрузки.

Шаг 2. Подготовьте выпуск

  1. Подготовьте и внедрите выпуск приложения, следуя инструкциям.
  2. После того как вы выберете тип версии, в разделе «Целостность приложения» появится статус функции подписания приложений в Google Play.
  3. Чтобы продолжить использовать ключ подписи приложения, сгенерированный Google, загрузите набор App Bundle. Вы также можете нажать Изменить ключ подписи приложения и выбрать один из следующих сценариев:
    • Использовать ключ подписи приложения, сгенерированный Google. Более чем в 90 % новых приложений используются ключи подписи, созданные Google. Такие ключи нельзя скачать. Это обеспечивает защиту от потери и раскрытия. Если вы выберете этот вариант, то сможете скачать из App Bundle Explorer APK-файлы. Они подписываются ключом, сгенерированным Google, и их можно распространять через другие каналы.
    • Использовать другой ключ подписи приложения. Вы можете использовать ключ подписи другого приложения из вашего аккаунта разработчика (например, если оно предустановлено на некоторых устройствах) или создать локальную копию ключа. Хранение копии за пределами серверов Google связано с повышенными рисками безопасности. Если вы хотите использовать другой ключ подписи, доступны следующие варианты:
      • Использовать ключ подписи другого приложения из этого аккаунта разработчика.
      • Экспортировать и загрузить ключ из Java Keystore.
      • Экспортировать и загрузить ключ (не из Java Keystore).
      • Отключить функцию подписания приложений в Google Play (используйте этот вариант, только если планируете обновить ключ подписи приложения и зарегистрировать его в функции подписания).
  4. Завершите подготовку и внедрение выпуска.

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

Шаг 3. Зарегистрируйте ключ подписи приложения у поставщика API

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

  1. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  2. Прокрутите страницу вниз до раздела «Сертификат для ключа подписи приложения» и скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
    • Если поставщик API требует другой тип цифрового отпечатка, вы можете скачать оригинальный сертификат в формате DER и преобразовать его с помощью инструментов, указанных поставщиком.

Требования к ключу подписи приложения

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

Инструкции для приложений, созданных до августа 2021 года

Шаг 1. Настройте функцию подписания приложений в Google Play

  1. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  2. Если вы ещё этого не сделали, ознакомьтесь с Условиями использования функции подписания приложений в Google Play и нажмите Принять.

Шаг 2. Отправьте в Google копию оригинального ключа и создайте ключ загрузки

  1. Найдите оригинальный ключ подписи приложения.
  2. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  3. Экспортируйте и загрузите ключ подписи приложения тем способом, который больше всего подходит для вашего процесса выпуска.

Шаг 3. Создайте ключ загрузки (необязательно, но рекомендуется)

  1. Создайте ключ загрузки и загрузите сертификат в Google Play.
    • В качестве ключа загрузки можно также использовать ключ подписи приложения.
  2. Скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
    • Для проведения тестирования вам может потребоваться зарегистрировать у поставщика API сертификат ключа загрузки с помощью цифрового отпечатка сертификата и ключа подписи приложения.

Шаг 4. Подпишите следующее обновление своего приложения ключом загрузки

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

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

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

Это может потребоваться, если вы не можете поделиться существующим ключом. Учитывайте следующее:

  • После выполнения процедуры вам будет необходимо загружать две группы файлов в каждый выпуск приложения.
  • Вам потребуется загружать набор App Bundle и APK-файл, подписанный устаревшим ключом, в каждый выпуск приложения. С помощью наборов App Bundle Google Play будет генерировать APK-файлы, подписанные новым ключом, для устройств с Android R* (API уровня 30) и более поздних версий. Ваши устаревшие APK-файлы будут использоваться для более ранних версий Android (API уровня 29 и ниже).

*Если ваше приложение использует идентификаторы sharedUserId, рекомендуем применять обновленный ключ для установки и обновлений на устройствах с Android T (API уровня 33) и более поздних версий. Для этого укажите подходящую минимальную версию SDK в параметрах набора.

Шаг 1. Загрузите новый ключ, а затем создайте и загрузите файл подтверждения смены

Это необходимо, чтобы устройства Android доверяли новому ключу подписи.

  1. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  2. Перейдите на вкладку Подписи приложений.
  3. Нажмите Показать дополнительные параметры и выберите Использовать новый ключ подписи приложения (требуется загрузка двух групп файлов в каждый новый выпуск).
  4. Выберите нужный вариант: использовать ключ подписи другого приложения из этого аккаунта разработчика или загрузить новый ключ подписи приложения из Android Studio, Java Keystore или другого хранилища.
  5. Следуя инструкциям на экране, скачайте и запустите инструмент PEPK.
  6. Загрузите полученный ZIP-архив в Play Console, выбрав Загрузить созданный ZIP-архив.
  7. Рядом с пятым пунктом «Загрузите файл подтверждения смены. Тогда устройства Android смогут определять, что новый ключ надежен» нажмите Показать инструкции.
  8. Скачайте APKSigner и создайте файл подтверждения смены, выполнив следующую команду:
    • $ apksigner rotate --out /path/to/new/file --old-signer --ks old-signer-jks --set-rollback ture --new-signer --ks new-signer-jks --set-rollback true
  9. Нажмите Загрузить сгенерированный файл подтверждения смены и укажите файл, созданный на шаге 8.
  10. Нажмите Сохранить.

Как создать ключ загрузки и обновить хранилища ключей

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

Вы можете создать ключ загрузки, когда будете включать функцию подписания приложений в Google Play, или сгенерировать его позже на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).

Вот как создать ключ загрузки:

  1. Следуйте инструкциям на сайте для разработчиков Android. Храните ключ в безопасном месте.
  2. Экспортируйте сертификат для ключа загрузки в формате PEM. В следующем примере команды вместо аргументов, выделенных подчеркиванием, укажите свои значения:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Когда в процессе выпуска появится запрос, загрузите сертификат, чтобы зарегистрировать его в Google.

Если вы используете ключ загрузки:

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

Требования к ключу загрузки

  • Ключ RSA размером не менее 2048 бит.

Обновление хранилищ ключей

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

  • локальная система;
  • защищенный локальный сервер (с различными списками контроля доступа);
  • облачная система (с различными списками контроля доступа);
  • специальные сервисы по управлению ключами;
  • хранилища Git.

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

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

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

Вот примеры таких ситуаций:

  • Вам нужен более криптостойкий ключ.
  • Ключ подписи приложения взломан.

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

Примечание. Запрос на обновление ключа подписи для новых установок приложения в Play Console не связан с ротацией ключей в схеме подписания APK-файлов версии 3 для Android P и более поздних версий.

Важные примечания, касающиеся обновления ключей

Прежде чем запрашивать обновление ключа, важно понять, какие изменения это повлечет.

  • Если в нескольких приложениях вам нужны одинаковые данные или код и поэтому вы используете один ключ подписи, обновите приложения. Это позволит им распознавать сертификаты как нового, так и устаревшего ключа.
  • Если в приложении используются API, перед публикацией его обновления обязательно зарегистрируйте сертификаты для нового и устаревшего ключей подписи у поставщиков API. Сертификаты доступны на странице Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения) в Play Console.  
  • Пользователи вашего приложения, которые скачивают обновления через файлообменные сети, смогут устанавливать только обновления, подписанные тем же ключом, что и версия приложения на их устройствах. Если приложения нельзя обновить из-за того, что установленная версия подписана другим ключом, пользователи могут удалить и переустановить его, чтобы получать обновления.

Как запросить обновление ключа для всех установок на устройствах с Android T (API уровня 33) и более поздними версиями (рекомендуется)

Для всех установок каждого приложения на устройствах с Android T (API уровня 33) ключ подписи можно обновлять только один раз в год.

Если по своему запросу вы получили новый ключ, он будет использоваться для подписания всех установок и обновлений приложения на устройствах с Android T (API уровня 33) и более поздними версиями. При этом устаревший ключ будет применяться, чтобы подписывать установки и обновления для устройств с более ранними версиями ОС Android.

  1. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  2. В карточке «Обновление ключа подписи приложения» выберите Запросить обновление ключа.
  3. Отметьте вариант, при котором будет обновлен ключ подписи для всех установок приложения на устройствах с Android T и более поздними версиями.
  4. Разрешите Google создать новый ключ подписи приложения (рекомендуется) или загрузите его.
    • Если вы обновили ключ подписи приложения, который совпадал с ключом загрузки, можно продолжить использовать прежний ключ загрузки или сгенерировать новый.
  5. Укажите причину, по которой вы запрашиваете обновление ключа подписи приложения.
  6. При необходимости зарегистрируйте новый ключ подписи приложения у поставщиков API.

Как запросить обновление ключа для новых установок (подходит не для всех приложений)

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

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

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

  1. Откройте Play Console и перейдите на страницу Функция подписания приложений в Google Play (Выпуск > Настройка > Целостность приложения).
  2. В карточке «Обновление ключа подписи приложения» выберите Запросить обновление ключа.
  3. Отметьте вариант, при котором будет обновлен ключ подписи для всех новых установок приложения.
  4. Разрешите Google создать новый ключ подписи приложения (рекомендуется) или загрузите его.
    • Если вы обновили ключ подписи приложения, который совпадал с ключом загрузки, используйте прежний ключ загрузки или сгенерируйте новый.
  5. Укажите причину, по которой вы запрашиваете обновление ключа подписи приложения.
  6. При необходимости зарегистрируйте новый ключ подписи приложения у поставщиков API.

Рекомендации

  • Если вы также опубликовали приложение за пределами Google Play или собираетесь это сделать и хотите использовать тот же ключ подписи, у вас есть два варианта:
    • Google сгенерирует ключ (рекомендуемый вариант), после чего вы сможете скачать из App Bundle Explorer подписанный универсальный APK-файл и использовать его за пределами Google Play.
    • Вы сами сгенерируете ключ подписи приложения, который будете использовать во всех магазинах, и загрузите его копию в Google при настройке функции подписания приложений в Google Play.
  • Чтобы защитить свой аккаунт, включите двухэтапную аутентификацию для всех аккаунтов, у которых есть доступ к Play Console.
  • После публикации набора App Bundle в нужной версии откройте App Bundle Explorer, чтобы получить доступ к устанавливаемым APK-файлам, которые Google генерирует из набора. Вы можете:
    • Скопировать ссылку для внутреннего доступа к приложению и поделиться ей. Так можно быстро проверить, какой контент будет установлен из вашего набора App Bundle на то или иное устройство.
    • Скачать универсальный APK-файл, подписанный ключом подписи приложения, который хранится в Google и может быть установлен на любое поддерживаемое вашим приложением устройство.
    • Скачать ZIP-архив со всеми APK-файлами для определенного устройства. Они подписаны ключом, который хранится в Google. Вы можете установить эти APK-файлы на устройство с помощью команды adb install-multiple *.apk.
  • В целях безопасности сгенерируйте новый ключ загрузки, который отличается от ключа подписи приложения.
  • Если вы используете API Google, можете зарегистрировать для своего приложения сертификаты ключа загрузки и ключа подписи в Google Cloud Console.
  • Если вы используете Android App Links, убедитесь, что ключи обновлены в соответствующем JSON-файле протокола связи цифровых объектов на вашем сайте.

Что делать, если ключ загрузки утерян или взломан

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

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

Владелец аккаунта может отменить в Play Console запрос на сброс ключа.

Важно! Сброс ключа загрузки не затрагивает ключ подписи приложения, с помощью которого Google Play подписывает APK-файлы перед отправкой пользователям.

Схема подписи APK версии 4

Устройства с Android 11 и более поздними версиями поддерживают новую схему подписи APK версии 4. В рамках функции подписания приложений в Google Play будет выпущена подпись версии 4 для выбранных приложений. Благодаря этому в них можно будет использовать функции повышения производительности, которые скоро будут доступны на новых устройствах. Это не должно повлиять на пользователей, и никаких действий со стороны разработчика не требуется.

Эта информация оказалась полезной?

Как можно улучшить эту статью?

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

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

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

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

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

Этот совет основан на вопросах, которые наша команда по связям с разработчиками слышала на конференциях, в онлайн-форумах и наших чатах 1:1.

Давайте начнем с самой убедительной причины для перехода на подписание приложений с помощью Google Play:

1. Я потерял ключ, используемый для подписи артефактов релиза, которые я загружаю в Google Play. Какие у меня есть варианты?

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

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

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

2. Почему Google хочет, чтобы разработчики переключились на подписание приложений с помощью Google Play?

Первым приоритетом Google Play является создание безопасной и надежной платформы для миллиардов пользователей и миллионов разработчиков.

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

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

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

И наконец, разделение формата публикации (с использованием пакетов приложений для Android) и формата обслуживания (разделенные APK) открывает преимущества как для разработчиков, так и для пользователей: от повышения безопасности до оптимизации, снижения сложности и фрагментации. Однако для этого Play должен иметь возможность подписывать обслуживающие артефакты.

Некоторые примеры функций, доступных прямо сейчас, — это автоматическая оптимизация размера для доставки приложений, а также новые настраиваемые параметры доставки модулей в вашем приложении.

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

Несмотря на то, что мы продолжаем совершенствовать наш стек обслуживания, мы не изменяем и не распространяем код вашего приложения без вашего ведома и одобрения, и новые оптимизации, которые выполняет Play, доступны для вашего контроля в bundletool с открытым исходным кодом. Далее в этом часто FAQ мы обсудим некоторые метаданные (те, которые не влияют на работу вашего приложения), которые вы можете увидеть между артефактами, загруженными из Play и созданными локально.

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

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

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

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

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

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

Обратите внимание, что текущий процесс обновления ключа не использует преимущества функции ротации ключа, введенной в Android 9 (Pie) и выше. В настоящее время мы изучаем поддержку ротации ключей с помощью подписи приложения версии 3 для устройств на этих версиях ОС и сообщим об этом сообществу разработчиков, как только оно будет готово, в отдельном объявлении.

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

Без подписи приложения в Google Play: нет никакой концепции отдельного “ключа загрузки”, поэтому, если ваш ключ подписи выпуска утечет, вы можете оказаться в большой беде: кто-то может создать вредоносные или несанкционированные версии вашего приложения, которые будут неразличимы (и обновляемы!) от вашего оригинального APK.

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

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

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

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

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

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

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

· Не выбирайте опцию, в которой Google Play создает ключ подписи приложения за вас. Вместо этого создайте свой ключ подписи локально на вашем компьютере.

· Надежно перенесите свой ключ в Google Play и не удаляйте его с вашего компьютера.

· Храните ключ в надежном месте, чтобы он не просочился к третьим лицам.

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

Эти шаги описаны в документации. В инструкции о том, как ”выбрать существующее приложение”, показано, как зашифровать свой ключ подписи, чтобы загрузить его на консоль Google Play из Android Studio или командной строки.

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

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

6. Как я могу быть уверен, что мой закрытый ключ не будет перехвачен при передаче его в Google Play?

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

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

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

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

Используйте только версии PEPK, загруженные с консоли Google Play, никогда не загружайте его или его источник с непроверенных сторонних веб-сайтов.

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

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

Доступ к ключам регулируется строгими ACL и аудиторскими следами с защитой от несанкционированного доступа для всех операций.

Все артефакты, созданные и подписанные ключом разработчика, становятся доступными в консоли Google Play для проверки/аттестации.

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

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

Если вы хотите использовать сервисы или API, которые требуют регистрации с хэшем публичного сертификата вашего приложения, вы можете просмотреть или загрузить “отпечатки пальцев” публичного сертификата из раздела “App signing“ консоли Google Play:

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

Большинство сервисов позволяют включить несколько сертификатов для приложения, поэтому вы можете продолжить тестирование с локально построенными APK, а также APK, генерируемыми Google Play.

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

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

• Для всех приложений, загруженных в Google Play, Play добавлял метаданные безопасности после блока подписи, чтобы включить такие функции, как авторизованный обмен приложениями P2P. Мы объявили об этом первоначально в своем блоге в 2017 году.

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

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

Вы можете локально использовать bundletool с открытым исходным кодом для генерации APK из пакетов точно так же, как это делает Play на сервере. Метаданные исходного штампа, добавленные bundletool, не будут подписаны ключом Google. Другие исходные подписи будут возможны, когда ApkSigner будет обновлен со следующим выпуском Android.

10. Как я могу получить доступ к последним артефактам, которые Google Play распространяет среди пользователей моего приложения?

Есть несколько вариантов, доступных для вас:

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

• Вы также можете загрузить подписанные APK-файлы для конкретных устройств из проводника пакетов приложений консоли Google Play.

11. Как я могу продолжать распространять свое приложение в других магазинах, если я хочу использовать подпись приложения в Google Play?

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

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

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

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

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

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

12. Я занят работой над функционалом, и все это звучит сложно. Нужно ли мне переключаться на пакеты приложений для Android или использовать расширенные функции, такие как динамическая доставка?

Нет, вы не должны делать все сразу.

Вы можете выбрать подписание приложений от Google Play и продолжить публикацию APK. Когда вы будете готовы, вы можете начать публиковать пакеты приложений для Android.

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

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

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

Перевод: Лебедев Даниил.

Еще больше полезной и нужной информации вы найдете в нашем Телеграм-канале по ссылке:

APK Signing Process

To manually sign an Android APK file run these three commands:

  1. Generate Keystore file

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
    
  2. Sign Your APK file using jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
    
  3. Align Signed APK using zipalign tool

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH
    

STEP 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

Example:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

keystore password : yourApp@123
key password : yourApp@123

CMD O/P

D:ruSignedBuildsMySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:ruSignedBuildsMySignedApp>

STEP 2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore
KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

Example

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:ruSignedBuildsMySignedAppid.keystore D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk id

CMD O/P

D:ruSignedBuildsMySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:ruSignedBuildsMySignedAppid.keystore D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

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-02-07) or after an
y future revocation date.

D:ruSignedBuildsMySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

Example

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O/P

D:ruSignedBuildsMySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:ruSignedBuildsMySignedApp>

STEP 3


Align the final APK package using zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Example

zipalign -v 4 D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk D:ruSignedBuildsMySignedAppMySignedApp.apk

CMD O/P

D:Androidandroid-sdkbuild-tools19.1.0>zipalign -v 4 D:ruru_docSigned_apkMySignedApp28.09.16
_prod_playstoreMySignedAppS1-release-unsigned.apk D:ruru_docSigned_apkMySignedApp28.09.16_prod
_playstoreMySignedApp.apk
Verifying alignment of D:ruSignedBuildsMySignedAppMySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:Androidandroid-sdkbuild-tools19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

Example

zipalign -c -v 4 D:ruSignedBuildsMySignedAppMySignedApp.apk

CMD O/P

D:Androidandroid-sdkbuild-tools19.1.0>zipalign -c -v 4 D:ruSignedBuildsMySignedAppMySignedApp.apk
Verifying alignment of D:ruSignedBuildsMySignedAppMySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:Androidandroid-sdkbuild-tools19.1.0>

Note:

The verify command is just to check whether APK is built and signed correctly!

References

  • signing-manually
  • androidapk-code-signing-process

I hope this will help one and all :)

APK Signing Process

To manually sign an Android APK file run these three commands:

  1. Generate Keystore file

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
    
  2. Sign Your APK file using jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
    
  3. Align Signed APK using zipalign tool

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH
    

STEP 1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

Example:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

keystore password : yourApp@123
key password : yourApp@123

CMD O/P

D:ruSignedBuildsMySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:ruSignedBuildsMySignedApp>

STEP 2


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore
KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

Example

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:ruSignedBuildsMySignedAppid.keystore D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk id

CMD O/P

D:ruSignedBuildsMySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:ruSignedBuildsMySignedAppid.keystore D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

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-02-07) or after an
y future revocation date.

D:ruSignedBuildsMySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

Example

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O/P

D:ruSignedBuildsMySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:ruSignedBuildsMySignedApp>

STEP 3


Align the final APK package using zipalign

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

Example

zipalign -v 4 D:ruSignedBuildsMySignedAppMySignedAppS1-release-unsigned.apk D:ruSignedBuildsMySignedAppMySignedApp.apk

CMD O/P

D:Androidandroid-sdkbuild-tools19.1.0>zipalign -v 4 D:ruru_docSigned_apkMySignedApp28.09.16
_prod_playstoreMySignedAppS1-release-unsigned.apk D:ruru_docSigned_apkMySignedApp28.09.16_prod
_playstoreMySignedApp.apk
Verifying alignment of D:ruSignedBuildsMySignedAppMySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:Androidandroid-sdkbuild-tools19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

Example

zipalign -c -v 4 D:ruSignedBuildsMySignedAppMySignedApp.apk

CMD O/P

D:Androidandroid-sdkbuild-tools19.1.0>zipalign -c -v 4 D:ruSignedBuildsMySignedAppMySignedApp.apk
Verifying alignment of D:ruSignedBuildsMySignedAppMySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:Androidandroid-sdkbuild-tools19.1.0>

Note:

The verify command is just to check whether APK is built and signed correctly!

References

  • signing-manually
  • androidapk-code-signing-process

I hope this will help one and all :)

каталог

  • Опасности вторичной упаковки
  • Механизм подписи APK
    • Нужно знать фон
    • 1. Просмотр файла META-INF
    • 2. Сначала посмотрите на первый файл MANIFEST.MF
    • 3. Глядя на второй файл CERT.SF
    • 4. Наконец, посмотрите на третий файл CERT.SF
    • резюме
  • Проверьте, можно ли заменить подпись
    • Заменить шаг подписи
  • Метод ремонта

Опасности вторичной упаковки

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

  1. Вставьте свое собственное объявление или удалите оригинальное объявление;
  2. Вредоносный код, вредоносные отчисления, троянские кони и т.д .;
  3. Изменить оригинальную логику оплаты;

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

Механизм подписи APK

Механизм подписи APK, разработанный Google, призван предотвратить две проблемы:

  • Не позволяйте другим изменять пакет APK, чтобы предотвратить вторичную упаковку после декомпиляции;
    Как запретить другим упаковывать его снова? При установке APK в систему Android, он сначала проверит, есть ли подпись и может ли подпись совпадать;
  • Система Android не может устанавливать APK с тем же именем пакета, но разными сигнатурами при установке пакетов APK;

Следующее начинает анализировать процесс подписи APK:

Нужно знать фон

Пойди в Baidu самостоятельно, чтобы понять концепцию;

  • Сводка данных (отпечаток данных), алгоритм симметричного шифрования MD5 SHA-1
  • Алгоритм асимметричного шифрования
  • Цифровая подпись, цифровой сертификат
  • Подпишите пакеты APK вручную

Измените суффикс пакета .apk на .zip, откройте папку после распаковки и найдите каталог META-INF.
1552062-20190411151458609-1184006787.png

Подпись начинается вокруг этих трех документов.

2. Сначала посмотрите на первый файл MANIFEST.MF

Этот файл содержит сводные значения данных всех файлов в файле APK. Это эквивалентно дактилоскопии каждого отдельного (кроме этих трех) файлов.

3. Глядя на второй файл CERT.SF

Подобно файлу MANIFEST.MF, единственное отличие состоит в том, что есть еще одна строкаSHA1-Digest-Manifest: KDerPmANkkB5mxceo/t5oXRGApg=, Эта строка является сводкой данных MANIFEST.MF.

4. Наконец, посмотрите на третий файл CERT.SF

Рассчитайте зашифрованное значение предыдущего файла CERT.SF с закрытым ключом, которое называется подписью, поэтому этот файл содержит подпись и открытый ключ;

Если это в системе Windows, рекомендуется использовать программное обеспечение cmder.exe, чтобы использовать следующую команду.

D:  ProgramFiles  cmder> openssl pkcs7 -информировать DER -в "C:  app-debug-copy  META-INF  CERT.RSA" -noout -print_certs -text
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=Android Debug, O=Android, C=US
        Validity
            Not Before: Dec 27 09:26:22 2018 GMT
            Not After : Dec 19 09:26:22 2048 GMT
        Subject: CN=Android Debug, O=Android, C=US
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                Modulus:
                    00:89:e0:b4:29:a9:62:b1:44:48:b8:35:f2:8a:06:
                    91:c7:36:44:1a:d2:b3:97:fd:58:b5:84:35:fc:83:
                    09:50:f5:85:83:d9:bc:12:a8:da:da:cf:f0:10:d0:
                    4d:9f:a5:9d:7f:de:b6:4e:1e:94:36:c4:f4:44:45:
                    4e:44:f5:97:9f:f3:62:3f:5f:9d:ce:a6:18:73:22:
                    62:28:79:f7:46:f8:d6:f7:ca:46:e3:3f:dd:a8:ac:
                    b7:aa:cb:77:7c:47:16:89:d1:d5:f8:47:e5:21:28:
                    87:f8:a6:dd:ee:ed:01:da:b5:06:49:04:19:49:46:
                    d8:0a:a6:bb:b4:b5:c9:56:79
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha1WithRSAEncryption
         79:3c:29:c5:3c:e7:d8:28:e1:5c:2a:1d:ce:31:cb:e6:a5:09:
         d0:10:d8:e5:74:e9:b5:80:4a:63:76:f4:67:ee:8c:f1:eb:04:
         8f:23:f4:f6:c2:f7:a5:99:af:c5:be:8f:70:6d:dc:3e:b3:db:
         ca:b2:64:e1:0c:ca:ce:fe:16:1f:3b:00:83:b5:f8:be:8a:b4:
         7e:a9:94:fe:77:1f:67:ff:4f:54:87:66:f4:97:be:ce:38:54:
         51:b4:ce:a8:23:60:92:e3:bf:5d:21:11:50:c9:c2:40:b4:69:
         89:fe:4f:66:84:17:42:91:af:af:bd:e9:47:24:f8:db:74:70:
         d0:87

Обзор содержания сертификата:
1552062-20190411161507516-758274366.png

Команда, используемая для управления хранилищем закрытого ключа:

D:  ProgramFiles  cmder> keytool -printcert -file "C:  app-debug-copy  META-INF  CERT.RSA"
 Владелец: C = US, O = Android, CN = Android Debug
 Издатель: C = US, O = Android, CN = Android Debug
 Серийный номер: 1
 Действительно с четверг 27 декабря 17:26:22 CST 2018 по субботу 19 декабря 17:26:22 CST 2048
 Сертификат отпечатка пальца:
         MD5:  41:41:89:25:4C:9B:91:6D:16:91:20:6C:1D:D7:61:2F
         SHA1: 73:FC:5A:9F:5D:7A:CC:93:14:8D:F1:13:37:E6:11:C2:86:A4:3D:34
         SHA256: 32:33:24:4F:1C:4E:6E:78:3F:F2:C4:59:CD:19:9F:43:BC:AC:1A:23:CB:78:72:9A:0E:61:C9:B3:5D:4C:B9:C1
 Название алгоритма подписи: SHA1 с RSA
 Алгоритм открытого ключа субъекта: 1024-битный ключ RSA
 версия 1

резюме

После создания APK подпись не может быть изменена, так как нет закрытого ключа. Но он может заменить подпись, потому что система Android проверяет правильность подписи только при установке APK. (Это всего лишь мое личное предположение, и позже я углублюсь в проверку исходного кода системы, и настоящий молоток — это правда или ложь)

Процесс подписания можно представить как поток обработки отправителя и получателя, и это также двустороннее действие, которое можно грубо понимать как следующий поток:
1552062-20190411162451701-364955699.png

Вы можете заменить клиента 1 на изображении выше процессом упаковки APK и заменить сервер процессом установки APK на телефонах Android.Если система хранит открытый ключ в CERT.RSA, а значение хеш-функции расшифровывается в исходном apk и файле CERT.SF. Если значение Hash не соответствует, оно не будет установлено.

Проверьте, можно ли заменить подпись

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

  • Пакет APK не делает проверку подписи
    Просто замените подпись. Шаги по замене подписи будут описаны ниже;

  • Пакет APK подписан
    • проверка кода Java
      Сложность состоит в том, чтобы найти проверенный код JAVA, просто закомментируйте его;
    • Проверка .so файла
      Сложность состоит в том, чтобы найти проверенный код C, просто закомментируйте его;
    • пак
      Трудность заключается в том, чтобы сначала распаковать;

Заменить шаги подписи

Инструмент:
AndroidKiller_v1.3.1 (адрес загрузки:https://www.52pojie.cn/thread-319641-1-1.html)

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

Я обычно изменяю номер версии, чтобы доказать, что он может быть переупакован:
После декомпиляции измените номер версии непосредственно в AndroidManifest.xml. Если поля versionCode и versionName не отображаются в файле AndroidManifest.xml, откройте его в файле apktool.yml и найдите соответствующую модификацию. Размер номера поля versionName является достаточным.

Метод ремонта

  1. Подпись проверки уровня SO
  2. Проверка подписи сети
  3. АПК подкрепление

Перепечатано по адресу: https://www.cnblogs.com/mysticbinary/articles/10607942.html.

В этом уроке:

— создаем ключи и подписываем приложение

Тема этого урока не относится непосредственно к программированию. И вполне себе можно кодить без этих знаний. Но для общего развития, думаю, об этом все-таки стоит поговорить. Данные знания пригодятся вам, например, когда будете делать приложение с гугл-картой, или когда будете выкладывать свое творение на маркет.

Подпись приложения

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

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

Итак, приложение обязательно должно быть подписанным, и Eclipse любезно берет это на себя. Он подписывает их debug-ключом. Раньше срок его действия был всего один год. Android проверяет срок действия ключа только при установке. Т.е. если вы установили приложение и срок действия ключа истек, вы все равно сможете использовать установленное приложение. А вот установить или обновить приложение, подписанное истекшим ключом, не получится. Система выдаст ошибку.

Сейчас срок debug-ключа равен 30 лет. Но приложение, подписанное debug-ключом, не получится опубликовать на маркете. А значит, нам надо будет создавать свой ключ и подписывать им приложение.

keytool

Для создания ключа нам понадобится утилита keytool. Ее можно найти по адресу <папка с Java>bin. Она умеет создавать новые ключи и показывать информацию о уже существующих. Давайте сначала попробуем посмотреть информацию о существующем ключе. Для этого возьмем тот самый debug-ключ, который используется для подписи приложений по умолчанию. Узнать где он находится можно в настройках Eclipse:  Window > Preferences >Android > Build.

Файл debug.keystore имеет расширение keystore. Это можно перевести как хранилище ключей. Это действительно так, один такой файл может содержать в себе несколько ключей. Для того чтобы обратится к конкретному ключу внутри хранилища используется alias (алиас, можно рассматривать его как имя ключа).

Посмотрим, какие ключи есть в хранилище debug.keystore. Используем команду list. С помощью параметров keystore и storepass укажем имя файла хранилища и пароль к хранилищу:

keytool -list -keystore debug.keystore -storepass android

 Мы видим, что здесь хранится один ключ с алиасом androiddebugkey, и создан он был 26.08.2012. Этот ключ и используется Eclipse-ом для подписи вашего приложения по умолчанию. Хранилище и ключ имеют одинаковый пароль — android.

Давайте создадим свой ключ. Для этого используем команду genkey и к ней идет куча параметров.

keytool -genkey -keystore mykeys.keystore -storepass spassword -alias mykey1 -keypass kpassword1 -dname “CN=Dmitry Vinogradov O=StartAndroid C=RU” -validity 10000

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

Именно эти вышеперечисленные параметры мы и задали в скрипте.

keystore — имя файла хранилища
storepass — пароль к хранилищу
alias — алиас создаваемого ключа
keypass — пароль к ключу
dname — информация о владельце ключа
validity — срок действия ключа (в днях)

dname задается в определенном формате. Я указал только имя, организацию и страну.

После выполнения этой команды в хранилище mykeys.keystore создался ключ с вышеуказанными параметрами. Если указанное хранилище не существует, то оно будет создано.

Теперь давайте снова используем команду list и поглядим на только что созданный ключ

keytool -list -keystore mykeys.keystore -storepass spassword

Видим, что внутри все так, как мы и создавали — один ключ с алиасом mykey1.

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

keytool -genkey -keystore mykeys.keystore -alias mykey2 -validity 10000

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

Функционально разницы нет, но при таком способе вам не надо знать формат ввода параметра dname (утилита все спросит сама), и посторонним не видны пароли, которые вы вводили.

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

keytool -list -keystore mykeys.keystore

Обратите внимание, что я не ввел пароль от хранилища (например, чтобы не «светить» его). Утилита спросит меня:

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

Команду list можно еще выполнить с параметром v. Этот параметр добавляет информативности.

Теперь для каждого ключа виден не только алиас и дата создания, но и инфа о владельце, срок действия и пр.

Параметр v также можно использовать и с командой genkey. После создания ключа будет выведено немного информации о нем в консоль.

jarsigner

Итак, разобрались с keytool. Знаем, как создавать хранилище с ключами и как посмотреть инфу о существующих. Осталось узнать, как подписать приложение ключом. Для этого используется другая утилита — jarsigner.

Скрипт подписи выглядит так:

jarsigner -keystore mykeys.keystore -storepass spassword -keypass kpassword1 Package1.apk mykey1

Имена параметров нам знакомы по keytool: хранилище (keystore), пароль (storepass) к нему и пароль (keypass) к ключу. А последние два параметра – это имя APK-файла, который вы хотите подписать и алиас ключа из указанного хранилища, который вы хотите использовать для подписи.

После этого приложение будет подписано и система примет его к установке.

Ради интереса давайте попробуем установить неподписанный APK. Чтобы создать его надо щелкнуть правой кнопкой мыши на проекте в Eclipse и выбрать Android tools > Export Unsigned Application Package. Далее указываем путь, куда сохранить APK-файл. Eclipse создает приложение из проекта и сохраняет его в указанный каталог. После этого он выводит сообщение, что перед публикацией приложения необходимо его подписать и сжать (утилитой zipalign).

Попробуем установить приложение на эмулятор с помощью adb. Получаем ошибку Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]:

Система обнаружила, что приложение не подписано.

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

Визард

Eclipse предоставляет визард, который позволяет реализовать все вышеописанные шаги по подготовке приложения к установке. Для этого надо на проекте в Eclipse щелкнуть правой кнопкой и выбрать Android tools > Export Signed Application Package.

Визард на всякий случай уточнит проект

Затем надо выбрать: использовать существующее хранилище или создавать новое. Если используем существующее, то выбираем его и вводим пароль к этому хранилищу.

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

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

Осталось указать путь и имя файла, куда Eclipse сохранит готовое, подписанное и сжатое приложение. Заодно он сразу показывает срок действия сертификата.

Жмем Finish и получаем готовое приложение, которое можно публиковать на маркете.

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

В этом случае вы указываете, что хотите создать хранилище

Далее надо создать ключ

Здесь вы указываете алиас, пароль, срок действия (в годах)  и инфу о владельце.

Ну и остается указать путь к создаваемому файлу

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

По поводу срока действия ключа, в хелпе пишут, что рекомендуется ставить 25 лет. И что при публикации приложения на маркете, проверяется, что срок действия закончится позднее, чем 22 октября 2033. Думаю, эта дата будет периодически сдвигаться.

На следующем уроке:

— разбираемся, что такое Package для приложения


Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Compose, Kotlin, RxJava, Dagger, Тестирование, Performance 

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня


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

Как подписать приложение на Android?

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

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

22 колода 2020 г.

Что нужно сделать для создания нового приложения для Android?

Как шаг за шагом создать приложение для Android:

  1. Шаг 1. Начните с Android Studio. …
  2. Шаг 2. Установка Java Development Kit (JDK)…
  3. Шаг 3: Начните свой проект. …
  4. Шаг 4: Выберите Activity. …
  5. Шаг 6: Отредактируйте приветственное сообщение. …
  6. Шаг 7: Добавление кнопки в вашу деятельность. …
  7. Шаг 8: Протестируйте свое приложение.

3 сред. 2018 г.

Какие основные задачи возникают при публикации мобильного приложения?

Когда вы публикуете приложение для Android, вы выполняете две основные задачи: вы готовите приложение к выпуску.

Выпуск через магазин приложений

  • Готовим рекламные материалы. …
  • Настройка параметров и загрузка ресурсов. …
  • Публикация релизной версии вашего приложения.

25 сред. 2020 г.

Как получить ключ подписи приложения?

Вот где найти сертификат:

  1. Откройте Play Console.
  2. В меню слева выберите Выпуск> Настройка> Целостность приложения.
  3. Прокрутите до раздела «Сертификат ключа подписи приложения» и скопируйте отпечатки пальцев (MD5, SHA-1 и SHA-256) вашего сертификата подписи приложения.

Что означает подписание приложения?

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

Как подписать APK вручную?

Ручной процесс:

  1. Шаг 1. Создайте хранилище ключей (только один раз). Вам нужно создать хранилище ключей один раз и использовать его для подписи своего неподписанного apk. …
  2. Шаг 2 или 4: Zipalign. zipalign, который является инструментом Android SDK, который находится, например, в% ANDROID_HOME% / sdk / build-tools / 24.0. …
  3. Шаг 3: подпишите и подтвердите. Используя инструменты сборки 24.0.2 и старше.

16 окт. 2016 г.

Какие разрешения необходимы для получения местоположения в Android?

Если вашему приложению требуется доступ к местоположению пользователя, вы должны запросить разрешение, добавив в свое приложение соответствующее разрешение для определения местоположения Android. Android предлагает два разрешения на местоположение: ACCESS_COARSE_LOCATION и ACCESS_FINE_LOCATION.

Как изменить подпись в приложениях для Android?

Как правильно переназначить подпись APK-файлу Android

  1. Переименуйте файл apk в zip-файл, например Name.apk = Name.zip.
  2. Распакуйте / разархивируйте zip-файл.
  3. Удалите папку META-INF.
  4. Повторно упакуйте / повторно заархивируйте папку в zip-файл.
  5. Снова переименуйте zip-файл в apk-файл.
  6. [Подпишите APK следующим образом:] jarsigner -keystore ~ ​​/ .android / debug.keystore -storepass android -keypass.

14 июн. 2012 г.

Что нужно сделать, чтобы создать приложение?

Вот 10 шагов для создания успешного мобильного приложения

  1. Шаг 1. Успешное мобильное приложение начинается с идеи приложения. …
  2. Шаг 2: Идентификация / уточнение. …
  3. Шаг 3. Создайте свое приложение. …
  4. Шаг 4: Определите подход к разработке приложения — нативное, веб-приложение или гибридное. …
  5. Шаг 5. Создайте прототип приложения. …
  6. Шаг 6. Интегрируйте соответствующий инструмент аналитики.

18 апр. 2020 г.

Как создать простое приложение?

Как создать приложение для Android с помощью Android Studio

  1. Введение: как создать приложение для Android с помощью Android Studio. …
  2. Шаг 1. Установите Android Studio. …
  3. Шаг 2: Откройте новый проект. …
  4. Шаг 3. Отредактируйте приветственное сообщение в основном действии. …
  5. Шаг 4: Добавьте кнопку к основному действию. …
  6. Шаг 5: Создайте второе занятие. …
  7. Шаг 6: Напишите метод кнопки «onClick».

Каковы шаги по разработке приложения?

Галерея: Самые горячие стартапы 2015 года

  1. Шаг 1. Определите свою цель. Хорошая идея — отправная точка каждого нового проекта. …
  2. Шаг 2: Начните рисовать. …
  3. Шаг 3: Исследование. …
  4. Шаг 4: Создайте каркас и раскадровку. …
  5. Шаг 5: Определите серверную часть вашего приложения. …
  6. Шаг 6: Протестируйте свой прототип.

30 окт. 2013 г.

Как вы разрабатываете и публикуете мобильное приложение?

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

  1. Выберите название вашего приложения.
  2. Выберите цветовую схему.
  3. Настройте дизайн своего приложения.
  4. Выберите подходящее тестовое устройство.
  5. Установите приложение на свое устройство.
  6. Добавьте нужные функции (Ключевой раздел)
  7. Тестируйте, тестируйте и тестируйте перед запуском.
  8. Опубликуйте свое приложение.

25 февраля. 2021 г.

Где я могу бесплатно опубликовать свое приложение?

8 лучших магазинов приложений для публикации ваших приложений и получения дополнительного трафика и загрузок

  • Amazon. Разработчики могут публиковать свои мобильные приложения, видеоигры и программное обеспечение для Android, iOS и веб-платформ. …
  • АПТОИД. …
  • Appszoom. …
  • ГЕТЖАР. …
  • Мобильный магазин Opera. …
  • Мобанго. …
  • СлайдМЕ. …
  • 1МОБИЛЬНЫЙ.

9 апр. 2015 г.

Сколько стоит опубликовать приложение в Play Store?

Откройте консоль Google Play и создайте учетную запись разработчика. Сколько стоит опубликовать приложение для Android? Операция стоит 25 долларов. Вы платите только один раз, учетная запись дает вам право публиковать столько приложений, сколько вы хотите, в любое время и в любом месте.

Понравилась статья? Поделить с друзьями:
  • Как изменить подпись на форуме
  • Как изменить подпись на картинке
  • Как изменить подпись на дроме
  • Как изменить подпись к рисунку латех
  • Как изменить подпись жесткого диска