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

Обновлено: 05.07.2024

Подписывающая сторона APK устарела. Учебник будет по-прежнему доступен, однако загрузка больше невозможна. Вместо этого используйте Android Studio или мобильную APK Signer для Android.

О нас

Чтобы загрузить скомпилированный файл Android (apk), вам необходимо подписать и алгинировать его. Есть несколько способов сделать это, но проще всего использовать инструмент APK Signer от Hai Bison.

Требования

  • JDK 1.6+
  • JRE 1.6+
  • ADT (включая файл zipalgin)

Вы можете скачать необходимые Java JDK и JRE здесь.

Рекомендуется создавать файл хранилища ключей с помощью JDK6 (1.6). Если у вас возникнут проблемы с установкой, попробуйте использовать JDK6.

Java JDK 8

Java JRE 8

Скачать APK Signer

Загрузка инструмента для настольных ПК больше недоступна. Используйте вместо этого Android Studio или попробуйте приложение для подписи APK для мобильных устройств от Hai Bison.

Студия Android

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

Студия Android

Подписавший APK

Создать файл хранилища ключей

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

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

apk_signer_create_keystore

  • (1) – Найдите путь установки Java JDK 1.6 (Java/bin/…)
  • (2) – Обновите информацию для файла хранилища ключей (сохраните пароль, он понадобится вам каждый раз, когда вы захотите подписать свое приложение!)
  • (3) — Нажмите «Сохранить как…» и сохраните путь, по которому вы хотите создать файл хранилища ключей.

apk_signer_set_target

Если вы добавили всю информацию и генерация прошла успешно, вы получите это уведомление.

apk_signer_done

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

Здесь вы найдете простое видео, показывающее следующие шаги.

Перейдите на вкладку "Подписавшая сторона" и убедитесь, что указан путь к вашей установке JDK 1.6.

apk_signer_sign

  • (1) — Загрузите файл ключей и введите два пароля (Подсказка: если вы введете «Пароль», нажмите клавишу табуляции. Если вы ввели правильный пароль, псевдоним будет установлен автоматически)

apk_signer_load_keyfile

  • (2) – Загрузите приложение, которое хотите подписать (убедитесь, что вы сняли флажок «Подписать» в Intel XDK, в противном случае APK-файл уже подписан отладкой)

apk_signer_load_app

Нажмите "подписать", чтобы подписать приложение. Вы получите файл с именем «…SINGED_UNALIGNED.apk»

Выровняйте свое приложение

Теперь перейдите на вкладку "Выравнивание APK" и загрузите APK, который вы получили после подписания.

apk_signer_align

apk_signer_load_app_algin

Нажмите «выровнять», и вы получите файл с именем «…SIGNED_ALIGNED.apk». Этот файл готов к загрузке в Google Play Store.

Проблемы и устранение неполадок

APK Signer не запускается

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

  • Удалите все более новые версии Java RE и JDK, чем 8.
  • Возможно, перезагрузите компьютер.
  • Установите Java RE и JDK8
  • Запустить еще раз

Вы также найдете видео-руководство по решению ниже.

Ошибка файла.IO

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

[тег wpfilebase=файл tpl=button-css-blank /]

И укажите путь в APK Signer.


< /p>

Решение не найдено?

Есть проблемы? Посетите наш форум поддержки.

Была ли эта статья полезной?

Об авторе

Андреас

Статьи по теме

  • Инструмент подписи Android APK v2 (apksigner)
  • Настройка продуктов в приложениях в Construct 2.
  • Опубликуйте свое приложение для Android в Google Play
  • Создайте значок Google Play для своей рекламы
  • Добавьте пользователя в консоль Google Play
  • Android: тестирование встроенных покупок с помощью Construct 2

Комментарии

откуда взять псевдоним и пароль?

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

Когда я пытаюсь выполнить "Выравнивание APK", я получаю сообщение об ошибке "СБОЙ ПРОВЕРКИ".

Подписали ли вы APK-файл? У меня никогда не было этой проблемы на моей стороне. Можете ли вы рассказать, какие шаги вы сделали?

