Создание подписи приложения с помощью Google Play App Signing

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

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

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

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

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

Для начала необходимо создать ключ загрузки, по которому Google будет проверять APK. Для этого средствами Android Studio через меню Build — Generate Signed APK создадим новое хранилище ключей, в котором будет содержаться наш ключ загрузки. Создание подписи приложения будет происходить с помощью Gradle, а файл, содержащий путь до хранилища и пароли, вынесем из проекта и будем хранить отдельно.

signingConfigs {
    release {
        if (project.hasProperty("Keys.repo")) {
            def projectPropsFile = file(project.property("Keys.repo") + "/system-app-manager.properties")
            if (projectPropsFile.exists()) {
                Properties props = new Properties()
                props.load(new FileInputStream(projectPropsFile))

                storeFile file(file(project.property("Keys.repo") + props['RELEASE_STORE_FILE']))
                storePassword props['RELEASE_STORE_PASS']
                keyAlias props['RELEASE_ALIAS']
                keyPassword props['RELEASE_KEY_PASS']
            }
        } else {
            println "======================================================="
            println "[ERROR] - Please configure release-compilation environment - e.g. in ~/.signing  directory"
            println "======================================================="
        }
    }
}

О том, как это можно сделать для своего приложения, можно почитать в данной статье.

Затем созданным ключом необходимо подписать APK, чтобы создать release-версию, и загрузить его в предварительно созданный проект в консоли разработчика. В процессе загрузки вам предложат подписать на программу Google Play App Signing, если вы этого до сих пор не сделали.

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

Узнать, что приложение подписано Google, а не самим разработчиком, можно по следующему элементу метаданных, содержащемуся в тэге <application> в файле манифеста:

<meta-data android:name="com.android.vending.derived.apk.id" android:value="[ID]" />

Как сбросить ключ загрузки?

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

  1. Создать новый ключ загрузки аналогично тому, как это делалось в начале статьи. Затем его нужно будет экспортировать в сертификат PEM с помощью следующей команды.
    keytool -export -rfc -alias upload -file <upload_certificate.pem> -keystore <keystore.jks>
  2. После создания сертификата нужно обратиться в службу поддержки по следующей ссылке, заполнив все поля и прикрепив файл сертификата. Как только запрос будет обработан, вам на электронную почту придут инструкции по смене ключа.

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

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

Данный идентификатор будет использоваться в инструментах отчётности об ошибках и по нему можно определить нужный APK-файл.

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

Кроме декомпилятора это также можно проверить утилитой aapt.exe (Android Asset Packaging Tool), которая входит в состав Android SDK. Для этого нужно ввести следующую команду:

aapt dump badging apk_name.apk

Новая технология от Google немного облегчила жизнь разработчикам, будем жать, когда она действительно облегчит выходной APK-файл.

Share on VKShare on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on Tumblr0Email this to someoneShare on Reddit0
Нашли ошибку в тексте?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *