如何签名已经编译的APK

我使用apktool解码了APK(原始源代码丢失),所以我可以修复布局xml文件的一些问题。 然后我用apktool重build它,当我尝试安装在我的设备上(使用adb:adb install appname.apk)时,它给了我这个错误:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES] 

原来的apk却是由一个keystore签名的(在eclipse IDE上),这个不是,我怎么才能用它原来的Eclipse以外的keystone文件正确地签名呢!

创build一个密钥使用

 keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 

然后签署apk使用:

 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_application.apk alias_name 

点击这里查看更多信息

自动化过程:

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

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

免责声明:我的开发者:)

手动过程:

步骤1:生成密钥库(仅一次)

您需要生成一次密钥库,并使用它来签署unsigned apk。 使用在%JAVA_HOME%/bin/find的JDK提供的keytool

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

步骤2或4:Zipalign

zipalign 是一个由Android SDK提供的工具 ,例如%ANDROID_HOME%/sdk/build-tools/24.0.2/是一个强制优化步骤,如果你想上传apk到Play商店。

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

注意:在使用旧的jarsigner您需要在签名进行zipalign。 当使用新的apksigner方法时,您可以签名之前进行 (困惑,我知道)。 在apksigner工作正常之前调用zipalign,因为apksigner保留APKalignment和压缩(不像jarsigner)。

你可以validationalignment

 zipalign -c 4 my-aligned.apk 

第3步:签名和validation

使用构build工具24.0.2及更高版本

使用jarsigner ,像keytool一样,在%JAVA_HOME%/bin/findJDK发行版 ,并像这样使用它:

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

并可以用来validation

 jarsigner -verify -verbose my_application.apk 

使用构build工具24.0.3和更新

Android 7.0引入了APK签名schemev2,这是一种新的应用签名scheme,可提供更快的应用安装时间,并可防止对APK文件进行未经授权的更改(请参阅此处和此处了解更多详细信息)。 因此,Google实现了自己的apk签名者apksigner (duh!)脚本文件可以在%ANDROID_HOME%/sdk/build-tools/24.0.3/ (.jar位于/lib子文件夹中)。 像这样使用它

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

并可以用来validation

 apksigner verify my-app.apk 

官方文档可以在这里find。

你使用jarsigner签署APK的。 您不必签署原始密钥库,只需生成一个新的密钥库。 阅读详细信息: http : //developer.android.com/guide/publishing/app-signing.html

最快的方法是通过使用debugging密钥库进行签名: jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android

检查apk签名是一个很好的方式来签署你的应用程序

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

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

我build立了它,因为我厌倦了每次都必须input所有文件位置的漫长过程。

这个程序可以保存你的configuration,所以下次启动它时,只需要点击Generate就可以为你处理。 而已。

不需要安装,它是完全便携的,并将其configuration保存在CSV文件中。