Большое спасибо за этот инструмент, Энди!
Больше никаких ужасных командных строк, которые нужно помнить 🙂

Спасибо 🙂, но на самом деле это не мой инструмент. Я только что сделал учебник для него. Автор указан выше в руководстве.

Спасибо Hai Bison за инструмент и вам за урок : )

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

Привет,
спасибо за ваш комментарий. В основном это происходит, когда вы подписываете файл APK, который уже был подписан другим ключом
(например, отладочные сборки). Если это не так, вы можете попробовать использовать JDK 6 (1.6.x). Вы найдете ссылку для скачивания
в начале этой статьи.
Если оно по-прежнему не работает, попробуйте полностью удалить приложение с устройства и снова установить его.

Отлично! Наконец-то появился способ избавиться от нежелательных обновлений приложений.

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

привет
какая ошибка?
Ошибка при подписании файла. Подробности:
jarsigner: невозможно подписать jar: java.util.ZipException: недопустимый сжатый размер записи (ожидалось 3696, но получено 3762 байта)

У меня такая же проблема. Есть решения?

Вы пытались установить APK-файл с подписью «отладка»? Эта версия работает на вашем телефоне?

Да, мое приложение работает на моем телефоне.

У меня такая же ошибка, но я понимаю, что в моем приложении есть отладочная информация, подписанная студией Android. удаление файлов cert.rsa, cert.sf, manifest.mf в apk решило мою проблему. надеюсь поможет

привет, когда я пытаюсь создать файл хранилища ключей, я получаю сообщение об ошибке ” java IOEXEPTION :error keytool filenotfoundexeption c:\program file\test.keystore (accés refusé)

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

«Не удалось выполнить создание дампа aapt:
W/ResourceType(292349): неверная таблица ресурсов: размер заголовка 0x2 или общий размер 0x104c не находится на целочисленной границе
ОШИБКА: сбой дампа, поскольку ресурс таблица недействительна/повреждена».

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

большое спасибо

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

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

У меня такая проблема. Можете ли вы помочь мне решить эту проблему?

Очень полезно, спасибо

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

Не удалось запустить создание дампа aapt:
W/ResourceType(211608): неверная таблица ресурсов: размер заголовка 0x116f или общий размер 0xa54087d2 больше, чем размер данных 0xe1040
ОШИБКА: сбой дампа из-за таблицы ресурсов недействителен/поврежден

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

Здравствуйте, у меня проблема: когда я загружаю файл, я не нахожу файл jar, я нахожу много файлов, таких как asstes, group и Meta-INF! Пожалуйста, мне нужен ответ на мою проблему! у меня есть все java файлы!

У меня точно такая же проблема, как у Алекса. Любая помощь, пожалуйста?

Здравствуйте!
Можно ли использовать сертификат, хранящийся в HSM, для подписи моего APK?

Здравствуйте, мне нужна помощь.Я подписал и выровнял успешно, но когда я проверяю, я получаю «ОШИБКА ПРОВЕРКИ», а когда я пытаюсь это сделать на телефоне, я получаю «ОШИБКА РАЗБОРКИ, возникла проблема при анализе пакета». Пожалуйста, помогите. Спасибо

Привет, я пытаюсь изменить имя пакета WhatsApp для двух WhatsApp.
Теперь у меня есть знак, как вы говорите мне, и все в порядке, но скажите мне при установке «приложение не установлено»

Здравствуйте!
Это потому, что приложение уже подписано. Затем после вашей модификации вы подписали его другим ключом. Вот почему вы не можете установить его.

Приветствую любую идею IPA-файл (приложение ios) скомбинировать и распаковать.

Вы не можете подписать файл ipa с помощью этого инструмента. XCode сделает это за вас.

эти инструменты не могут подписывать apk ключом DSA.
Пожалуйста, помогите, я хочу подписать apk ключом DSA.

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

У меня небольшие трудности с запуском основного файла apk-signer-1.8.5.jar.

Его логотип отображается, но файл не запускается.

Я попытался скопировать снимок экрана, но это не разрешено.

