我可以使用与其附带的证书不同的证书重新签名.apk吗?

Ant*_*ton 44 android signing apk

如果我有一个apk可以删除当前的签名,有些如何使用不同的.keystore文件重新签名并仍然安装应用程序?

更新:我设法让它与Jorgesys的解决方案一起使用,之前我搞砸了,我解压缩.apk然后在删除META-INF文件夹并将文件扩展名更改回.apk后重新解压缩.我应该做的只是用winzip打开它并删除winzip里面的文件夹.

Jor*_*sys 71

试试这个

1)将.apk的扩展名更改为.zip

2)打开并删除文件夹META-INF

3)将扩展名更改为.apk

4)使用jarsigner和zipalign与您的新密钥库.

希望能帮助到你

  • 1-3个步骤就是= zip -d foo.apk META-INF / \ * (2认同)
  • **注意:**这*不会*与[APK签名架构v2]一起使用(https://source.android.com/security/apksigning/v2)(〜2017) (2认同)

Fat*_*tih 27

如果您正在寻找快速解决方案,您可以使用开源apk-resigner脚本或Google的apksigner工具

   ./signapk.sh application.apk keystore key-pass alias
Run Code Online (Sandbox Code Playgroud)
  • 或者,更简单的解决方案,您可以使用版本24.0.3及更高版本中提供的Google apksigner命令行工具.
apksigner sign --ks release.jks application.apk
Run Code Online (Sandbox Code Playgroud)

您可以在开发人员Android站点上找到有关apksigner工具的更多信息.

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


kre*_*ker 8

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
Run Code Online (Sandbox Code Playgroud)


pat*_*ckf 8

请注意,如果您使用v2签名架构(如果您在AS中使用build-tools 24.0.3+,则会自动执行),您不能仅从APK中删除META-INF文件夹,因为v2将其签名数据添加到zip元块.

然而,谷歌在构建工具24.03(Android 7)中引入的新apksigner能够重新签名 APK.您可以重复签名命令以使用新的密钥库/证书进行签名(旧的密钥库/证书将被删除).

apksigner sign --ks keystore.jks signed_app.apk
Run Code Online (Sandbox Code Playgroud)

无耻的插件:如果你想要一个更简单的工具,可以签署多个apks并有更好的日志输出使用:https://github.com/patrickfav/uber-apk-signer(在后台使用谷歌的apksigner.jar)


Har*_*ani 7

签署发布:$ 1.apk - > $ 1_release.apk"GeneralMills&GoogleApps#2012步骤1:删除任何以前的签名将.apk的扩展名更改为.zip打开并删除文件夹META-INF将扩展名更改为.apk或Command :•zip [originalapk]示例:•zip"$ 1".apk -d

步骤2:使用release.keystore进行签名..命令:•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发布

步骤3:对齐命令:•zipalign -f 4 [unalignedapk] [releaseapk]示例:•C:\ Users\G535940\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\too ls> zipalign -f 4"$ 1"_unaligned.apk"$ 1"_release.apk

第4步:清理命令:•rm 4 [unalignedapk]示例:•rm"$ 1"_unaligned.apk

其他命令可能会有所帮助:

  1. 使用keytool keytool -genkey -alias -keystore生成新密钥

  2. 列出键keytool -list -keystore

用于为Facebook功能生成keyhash的命令

命令:•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 ore release.keystore |打开l sha1 -binary | openssl base64

注意:要签署我们的apks,我们已将JDK从1.7降级到1.6.0_43更新.

原因:从JDK 7开始,默认签名算法已更改,要求您在签署APK时指定签名和摘要算法(-sigalg和-digestalg).

命令:jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore [keystorefile] [originalapk] alias_name