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

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

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

尝试这个

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

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

3)将扩展名改为.apk

4)在新的密钥库中使用jarsigner和zipalign。

希望它有帮助

如果你正在寻找一个快速的解决scheme,你可以使用开源的apk-resigner脚本

https://github.com/onbiron/apk-resigner

您只需下载脚本,然后键入:

 ./signapk.sh application.apk keystore key-pass alias 

或者,您可以使用Google的apksigner命令行工具,该工具在24.0.3及更高版本中提供。

 apksigner sign --ks release.jks application.apk 

你可以在https://developer.android.com/studio/command-line/apksigner.htmlfind更多关于apksigner工具的信息。;

签署发布:$ 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 – 详细信息-keystore release.keystore -signedjar“$ 1”_unaligned.apk“$ 1”.apk release

步骤3:alignment命令: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

用于为Facebookfunction生成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 | opens l sha1 -binary | openssl base64

注意:为了签名我们已经把JDK从1.7降级到了1.6.0_43更新。

原因:从JDK 7开始,缺省签名algorithm已经发生变化,您需要在签名APK时指定签名和摘要algorithm(-sigalg和-digestalg)。

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

 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 

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

谷歌新的apksigner在构build工具24.03(Android 7)中引入,但是可以辞职的APK。 您可以重复签名命令来签署一个新的密钥库/证书(旧的将被删除)。

 apksigner sign --ks keystore.jks signed_app.apk 

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

以上所有的解决scheme工作。 只要注意为什么当你重新压缩时不适合你

.apk中的一些文件需要保存(压缩为0%)。 这是因为Android将使用内存映射(mmap)来读取内容,而不用解压缩到内存中。 这些文件是.ogg和一些图标。

假设你的密钥存储在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_key_alias的密钥重新签名your_app.apk

从JDK 8开始,额外的-sigfile CERT选项似乎是必需的。