Как подписать apk файл в android studio
Перейти к содержимому

Как подписать apk файл в android studio

  • автор:

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

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

Генерация ключа подписи с помощью Android Studio

Установите Android Studio на свой компьютер и запустите программу.

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

1. В строке меню выберите “Сборка» — «Сборка» — «Создать подписанный пакет / APK”.

2. В диалоговом окне «Создать подписанный пакет или APK» выберите «Пакет приложений Android» или «APK» и нажмите «Далее».

3. Ниже поля для Путь к хранилищу ключей нажмите “Создать новый”.

4. В окне «Новое хранилище ключей» укажите следующую информацию о вашем хранилище ключей и ключе:

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

      7. Заполнив форму, нажмите кнопку ОК.

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

      Генерация ключа подписи с помощью Keytool

      1. Загрузите и установите Java.

      2. Установить каталог Java_Home.

      3. Откройте командную строку (cmd.exe) как администратор, затем выполните следующую команду:
      $ keytool -genkey -v -keystore [keystore_name].keystore -alias [alias_name] -keyalg RSA -keysize 2048 -validity 10000

      4. Keytool запросит пароль хранилища ключей. Введите пароль и подтвердите.

      5. Далее keytool запросит дополнительную информацию — имя, страну и т.д. Укажите всю требуемую информацию.

      6. Затем keytool запросит пароль для псевдонима. Вернитесь, если он совпадает с паролем хранилища ключей. В противном случае введите пароль и подтвердите.

      7. Готово — ваш ключ готов к копированию!

      Скопированный файл ключа, вы можете добавить в Личном кабинете в качестве подписи для приложения Android.

      Создание apk-файла в Android Studio

      Конечной целью любой java-разработки является создание завершенного приложения : это может быть как библиотека/исполняемый jar-файл, либо web приложение. Имеются различные типы приложений и библиотек. При всем многообразии возможных разношёрстных типов готовых библиотек и приложений android-устройства выбиваются из общей колеи. Для android-устройств конечным программным продуктом являются apk-файлы, которые можно свободно распространять между пользователями.

      На заре развития программного обеспечения вся разработка для android-устройств осуществлялась, как правило, в IDE Eclipse со специализированными плагинами типа ADT (Android Development Tools). Данная среда разработки позволяет создавать для android apk-файлы. Но времена быстро меняются, и сегодня гораздо эффективнее и быстрее создавать apk-файлы в представленной ещё в 2013 году Android Studio, основанную на старом конкуренте Eclipse — системе IntelliJ IDEA.

      Аббревиатура apk (Android Package Kit) символизирует формат файлов, которые используются для распространения и установки приложений на устройства android. Файл apk содержит все необходимые элементы для правильной установки приложения на устройстве, и, по своему назначению, чем-то похож на исполняемые exe-файлы в Windows. Когда Вы «заходите в магазин» Google Play, чтобы выбрать и загрузить какое-либо приложение, Ваше устройство android скачивает и устанавливает файл apk с нужным приложением.

      Создание apk-файла

      Рассмотрим процесс создания apk-файла на примере p13osgi, в котором использовался OSGi-фреймворк. Этот пример подробно рассмотрен на странице Android и OSGI-фреймворк Felix. В данной статье используем готовый модуль из проекта.

      Заметка. Почему в качестве примера создания apk-файла выбираем данный модуль/проект, а не какой-либо другой? Дело в том, что в данном примере используется расположенная в поддиректории lib внешняя библиотека. И для нас интерес будет представлять структура apk-файла с внешней jar-библиотекой : какое место в данном пакете будет занимать внешний файл org.apache.felix.framework-6.0.3.jar. Здесь следует понимать, что OSGi-фреймворк (Felix) позволяет создавать модульную структуру приложения. Причем, в режиме run-time можно динамически подключать новые модули (bunlde), останавливать запущенные модули, одновременно подключать разноверсионные модули. Данный функционал OSGi-фреймворка на примере Вы можете реально проверить на своем компьютере; для этого необходимо познакомиться с Уроком 8.

      Создание APK-файлов всех модулей проекта

      Чтобы использовать самый простой способ создания apk-файла, выберите в Android Studio пункт меню «Build → Build Bundle(s)/APK(s) → APK(s)», как это представлено на следующем скриншоте.

      В данном случае для всех модулей проекта будут созданы apk-файлы. Здесь необходимо отметить, что apk-файлы будут без цифровой подписи и распространению не подлежат. Но на них можно «посмотреть», что мы и сделаем в последнем разделе статьи, а также можно проверить работоспособность на android-устройстве. Загрузку apk-файла на android-устройство мы рассмотрим в ближайшее время отдельной статьей. Также отдельной статьей я представлю процесс создания apk-файла с цифровой подписью при выборе пункта меню «Build → Generate Signed Bundle/APK».

      А сейчас Вы должны увидеть, что для всех модулей проекта создаются apk-файлы, которые располагаются в поддиректориях проекта [project_name]/[module_name]/build/outputs/apk/debug/. Т.е. в поддиректории модуля build/outputs/apk/debug/ будет размещаться созданный apk-файл, наименование которого включает наименование модуля с постфиксом «-debug». В нашем примере будет создан файл p13osgi-debug.apk.

      Определение типа apk : debug-release

      Постфикс «-debug», добавляемый к наименованию пакета, определен по умолчанию. Вы можете самостоятельно переименовать файл, и он останется работоспособным. Но можно и изменить настройки. Для этого необходимо указателем мыши нажать на расположенную в левом нижнем углу маленькую кнопочку, как это представлено на нижнем левом скриншоте. Данная кнопка открывает окно со специальными ярлыками различных вспомогательных окон. При простом наведении указателя мыши на эту кнопку, появляется список всех этих окон для быстрого выбора нужного.

      Откроем окно Build Variants и в дополнительно открытом окне (скриншот справа) найдем модуль p13osgi (наш пример).

      Если в выпадающем списке переключить режим сборки с debug на release, то будет создаваться пакет p13osgi-release-unsigned.apk в поддиректории «build/outputs/apk/release/».

      Создание APK-файла одного модуля проекта

      Для того, чтобы создать apk-файл одного модуля, необходимо открыть панель Gradle (см.ярлык на скриншоте сверху слева). В открывшемся окне, как это представлено на следующем скриншоте, необходимо выбрать пункт меню «module_name → Tasks → build → build». В результате данных действий будет создан apk-файл только одного модуля.

      Структура файла APK

      В заключении посмотрим на внутренности нашего apk-файла. Сразу же отмечу, что apk-файл можно открыть zip-архиватором, например 7-Zip. Но многое останется недоступным. Лучше использовать анализатор apk-файлов от Android Studio. Далеко ходить не надо : необходимо выбрать пункт меню «Build → Analyze APK . » (см. самый верхний скриншот). В открывшемся диалоговом окне найти нужный пакет в файловой структуре, после чего в IDE будет открыта панель, как это представлено на следующем скриншоте.

      Интерфейс панели анализатора разделен на 2 части. В верхней части Вы видите корневую структуру apk-файла. В нижней части можно просматривать структуру выделенного элемента верхней части.

      Что сразу же бросается в глаза? Вспоминаем : в нашем примере/модуле была использована внешняя библиотека с OSGi-фреймворком Felix org.apache.felix.framework-6.0.3.jar, расположенная в поддиректории lib
      В структуре созданного пакета поддиректория lib. Все файлы внешней jar-библиотеки размещаются в корне по пакетам. Можно предположить, что и дополнительное использование бандлов/модулей (а для чего использовать фреймворк, если не использовать бандлы) приведет к тому, что и их содержимое также будет интегрировано в общий пакет. Таким образом, мы лишаемся преимуществ использования OSGi-технологии при разработке приложений для android-устройств, поскольку любая доработка отдельного модуля/бандла будет связана с обновлением всей сборки (apk-пакета). Кроме этого, отсутствует возможность одновременного использования разноверсионных бандлов, а межмодульное взаимодействие посредством сервисов становится «слишком дорогим» (можно и напрямую постучаться к классам бандла, зачем нам посредник-активатор). На данном простом примере я не вижу преимуществ использования OSGi для создания многомодульного приложения.

      Буду признателен всем, кто опровергнет данное предположение и предложит значимое использование OSGi-технологии в android-устройстве.

      Что касается *.class’ов, то их также не будет в apk-файле. Им на смену пришли файлы *.dex .

      Файл .dex

      «Рабочей лошадкой» в системе Android является Dalvik Virtual Machine, не использующая байт-код Java. Виртуальная машина Dalvik является службой приложения, которая интерпретирует скомпилированный код в dex-файле. Инструкции байт-кода формата DEX не совпадают с инструкциями байт-кода Java. Таким образом, в apk-файле Java-классы представлены в формате .dex. Но необходимо отметить, что структура пакетов сохраняется.

      Как подписать ваше гибридное мобильное приложение для размещения в Google Play

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

      Необходимое условие для этого — наличие подписанного APK файла. Как подписать apk файл, вы узнаете из этой статьи.

      Небольшое отступление

      Когда мой pet project вплотную приблизился к релизу, я начал искать информацию о том, как быстро и без боли опубликовать приложение. Множество найденных инструкций выглядели простыми. Я выбрал инструкцию авторов фреймворка Ioniс, на котором и разработано приложение. Не все получилось с первого раза, есть несколько особенностей. Процесс подписывания описан в этой статье, важные моменты особо выделены.

      Исходные данные

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

      • Apache Cordova
      • Java Development Kit
      • Android SDK Tools

      Поехали

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

      $ cordova plugin rm cordova-plugin-console

      Для генерации релизной сборки под Андроид используем команду build с флагом —release:

      $ cordova build --release android

      Эта команда создаст неподписанный APK файл в каталоге:

      platforms/android/build/outputs/apk

      Например, platforms/android/build/outputs/apk/android-release-unsigned.apk. Потом нам понадобится подписать этот файл и запустить утилиту zipalign для оптимизации и подготовки файла для Google Play.

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

      $ keytool -genkey -v -keystore lcf.keystore -alias lcf -keyalg RSA -keysize 2048 -validity 10000

      Значение параметра -alias необходимо запомнить, а лучше записать. В примере выше он равен lcf (по первым буквам названия приложения Loyal Client Free). Детали здесь приводить не буду, если будет интересно, напишите в комментарии, я расскажу подробнее.

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

       -keystore hello-world.keystore -alias hello-world -keystore weather-app.keystore -alias weather-app -keystore todo.keystore -alias todo

      * Подписывать приложение нужно при каждом выпуске обновлений

      Утилита keytool задает ряд вопросов. Всего их будет 8. Чтобы заранее иметь представление о вопросах и примерных ответах, все они приведены далее, под спойлером.

      Вопросы keytool и примерные ответы на них

      1. Enter keystore password:
      Здесь необходимо ввести пароль для файла (не менее 6 символов). Введенный пароль нужно записать в надежном месте, он нужен всякий раз при подписывании приложения.

      2. Re-enter new password:
      Повторный ввод пароля.

      3. What is your first and last name?
      [Unknown]: Ivan Petrov
      Ваше имя и фамилия. Значение в квадратных скобках — это значение по умолчанию.

      4. What is the name of your organizational unit?
      [Unknown]: IT
      Название подразделения вашей компании. Можно оставить пустым, я указываю IT.

      5. What is the name of your organization?
      [Unknown]: 2developers
      Название вашей организации. Укажите, если есть.

      6. What is the name of your City or Locality?
      [Unknown]: Moscow
      Название города

      7. What is the name of your State or Province?
      [Unknown]: MO
      Название области

      8. What is the two-letter country code for this unit?
      [Unknown]: RU
      Код страны. Я указываю RU.

      Далее будет предложено проверить введенную информацию:
      Is CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU correct?

      Подтверждайте, если все верно или нажмите Enter, чтобы ввести еще раз.

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

      Generating 2 048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10 000 days for: CN=Ivan Petrov, OU=IT, O=2developers, L=Moscow, ST=MO, C=RU Enter key password for (RETURN if same as keystore password): [Storing lcf.keystore]

      В текущем каталоге будет создан файл lcf.keystore.

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

      Осталось два шага, и вы получите готовый к распространению APK файл. Переходим непосредственно к подписыванию.

      Чтобы подписать ваш apk файл, используйте утилиту jarsigner, которая тоже включена в JDK.

      $ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore lcf.keystore android-release-unsigned.apk lcf

      Имя сертификата указывается после параметра -keystore, алиас — после имени файла.

      Наконец, для оптимизации apk файла, воспользуемся утилитой zipalign:

      $ zipalign -v 4 android-release-unsigned.apk LoyalClientFree.apk

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

      Утилита zipalign это часть Android SDK Tools и может быть найдена здесь:

      /path/to/Android/sdk/build-tools/VERSION/zipalign

      Заключение

      Теперь у вас есть готовый к распространению apk файл, который можно загрузить в Google Play. Заполняйте описание, определяйте рейтинг своего приложения и смело жмите “Опубликовать”.

      • cordova
      • ionic framework
      • google play
      • Разработка мобильных приложений
      • Разработка под Android

      Как подписать apk , что бы при установке из файла андройд не ругался на «Подозрительное приложение»?

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

      /opt/java/openjdk/bin/keytool -genkeypair -alias test_al -keyalg RSA -keysize 2048 -validity 10000 -keystore my_key.jks 

      Собираю apk, выравниваю, в финале подписываю только созданным ключом:

      opt/android-sdk/build-tools/33.0.2/apksigner sign --ks ./my_key.jks --ks-key-alias test_al --ks-pass pass:'FNWT4g19TP' --key-pass pass:'FNWT4g19TP' ./may_app.apk 

      введите сюда описание изображения

      Никаких ошибок И когда начинаю устанавливать приложение из этого файла may_app.apk, На телефоне получаю сообщение «Подозрительное приложение. «(приложу скрин) Как так подписать приложение что бы андройд не запугивал пользователей? Получается недостаточно сделать такой ключ, надо еще приложение в маркет загрузить или типо того? Или в командах выше ошибка? (В исследовательских целях пошёл скачивать пиратские apk(осуждаю) в стиле всё фильмы онлайн и тд, и все ставятся без всяких предупреждений, информация о подписи имеется, нейтрально во всех полях android, как они это делают?)

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

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