Любое решение для одного и того же.

Здравствуйте,
по этому вопросу используйте наш форум поддержки, пожалуйста.
Там вы можете загрузить снимок экрана.

Я успешно создал файл «org.adblockplus.android1.3_SIGNED_ALIGNED.apk», но не могу загрузить его в консоль Google Play, выдает ошибку –

Вы загрузили APK с недействительной подписью (подробнее о подписи). Ошибка от apksigner: ERROR (Jar signer CERT.RSA): дайджест SHA-1 раздела META-INF/MANIFEST.MF для res/drawable-mdpi/abs__ic_menu_moreoverflow_normal_holo_light.jpg не соответствует дайджесту, указанному в META-INF/CERT.SF . Ожидаемое: , фактическое: ОШИБКА (Jar signer CERT.RSA): дайджест SHA-1 раздела META-INF/MANIFEST.MF для res/drawable- …………..etc

Как я могу решить эту проблему. . .

Ваш APK не может быть проанализирован с помощью aapt. Вывод ошибки:
Не удалось запустить маркировку дампа aapt:
W/ResourceType(292567): неверная таблица ресурсов: размер заголовка 0x13 или общий размер 0x4314 не находится на целочисленной границе
ОШИБКА: сбой дампа потому что таблица ресурсов недействительна/повреждена.

Спасибо, это приложение мне помогло!

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

это не работает для перекомпиляции apk с помощью простого apk

Гений, спасибо! Загружать приложения в Play Маркет стало намного проще.

Рад это слышать 😉
Спасибо!

Подписавший apk не извлекается в моем бюро

Откройте новое сообщение на форуме, а также попробуйте предоставить дополнительную информацию,
например, ОС, версию Java RE и т. д.

java.io.IOException: Не удается запустить программу «jarsigner»: CreateProcess error=2, система не может найти указанный файл
как исправить эту ошибку?

Привет
После того, как Алин & знак, игра не установлена ​​на телефоне (приложение не установлено)
как исправить эту ошибку?
ТНК

С помощью этого метода я могу опубликовать «APK» в Google Play Store?

Можно ли существующее приложение "Playstore" подписать новым ключом и опубликовать в Google Playstore?

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

Вы очень хорошо разбираетесь в информации. Спасибо!

Можете ли вы сообщить мне, как я могу получить существующий «APK» и опубликовать его в магазине игр в качестве нового идентификатора? Есть ли какие-нибудь учебные пособия или пошаговые инструкции?

Тогда я буду рад помочь вам.

не работает, jdk 11

Здравствуйте,
инструмент устарел. Либо используйте более старую версию JDK, либо перейдите на нашу версию APK Signer Tool (v2). См. ссылку в статье.

Уважаемый сэр
Я пытался распаковать apk, но у меня ничего не получилось

Вход для: tvandroid.apk

Тип журнала: декомпиляция

Запись журнала: Advanced ApkTool v4.1.0 By BDFreak

W: Размер флагов конфигурации > 38. Превышение байтов: 0x746E000000000000000000000000000000000.
W: Обнаружены недопустимые флаги конфигурации. Удаление ресурсов: string-sr-ERR0
Исключение в потоке «основной» java.lang.ClassCastException: brut.androlib.res.data.value.ResStringValue не может быть приведен к brut.androlib.res.data.value.ResAttr
в brut.androlib.res.decoder.ResAttrDecoder.decode(ResAttrDecoder.java:36)
в brut.androlib.res.decoder.AXmlResourceParser.getAttributeValue(AXmlResourceParser.java:369)
at org.xmlpull.v1.wrapper.classic.XmlPullParserDelegate.getAttributeValue(XmlPullParserDelegate.java:69)
at org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.writeStartTag(StaticXmlSerializerWrapper.java:267)
в org.xmlpull.v1.wrapper.classic.StaticXmlSerializerWrapper.event(StaticXmlSerializerWrapper.java:211)
в brut.androlib.res.decoder.XmlPullStreamDecoder$1.event(XmlPullStreamDecoder.java:83)
в брут.androlib.res.decoder.XmlPullStreamDecoder.decode(XmlPullStreamDecoder.java:141)
в brut.androlib.res.decoder.ResStreamDecoderContainer.decode(ResStreamDecoderContainer.java:33)
в brut.androlib.res.decoder.ResFileDecoder. декодировать(ResFileDecoder.java:114)
в brut.androlib.res.decoder.ResFileDecoder.decode(ResFileDecoder.java:99)
в brut.androlib.res.AndrolibResources.decode(AndrolibResources.java: 323)
в brut.androlib.Androlib.decodeResourcesFull(Androlib.java:131)
в brut.androlib.ApkDecoder.decode(ApkDecoder.java:101)
в brut.apktool.Main .cmdDecode(Main.java:165)
в brut.apktool.Main.main(Main.java:81)

