Я пытаюсь подписать свой файл apk. Я не могу понять, как это сделать. Я не могу найти хороших подробных указаний. У меня очень мало опыта программирования, поэтому любая помощь будет оценена по достоинству.
Как подписать apk-файл Android
Ответы (6)
Инструкция достаточно понятная. Пожалуйста, укажите, с какой частью вы застряли после того, как проработаете ее, я бы посоветовал:
https://developer.android.com/studio/publish/app-signing.html
Ладно, небольшой обзор без ссылок и затмений вокруг, так что оставьте место для ошибок, но это работает так
- Откройте свой проект в eclipse
- Нажмите правую кнопку мыши -> инструменты (инструменты Android?) -> экспортировать подписанное приложение (apk?)
- Пройдите через мастера:
- Создайте новое хранилище ключей. запомнить этот пароль
- Подпишите свое приложение
- Сохраните его и т. д.
Также по ссылке:
Скомпилируйте и подпишите с помощью Eclipse ADT
Если вы используете Eclipse с подключаемым модулем ADT, вы можете использовать мастер экспорта для экспорта подписанного .apk (и даже при необходимости создать новое хранилище ключей). Мастер экспорта выполняет за вас все взаимодействие с Keytool и Jarsigner, что позволяет вам подписывать пакет с помощью графического интерфейса вместо выполнения ручных процедур компиляции, подписи и выравнивания, как обсуждалось выше. После того как мастер скомпилирует и подпишет ваш пакет, он также выполнит выравнивание пакета с помощью zip align. Поскольку мастер экспорта использует как Keytool, так и Jarsigner, вы должны убедиться, что они доступны на вашем компьютере, как описано выше в разделе «Базовая настройка подписи».
Чтобы создать подписанный и выровненный .apk в Eclipse:
- Выберите проект в проводнике пакетов и выберите «Файл» > «Экспорт».
Откройте папку Android, выберите «Экспорт приложения Android» и нажмите «Далее».
Теперь запустится мастер экспорта приложений Android, который проведет вас через процесс подписания вашего приложения, включая шаги по выбору закрытого ключа для подписи .apk (или созданию нового хранилища ключей и закрытого ключа).
- Завершите работу мастера экспорта, и ваше приложение будет скомпилировано, подписано, выровнено и готово к распространению.
-alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.
Это просто псевдоним. Имя, если хотите. я бы предложил первый ключ :-)
- person Nanne; 31.01.2011
Вот руководство о том, как вручную подписать APK. Он содержит информацию о новом apk-signer
, представленном в build-tools 24.0.3
(10/2016).
Автоматизированный процесс:
Используйте этот инструмент (использует новый apksigner от Google):
https://github.com/patrickfav/uber-apk-signer
Отказ от ответственности: я разработчик :)
Ручной процесс:
Шаг 1: Создайте хранилище ключей (только один раз)
Вам нужно создать хранилище ключей один раз и использовать его для подписи вашего unsigned
apk. Используйте keytool
предоставляется JDK, найденным в %JAVA_HOME%/bin/
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
Шаг 2 или 4: Zipalign
zipalign
это инструмент, предоставляемый Android SDK, найденный, например, в %ANDROID_HOME%/sdk/build-tools/24.0.2/
является обязательным шагом оптимизации, если вы хотите загрузить apk в Play Store.
zipalign -p 4 my.apk my-aligned.apk
Примечание. при использовании старого jarsigner
вам необходимо выполнить выравнивание по zip-архиву ПОСЛЕ подписания. При использовании нового метода apksigner
вы делаете это ДО подписания (я знаю, это сбивает с толку). Вызов zipalign до того, как apksigner сработает нормально, поскольку apksigner сохраняет выравнивание и сжатие APK (в отличие от ярсигнер).
Вы можете проверить выравнивание с помощью
zipalign -c 4 my-aligned.apk
Шаг 3: Подпишите и подтвердите
Использование инструментов сборки 24.0.2 и старше
Используйте jarsigner
, который, как и keytool, поставляется с дистрибутивом JDK, найденным в %JAVA_HOME%/bin/
, и используйте его следующим образом:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
и можно проверить с
jarsigner -verify -verbose my_application.apk
Использование инструментов сборки 24.0.3 и новее
В Android 7.0 представлена схема подписи APK v2, новая схема подписи приложений, которая обеспечивает более быструю установку приложений и дополнительную защиту от несанкционированного изменения файлов APK (см. здесь и здесь для более подробной информации). Прежде чем Google реализовал свой собственный подписывающий apk под названием apksigner
(ну!) Сценарий файл можно найти в папке %ANDROID_HOME%/sdk/build-tools/24.0.3/
(файл .jar находится в подпапке /lib
). Используйте это так
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
и можно проверить с
apksigner verify my-app.apk
Официальную документацию можно найти здесь.
Для пользователей IntelliJ IDEA или Android Studio выполните следующие действия:
* В меню Build/Generate signed APK
* Вам необходимо создать путь к хранилищу ключей. В диалоговом окне нажмите Create new
. Вы создадите файл jks, который будет включать ваши ключи. Выберите папку, задайте пароль. Итак, ваше хранилище ключей в порядке.
* Создайте новый ключ для вашего приложения, используя псевдоним, пароль ключа, ваше имя и т. д.
* Нажмите «Далее».
* В диалоговом окне выберите Proguard или нет.
Ваш подписанный APK-файл готов.
Файл справки: https://www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html
Не волнуйся...! Выполните следующие шаги, и вы получите подписанный файл .apk. Я тоже беспокоился об этом, но этот шаг избавил меня от разочарования. Шаги для подписания вашего приложения:
- Экспортируйте неподписанный пакет:
Щелкните правой кнопкой мыши проект в Eclipse -> Инструменты Android -> Экспорт неподписанного пакета приложения (например, здесь мы экспортируем наш GoogleDriveApp.apk на рабочий стол)
Подпишите приложение, используя хранилище ключей и инструмент jarsigner (выполните следующие действия):
Откройте cmd -> измените каталог, в котором существует ваш «jarsigner.exe» (например, здесь, в моей системе, он существует в «C:\Program Files\Java\jdk1.6.0_17\bin»
Теперь введите команду belwo в cmd:
jarsigner -verbose -keystore c:\users\android\debug.keystore c:\users\pir fahim\Desktops\GoogleDriveApp.apk my_keystore_alias
Он попросит вас ввести пароль: Введите парольную фразу для хранилища ключей: он подпишет ваш apk.Чтобы убедиться, что подпись прошла успешно, вы можете запустить:
jarsigner -verify c:\users\pir fahim\Desktops\GoogleDriveApp.apk
Он должен вернуться с: jar проверен.
Метод 2
Если вы используете eclipse с ADT, то легко скомпилировать, подписать, выровнять и подготовить файл к распространению. Что вам нужно сделать, просто выполните следующие действия.
- Файл > Экспорт.
- Экспорт Android-приложения
- Обзор -> выберите свой проект
- Далее --> Далее
Эти шаги скомпилируют, подпишут и заархивируют ваш проект, и теперь вы готовы распространять свой проект или загружать его в магазин Google Play.
Процесс подписания APK
Чтобы вручную подписать файл Android APK, выполните следующие три команды:
Создать файл хранилища ключей
keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
Подпишите файл APK с помощью
jarsigner
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
Выравнивание подписанного APK с помощью инструмента zipalign
zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH
ШАГ 1
Generate Keystore file
keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
Пример:
keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
пароль хранилища ключей: yourApp@123 пароль ключа: yourApp@123
CMD О/П
D:\ru\SignedBuilds\MySignedApp>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:\ru\SignedBuilds\MySignedApp>
ШАГ 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
Пример
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id
CMD О/П
D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-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:\ru\SignedBuilds\MySignedApp>
Verify that your APK is signed
jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH
Пример
jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
CMD О/П
D:\ru\SignedBuilds\MySignedApp>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:\ru\SignedBuilds\MySignedApp>
ШАГ 3
Выровняйте окончательный пакет APK с помощью zipalign
zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK
Пример
zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
CMD О/П
D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.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:\Android\android-sdk\build-tools\19.1.0>
Verify that your APK is Aligned successfully
zipalign -c -v 4 YOUR_APK_PATH
Пример
zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
CMD О/П
D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.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:\Android\android-sdk\build-tools\19.1.0>
Примечание:
Команда Verify предназначена только для проверки правильности сборки и подписи APK!
использованная литература
Я надеюсь, что это поможет всем и каждому :)
Я столкнулся с этой проблемой и решил ее, проверив минимальную версию sdk в манифесте. Он был установлен на 15 (ICS), но мой телефон работал на 10 (Gingerbread).