如何签署已编译的 Apk

我已经用 apktool 解码了一个 APK (因为原始源代码丢失了) ,这样我就可以修复一些关于 xml 文件布局的问题。然后我用 apktool 重新构建了它,当我试图在我的设备上安装它时(使用 adb: adb install appname.apk) ,它给了我这个错误:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

然而,原始 apk 是由 keystore (在 eclipseIDE 上)签名的,而这个不是,我怎样才能用 Eclipse 之外的 keystone 文件正确地签名呢! ?

255047 次浏览

您使用 Jarsigner 来签署 APK 的。您不必使用原来的密钥存储库进行签名,只需生成一个新的密钥存储库即可。详细阅读: http://developer.android.com/guide/publishing/app-signing.html

最新答案

检查 https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/

旧答案

检查 Apk-signer的一个好方法来签署您的应用程序

创建一个密钥

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

点击这里查看更多信息

对于那些不想为每个项目创建一个 bat 文件进行编辑,或者不想记住所有与 keytools 和 jarsigner 程序相关的命令,只想在一个进程中完成的人,可以使用这个程序:

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

我构建它是因为我受够了每次都必须键入所有文件位置的冗长过程。

这个程序可以保存你的配置,所以下次你启动它的时候,你只需要点击生成一个它将为你处理它。就是这样。

不需要安装,它是完全可移植的,并将其配置保存在同一个文件夹的 CSV 中。

最快的方法是使用 debug 密钥存储库进行签名:

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

或在视窗上:

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

自动处理:

使用这个工具(使用 Google 新的 apksigner) :

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

免责声明: 我是开发商:)

手工处理:

步骤1: 生成 Keystore (只生成一次)

您需要生成一个密钥存储库,并使用它来签署 unsigned apk。 使用在 %JAVA_HOME%/bin/中找到的 keytool 由 JDK 提供

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

步骤2或4: Zipalign

如果你想把 apk 上传到 Play Store,zipalign 这是 Android SDK 提供的一个工具是一个强制性的优化步骤。

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

注意: 使用旧的 jarsigner时需要 zipalign 之后签名。当使用新的 apksigner方法时,您使用 之前签名(我知道这很令人困惑)。因为 apksigner 保留了 APK 对齐和压缩(与 jarsigner 不同)。

可以将 核实

zipalign -c 4 my-aligned.apk

第三步: 签名和验证

使用 build-tools 24.0.2及以上版本

使用 jarsigner,就像键盘工具一样,在 %JAVA_HOME%/bin/中找到 附带 JDK 发行版,并像这样使用它:

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name

并且可以通过

jarsigner -verify -verbose my_application.apk

使用 build-tools 24.0.3和更新的版本

Android 7.0引入了 APK 签名方案 v2,一个新的应用程序签名方案,提供更快的应用程序安装时间和更多的保护,以防止未经授权的修改 APK 文件(见 给你给你了解更多细节)。因此,Google 实现了他们的 自己的名为 apksigner的 APK 签名者(废话!) 脚本文件可以在 %ANDROID_HOME%/sdk/build-tools/24.0.3/中找到(. jar 在 /lib子文件夹中)

apksigner sign --ks-key-alias alias_name --ks my.keystore my-app.apk

并且可以通过

apksigner verify my-app.apk

官方文件可以在这里找到。