Отметить меня в теме, чтобы я получил уведомление с помощью @andreas

Предоставьте также дополнительную информацию, например, какую версию JDK вы использовали? Какая
операционная система у вас установлена?
Спасибо!

замечательно, я ищу информацию о подписанте apk, и вы упомянули такую ​​замечательную команду.
Спасибо, что поделились с нами.
приветствую.

Оставить комментарий Отмена

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

Я расшифровал APK с помощью apktool (поскольку исходный код был утерян), чтобы исправить некоторые проблемы с XML-файлами макета. Затем я восстановил его с помощью apktool, и когда я попытался установить его на свое устройство (используя adb: adb install appname.apk), он выдал мне эту ошибку:

исходный apk, однако, был подписан хранилищем ключей (в eclipse IDE), а этот нет, как я могу правильно подписать его с исходным файлом keystone вне Eclipse!?

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

6 ответов 6

создать ключ с помощью

затем подпишите apk, используя:

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

если вы не хотите создавать ключ, вы можете использовать ключ отладки с: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

Есть ли разница между использованием jarsigner и apksigner? Один требует подписи, а затем zipaligning, а другой zipaligning, а затем signinig

Используйте этот инструмент (использует новый apksigner от Google):

Отказ от ответственности: я разработчик :)

Шаг 1. Создайте хранилище ключей (только один раз)

Вам нужно один раз сгенерировать хранилище ключей и использовать его для подписи неподписанного apk. Используйте keytool, предоставленный JDK, который находится в %JAVA_HOME%/bin/

Шаг 2 или 4: Zipalign

zipalign — инструмент, предоставляемый Android SDK, который находится, например, в %ANDROID_HOME%/sdk/build-tools/24.0.2/ — это обязательный шаг оптимизации, если вы хотите загрузить APK в Play Маркет.

Примечание: при использовании старого jarsigner необходимо выполнить выравнивание по zip-архиву ПОСЛЕ подписания. При использовании нового метода apksigner вы делаете это ДО подписания (я знаю, это сбивает с толку). Вызов zipalign перед apksigner работает нормально, поскольку apksigner сохраняет выравнивание и сжатие APK (в отличие от jarsigner).

Вы можете проверить выравнивание с помощью

Шаг 3. Подпишите и подтвердите

Использование инструментов сборки 24.0.2 и старше

Используйте jarsigner, который, как и keytool, поставляется с дистрибутивом JDK, найденным в %JAVA_HOME%/bin/, и используйте его следующим образом:

и можно проверить с помощью

Использование инструментов сборки 24.0.3 и новее

Android 7.0 представляет схему подписи APK v2, новую схему подписи приложений, которая обеспечивает более быструю установку приложений и дополнительную защиту от несанкционированного изменения файлов APK (дополнительные сведения см. здесь и здесь). Поэтому Google реализовал собственное средство подписи apk под названием apksigner (да!). Файл сценария можно найти в %ANDROID_HOME%/sdk/build-tools/24.0.3/ (файл .jar находится в подпапке /lib). Используйте это так

и можно проверить с помощью

