使用不同的密钥库重新签名apk

24

目前我正在使用私钥库文件签名APK,但我想用不同的密钥库文件签名该APK。如何重新签名这个APK..?


1
不,我不这么认为。 - Trikaldarshiii
请解释一下,您是想签署相同的已签名 APK 还是同一项目的新 APK。 - Dheeresh Singh
我想要重新签名相同的apk文件。 - Rookie
4个回答

37

您可以使用不同的密钥库重新签名您的apk。

按照以下步骤操作:

发布签名:$1.apk → $1_release.apk

步骤1:删除任何以前的签名

  • 将您的.apk扩展名更改为.zip
  • 打开并删除META-INF文件夹
  • 将扩展名更改为.apk
    或者
    命令: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 release

第三步:对齐

命令:zipalign -f 4 [未对齐的apk文件] [发布版apk文件]

示例:

C:\Users\Downloads\adt-bundle-windows-x86\adt-bundle-windows-x86\sdk\too ls>zipalign -f 4 "$1"_unaligned.apk "$1"_release.apk

第四步:清理

命令:rm 4 [unalignedapk]
示例:rm "$1"_unaligned.apk


其他有用的命令:

  1. 生成新密钥
keytool -genkey -alias  -keystore  
  1. 列出密钥
keytool -list -keystore 

注意:

为了签名我们的 apk,我们已经将 JDK 从 1.7 降级到了 1.6.0_43 更新。

原因:

自 JDK 7 起,默认的签名算法已更改,需要在签署 APK 时指定签名和摘要算法(-sigalg 和 -digestalg)。

命令:

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

我需要特别指定 zipalign -p -f 4(请注意额外的 -p)。 - Erhannis

19

这个命令的路径是什么?Jarsigner -verbose -keystore debug.keystore yourapk.apk aliasname - Rookie

10

你也可以使用开源的apk-resigner脚本,它非常易于使用。

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

./signapk.sh calculator.apk ~/.android/debug.keystore android androiddebugkey

如果您想使用调试密钥对APK进行签名,可以使用以下命令。

./signapk.sh calculator.apk 

7
  1. 移除旧的签名

    zip -d xxxx.apk(你的apk文件) META-INF/*

  2. 对apk文件进行签名

    jarsigner -verbose -keystore xxxx.keystore(你的密钥库) -signedjar out_sign.apk(输出的文件名) unsign.apk(未签名apk文件) xxxxxalias(你的别名)

  3. 如果签名不起作用且jdk >= 1.7

    添加参数-digestalg SHA1 -sigalg MD5withRSA
    jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -keystore xxxx.keystore(你的密钥库) -signedjar out_sign.apk(输出的文件名) unsign.apk(未签名apk文件) xxxxxalias(你的别名)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接