Як підписати вже складений Apk


121

Я розшифрував APK за допомогою apktool (оскільки початковий вихідний код був втрачений), щоб я міг виправити деякі проблеми з компонуванням файлів xml. Потім я відновив його резервну копію за допомогою apktool, і коли я спробував встановити його на своєму пристрої (використовуючи adb: adb install appname.apk), він дав мені цю помилку:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

але оригінальний apk однак був підписаний магазином ключів (на IDE затемнення), це не так, як я можу правильно його підписати за допомогою оригінального файлу keystone поза Eclipse !?


так, вся суть сертифікатів полягає в тому, щоб не
дозволяти

це просто це, у мене є оригінал cert, але розшифровка / повторна побудова apk видалила його.
сварог

Відповіді:


285

створити ключ за допомогою

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

потім підпишіть apk, використовуючи:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name

Перевірте тут для отримання додаткової інформації


11
це має бути відповідь, 27 оновлень проти 3 до початкової відповіді, давай!
Кайл

1
якщо ви зробите це і спробуєте встановити APK, ви можете отримати помилку INSTALL_FAILED_DUPLICATE_PERMISSION. Це трапляється, коли оригінальний APK неможливо перезаписати (наприклад, система чи вбудований додаток)
Couitchy

@Couitchy adb shell pm install -r /data/tmp/myapk.apk
д-р Део

14
Якщо ви не хочете морочитися створенням ключа ви можете використовувати ключ налагодження з: Jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~ / .android / debug.keystore app.apk androiddebugkey -storepass андроїд
Пелле

3
Чи є різниця між використанням jarsignerта apksigner? Один вимагає підписання, а потім підкреслення, а інший підписання, а потім підписання
Марія Інес Парнісарі

72

Автоматизований процес:

Скористайтеся цим інструментом (використовує нову програму apksigner від Google):

https://github.com/patrickfav/uber-apk-signer

Відмова: Я розробник :)

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

Крок 1: Створення магазину брелоків (лише один раз)

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

keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

Крок 2 або 4: Zipalign

zipalign який інструмент надається в SDK для Android, наприклад, %ANDROID_HOME%/sdk/build-tools/24.0.2/є обов'язковим кроком оптимізації, якщо ви хочете завантажити apk в Play Store.

zipalign -p 4 my.apk my-aligned.apk

Примітка: при використанні старого jarsignerпотрібно зрівняти ПІСЛЯ підписання. Використовуючи новий apksignerметод, ви робите це ДО ПІД підписання (я знаю, що я плутаю) Викликати zipalign перед apksigner працює чудово, оскільки apksigner зберігає вирівнювання та стиснення APK (на відміну від jarsigner).

Ви можете перевірити вирівнювання за допомогою

zipalign -c 4 my-aligned.apk

Крок 3: Підпишіть і підтвердьте

Використання інструментів build 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

Використання інструментів build 24.0.3 та новіших версій

Android 7.0 представляє APK Signature Scheme v2, нову схему підписання додатків, яка пропонує швидший час встановлення додатків та більш високий захист від несанкціонованих змін файлів APK (див. Тут і тут для отримання більш детальної інформації). Тому Google реалізував власного підписувача apk під назвоюapksigner (duh!). Файл сценарію можна знайти в %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

Офіційну документацію можна знайти тут.


6
Дякуємо за uber-apk-підписник! Чудовий інструмент!
кантоні

2
Для інструментів build 24.0.3 правильним способом виклику zipalign є: zipalign -p 4 my.apk my-align.apk
kinORnirvana

Дякуємо за опис! спробував спершу uber-apk-signner, але не вдалося, ймовірно, тому що у мене на моїй системі встановлено openJDK замість "офіційної" Java. Тож я спробував ручним способом, а також провалився (все-таки така ж помилка [INSTALL_PARSE_FAILED_NO_CERTIFICATES]). Перевірка за допомогою uber-apk-signner дала мені деяке подальше розуміння signature VERIFY FAILED[...] ERROR: JAR signer CERT.RSA: JAR signature META-INF/CERT.RSA uses digest algorithm 2.16.840.1.101.3.4.2.1 and signature algorithm 1.2.840.113549.1.1.1 which is not supported on API Levels [[15, 17]]. Так, андроїд 4.2.2, SHA256 немає? ідеї?
антиплекс

@antiplex повідомте про проблему в github не так
Патрік Фавре

@ for3st Ви маєте на увазі, що мої проблеми можуть бути не через мої обмежені знання про підписання apk, а через певну форму несумісності uber-apk-підписанта? але навіть тоді ручний спосіб також не вдається, що здається не пов'язаним з вашим інструментом ...
антиплекс

14

найшвидший спосіб - підписавшись із зберігачем клавіш налагодження:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

або в Windows:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android


4

Для тих із вас, хто не хоче створити bat-файл для редагування для кожного проекту або не хочеться запам’ятовувати всі команди, пов’язані з програмами keytools та jarsigner, і просто хочуть виконати це за один процес, використовуйте цю програму:

http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx

Я створив це, бо мені набридло тривалий процес кожного разу, коли потрібно було вводити всі файли.

Ця програма може зберегти вашу конфігурацію, тож наступного разу, коли ви її запустите, вам просто потрібно натиснути Створити, вона обробляє це за вас. Це воно.

Не потрібно встановлювати, він повністю портативний і зберігає його конфігурації в CSV в тій же папці.


4

Оновлена ​​відповідь

Перевірте https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/

Стара відповідь

перевірте apk-підписувач на приємний спосіб підписати додаток


1
Найбільш правильно, оскільки це була стара тема, ви можете подивитися на цю shatter-box.com/knowledgebase/…
shereifhawary
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.