Спасибо за описание! Сначала попробовал uber-apk-signer, но потерпел неудачу, вероятно, потому, что в моей системе установлен openJDK вместо «официальной» java. Поэтому я попробовал ручной способ и также потерпел неудачу (все та же ошибка [INSTALL_PARSE_FAILED_NO_CERTIFICATES]). Проверка с помощью uber-apk-signer дала мне дополнительную информацию о подписи VERIFY FAILED [. ] ОШИБКА: подписывающий JAR CERT.RSA: подпись JAR META-INF/CERT.RSA использует алгоритм дайджеста 2.16.840.1.101.3.4.2.1 и алгоритм подписи 1.2.840.113549.1.1.1, который не поддерживается на уровнях API [[15 , 17]]. Да, андроид 4.2.2, SHA256 там нет? идеи?

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

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

Zipalign APK. Zipalign – это процесс оптимизации, выполняемый в приложении. Это позволяет Android более эффективно взаимодействовать с APK во время выполнения. Xamarin.Android выполняет проверку во время выполнения и не разрешает запуск приложения, если APK не был выровнен по zip-архиву.

Подпишите APK. Этот шаг включает в себя использование утилиты apksigner из Android SDK и подписание APK с помощью закрытого ключа, созданного на предыдущем шаге. Приложения, разработанные с использованием более старых версий инструментов сборки Android SDK до версии 24.0.3, будут использовать приложение jarsigner из JDK. Оба эти инструмента будут рассмотрены более подробно ниже.

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

Предпосылки

В этом руководстве основное внимание уделяется использованию apksigner из инструментов сборки Android SDK версии 24.0.3 или более поздней. Предполагается, что APK уже создан.

Приложения, созданные с использованием более старой версии Android SDK Build Tools, должны использовать jarsigner, как описано в разделе Подписание APK с помощью jarsigner ниже.

Создать закрытое хранилище ключей

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

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

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

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

Создать новое хранилище ключей

Для создания нового хранилища ключей требуется инструмент командной строки keytool из Java SDK. Следующий фрагмент является примером того, как использовать keytool (замените на имя файла для хранилища ключей и на имя ключа в хранилище ключей):

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

Чтобы получить список ключей, хранящихся в хранилище ключей, используйте keytool с параметром –list:

Архивировать APK

Прежде чем подписывать APK с помощью apksigner, важно сначала оптимизировать файл с помощью инструмента zipalign из Android SDK. zipalign реструктурирует ресурсы в APK по 4-байтовым границам. Такое выравнивание позволяет Android быстро загружать ресурсы из APK, повышая производительность приложения и потенциально сокращая использование памяти. Xamarin.Android выполнит проверку во время выполнения, чтобы определить, выровнен ли APK по zip-архиву. Если APK-файл не выровнен по зип-архиву, приложение не запустится.

Команда follow использует подписанный APK и создаст подписанный APK-архив с именем helloworld.apk, который готов к распространению.

Подпишите APK

После выравнивания APK необходимо подписать его с помощью хранилища ключей. Это делается с помощью инструмента apksigner, который находится в каталоге build-tools версии инструментов сборки SDK. Например, если установлены инструменты сборки Android SDK v25.0.3, то apksigner можно найти в каталоге:

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

Дополнительную информацию об использовании apksigner см. в документации Google.

Согласно проблеме Google 62696222, apksigner «отсутствует» в Android SDK. Обходной путь для этого — установить инструменты сборки Android SDK версии 25.0.3 и используйте эту версию apksigner.

Подпишите APK с помощью jarsigner

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

Этот метод предполагает подписание APK-файла с помощью команды jarsigner из Java SDK. Инструмент jarsigner входит в состав Java SDK.

Ниже показано, как подписать APK с помощью jarsigner и документа публикации ключа, содержащегося в файле хранилища ключей с именем xample.keystore :

При использовании jarsigner важно сначала подписать APK, а затем использовать zipalign.

Android Studio позволяет создавать файлы APK двух типов.

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

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

В этом руководстве показано, как создать приложение для Android путем создания файлов APK с помощью Android Studio.

Сначала: откройте файл проекта в Android Studio. Если у вас еще нет файла проекта, просто создайте новый проект.

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

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

