Могу ли я повторно подписать .apk с другим сертификатом, чем тот, с которым он пришел?

Если у меня есть apk, я могу удалить текущую подпись, а некоторые - как переписать ее с другим файлом .keystore и все еще установить приложение?

Обновление. Мне удалось заставить его работать с решением Jorgesys и где я перепутал раньше, так это то, что я разархивировал .apk, а затем перекрестил его после удаления папки META-INF и изменил файл расширение обратно в .apk. Я должен был просто открыть его с помощью winzip и удалить папку внутри winzip.

Ответ 1

попробуйте это

1) Измените расширение вашего .apk на .zip

2) Откройте и удалите папку META-INF

3) Измените расширение на .apk

4) Используйте jarsigner и zipalign с вашим новым хранилищем ключей.

надеюсь, что это поможет

Ответ 2

Если вы ищете быстрое решение, вы можете использовать скрипт apk-resigner с открытым исходным кодом или инструмент Google apksigner

  • Сценарий apk-resigner с открытым исходным кодом https://github.com/onbiron/apk-resigner

    Все, что вам нужно сделать, это загрузить скрипт и просто ввести:

   ./signapk.sh application.apk keystore key-pass alias
  • Альтернативно, даже более простое решение, вы можете использовать apksigner командной строки apksigner Google, который доступен в версии 24.0.3 и выше.
apksigner sign --ks release.jks application.apk

Дополнительную информацию об инструменте apksigner можно найти на сайте разработчика Android.

https://developer.android.com/studio/command-line/apksigner.html

Ответ 3

Подписание для выпуска: $1.apk → $1_release.apk " GeneralMills & GoogleApps # 2012 Шаг 1: Удаление любого предыдущего подписания Измените расширение .apk на .zip Откройте и удалите папку META-INF Измените расширение на .apk   Или Команда: • zip [originalapk] Пример: • zip "$ 1" .apk -d

Шаг 2: Подписание с помощью release.keystore.. Command: • jarsigner -verbose -keystore [keystorefile] -signedjar [unalignedapk] [originalapk] alias_name Пример: • C:\Program Files\Java\jdk1.6.0_43\bin > jarsigner -verbose -keystore release.keystore -signedjar "$ 1" _unaligned.apk "$ 1" .apk release

Шаг 3: Выравнивание Команда: • zipalign -f 4 [unalignedapk] [releaseapk] Пример: • C:\Users\G535940\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk \ ls > zipalign -f 4 "$ 1" _unaligned.apk "$ 1" _release.apk

Шаг 4: Очистка Команда: • rm 4 [unalignedapk] Пример: • rm "$ 1" _unaligned.apk

Дополнительные команды могут помочь:

  • Чтобы создать новый ключ с помощью keytool keytool -genkey -alias -keystore

  • Чтобы перечислить ключи keytool -list -keystore

Команда для генерации keyhash для функций Facebook

Команда: • keytool -exportcert -alias alias_name -keystore [keystorefile] | openssl sha1 -binary | openssl base64

Пример: • C:\Program Files\Java\jdk1.6.0_43\bin > keytool -exportcert -alias release -keyst руда release.keystore | открывает l sha1 -binary | openssl base64

Примечание: Чтобы подписать наши апки, мы понизили рейтинг JDK с 1,7 до 1,6,043.

Причина: Начиная с JDK 7 алгоритм подписывания по умолчанию изменился, и вам нужно указать алгоритмы подписи и дайджеста (-sigalg и -digestalg), когда вы подписываете APK.

Команда: jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name

Ответ 4

zip -d my_application.apk META-INF/\*
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk

Ответ 5

Обратите внимание, что если вы используете схему подписи v2 (которая будет автоматически, если вы используете build-tools 24.0. 3+ в AS), вы не можете просто удалить папку META-INF из APK, поскольку v2 добавляет свои данные подписи в мета-блок zip.

Google new apksigner, внедренный в сборку инструментов 24.03 (Android 7), однако может отказаться от APK. Вы можете просто повторить команду подписи для подписания с новым хранилищем ключей/сертификатом (старые будут удалены).

apksigner sign --ks keystore.jks signed_app.apk

Бесстыдный штепсель: если вам нужен простой инструмент, который может подписывать несколько apks и имеет лучший выход для журнала, используйте: https://github.com/patrickfav/uber-apk-signer (использует Google apksigner.jar в фоновом режиме)

Ответ 6

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

Некоторые из файлов внутри .apk должны оставаться сохраненными (сжатие 0%). Это связано с тем, что Android будет использовать сопоставление памяти (mmap) для чтения содержимого без распаковки в память. Такие файлы являются .ogg и некоторые значки.

Ответ 7

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

$ keytool -list -keystore keys.keystore
Your keystore contains 1 entry

your_key_alias, Jan 3, 2013, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 8C:C3:6A:DC:7E:B6:12:F1:4C:D5:EE:F1:AE:17:FB:90:89:73:50:53

чтобы определить псевдоним вашего ключа. Затем запустите:

zip -d your_app.apk "META-INF/*"
jarsigner -verbose -keystore keys.keystore \
   -sigalg MD5withRSA -digestalg SHA1 -sigfile CERT \
   your_app.apk your_key_alias

переписать your_app.apk с помощью ключа с именем your_key_alias.

Дополнительная опция -sigfile CERT представляется необходимой с JDK 8.

Ответ 8

Список клавиш keytool -list

Бесплатная версия, распространение не ограничено Комментарии