如何签名已经编译的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文件中。