Сначала откройте свой проект или приложение, которое вы хотите импортировать в файл APK. Затем выберите «Сборка» > «Сборка пакетов/APK» > «Сборка APK» в меню панели инструментов.

сборка APK
сборка APK
сборка APK

Android Studio займет несколько минут, чтобы создать APK-файл.

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

Найдите файл APK
 Найдите файл APK
Найдите файл APK

Если вы пропустите уведомление, вы все равно можете найти APK-файл по следующему пути в папке вашего проекта: app/build/outputs/apk/debug. По умолчанию файл называется app-debug.apk.

Создание подписанного APK-файла

Чтобы создать подписанный APK-файл, откройте меню "Сборка" на панели инструментов и выберите "Создать подписанный пакет/APK".

Подписанный APK
Подписанный APK
Подписанный APK

Откроется экран, на котором нужно выбрать между созданием Android App Bundle и созданием APK-файла. Установите переключатель APK и перейдите к следующему окну.

Переключатель APK
ширина переключателя APK
Переключатель APK

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

Key Store
Key Store
Key Store

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

Если вы создаете подписанный APK-файл впервые, вам придется создать новое хранилище ключей.

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

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

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

Путь к хранилищу ключей
Путь к хранилищу ключей
Путь к хранилищу ключей

Вы будете перенаправлены в новое окно.

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

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

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

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

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

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

Завершение

После заполнения сведений о сертификате нажмите кнопку ОК. Затем вы вернетесь на экран создания подписанного пакета или APK.

Здесь все поля будут предварительно заполнены. Проверьте все детали, чтобы оставаться в безопасности. Затем выберите Далее.

Предварительно заполненное хранилище ключей
Предварительно заполненное хранилище ключей
Предварительно заполненное хранилище ключей

На последнем экране вы теперь сможете увидеть место назначения вашего подписанного APK-файла. Ниже вы увидите еще две опции: «Отладка» и «Выпуск».

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

В нижней части экрана есть еще два флажка. Выберите V2 (полная подпись APK) и нажмите «Готово».

Выпуск APK
Выпуск APK
Выпуск APK

Вы будете уведомлены Android Studio, как только сборка APK будет завершена. Теперь вы можете нажать «Найти» в уведомлении, чтобы открыть местоположение файла.

Подписанный APK-файл по умолчанию называется app-release.apk. Вы найдете его в папке вашего проекта в каталоге app/release.

Обзор

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

Создать APK-файл

  1. Создайте проект в Android Studio.
  2. Выберите «Сборка» > «Сборка пакетов/APK» > «Сборка APK» в меню панели инструментов.

Теперь вы можете перенести отладочный APK-файл на свой мобильный телефон Android и проверить его на наличие ошибок. Вы также можете протестировать его на своем ПК с помощью эмулятора Android.

Создать подписанный APK-файл

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

Создать новое хранилище ключей и ключ

  1. Выберите путь к хранилищу ключей.
  2. Введите пароль для хранилища ключей.
  3. Укажите идентификатор, срок действия и пароль для ключа.
  4. Введите любые личные или организационные данные, которые вы хотите включить в сертификат ключа.

Теперь вы можете сделать этот подписанный APK-файл общедоступным, опубликовав его в Google Play Store.

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

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

Схема подписи APK v2 была введена в Android 7.0 для более важной защиты файла APK.
После этого в Android 9.0 была представлена ​​схема подписи APK v3, а в Android 11.0 — схема подписи APK v4.

изображение

Процесс проверки подписи Google

До схемы подписи APK версии 2 подписывание основывалось на подписанном JAR-файле с использованием jarsigner, а начиная с версии 2 – на основе apksigner.

Тогда в каких случаях мы подписываем с помощью apksigner?

1) В случае версий подписи v2 при создании приложения была выбрана опция. (Схема подписи APK v2)
2) Если targetSdkVersion было установлено выше 30 при сборке приложения

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

изображение

выбрать версию подписи в Androidstudio

Пример) C:\>java -jar D:\android\sdk\build-tools\28.0.0\lib\apksigner.jar verify -v --print-certs C:\app-release.apk

Если значение «Проверено с использованием схемы v2» (схема подписи APK v2) верно, то это V2, а ложно — то это V1.

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

zipalign -f -v 4 "Путь к apk-файлу, для которого требуется zipalign" "Путь к apk-файлу, который будет сохранен после zipalign-ing"

изображение

команда zipalign в Windows cmd

[ Windows ]
java -jar [APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-key-alias [ALIAS_NAME] [APK_FILE_PATH]

[APKSIGNER_PATH] — это место, где находится apksigner.
Инструмент apksigner доступен в версии 24.0.3 и более поздних версий Android SDK Build Tools, и вы можете проверить его, как показано ниже.

1) Проверьте путь к SDK в Android Studio
Меню инструментов => Диспетчер SDK => Проверка пути к местоположению Android SDK
2) Проверьте файл Apksigner из каталога SDK
SDK Каталог => каталог build-tools => каталог buildToolsVersion => каталог lib => проверьте файл apksigner.jar
В случае MAC проверьте файл apksigner из каталога buildToolsVersion

После выполнения команды появится сообщение о необходимости ввести пароль для хранилища ключей.


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

После ввода правильного ключа-пароля процесс подписания продолжится и появится надпись «Подписано». будет отображаться после завершения подписания.

изображение

команда apksigner в Windows cmd

Если вы используете параметр –ks-pass pass: и –key-pass:pass в командной строке, вы можете заранее установить пароль и команду.
Если вы используете эту опцию, сообщение о вводе пароля не будет отображаться, а будет введено автоматически.

[ Windows ]
java -jar [APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks-pass pass:"keystore_password" --key-pass pass :"key_password" --ks-key-alias [ALIAS_NAME] [APP_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] sign -v --out [SAVED_APK_PATH] --ks [KEYSTORE_PATH] --ks- pass pass:"keystore_password" --key-pass pass:"key_password" --ks-key-alias [ALIAS_NAME] [APP_FILE_PATH]

[ Windows ]
java -jar [APKSIGNER_PATH] verify -v --print-certs [APP_FILE_PATH]
[ MAC ]
[APKSIGNER_PATH] verify -v --print -certs [APP_FILE_PATH]

Если подпись работает правильно, вы можете установить флажок "Проверено с использованием схемы v2 (схема подписи APK v2): true", как показано ниже.

изображение

проверить команду подписи в Windows cmd

Итак, мы рассмотрели, как подписать с помощью apksigner.
Чтобы упростить этот процесс, мы делимся файлом скрипта.

KeyStorePath= "Путь хранилища ключей"
ALIAS_NAME= "Псевдоним имени"
STORE_PASS= "Пароль хранилища ключей"
KEY_PASS= "Пароль ключа"
ZIP_ALIGN= "zipalign путь к файлу"
APKSIGNER_PATH= "путь к файлу apksigner"

Файлы zipalign и apksigner расположены в инструментах сборки по пути, где установлен Android SDK.
Если вы хотите ввести свой собственный пароль, не сохраняя его, необходимо удалить параметры --ks-pass и --key-pass.

Пользователи Windows могут перетащить файл приложения, которое нужно подписать, в файл LIAPP_sign_window.bat, и оно сразу же запустится.
Пользователи MAC могут запускать терминальную программу либо путем перетаскивания файлов сценариев и файлов приложений по порядку, либо путем ввода путей, как показано ниже.

Напр. /Users/имя пользователя/Загрузки/LIAPP_apksign_mac.sh /Users/имя пользователя/AndroidStudioProjects/MyApplication/app/release/app-release.apk

После правильной работы сначала будет выполнено zipalign, а затем будет выполнена подпись.
Если появится сообщение «Подписано». было подтверждено без каких-либо проблем во время процесса подписания, нажмите любую клавишу, чтобы продолжить подписание.
Завершенный файл сохраняется с пометкой _signed после имени файла.

Дополнительную информацию о подписании с помощью apksigner и схемы подписи APK см. по указанному ниже URL-адресу.


LIAPP, мы предоставляем лучший сервис.

Читайте также: