我用apktool解码了一个APK(因为原始源代码丢失了)所以我可以解决布局xml文件的一些问题。然后我用apktool重新安装它,当我尝试在我的设备上安装它时(使用adb:adb install appname.apk)它给了我这个错误:
[INSTALL_PARSE_FAILED_NO_CERTIFICATES]
原来的apk然后是由一个密钥库(在eclipse IDE上)签名的,这个不是,我怎么能用它在Eclipse之外的原始keystone文件正确签名呢?
答案 0 :(得分:211)
使用
创建密钥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
答案 1 :(得分:49)
使用此工具(使用Google提供的新apksigner):
https://github.com/patrickfav/uber-apk-signer
免责声明:我是开发人员:)
您需要生成一次密钥库并使用它来签署您的unsigned
apk。
使用%JAVA_HOME%/bin/
keytool
provided by the JDK
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app
zipalign
which is a tool provided by the Android SDK如果您要将apk上传到Play商店,则%ANDROID_HOME%/sdk/build-tools/24.0.2/
是必需的优化步骤。
zipalign -p 4 my.apk my-aligned.apk
注意:使用旧的jarsigner
时,您需要 AFTER 签名。使用新的apksigner
方法时,您可以之前签名(令人困惑,我知道)。 Invoking zipalign before apksigner works fine因为apksigner保留了APK对齐和压缩(与jarsigner不同)。
您可以验证与
的对齐方式zipalign -c 4 my-aligned.apk
使用jarsigner
,与%JAVA_HOME%/bin/
中找到的comes with the JDK distribution密钥工具一样,并使用它,如下所示:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my.keystore my-app.apk my_alias_name
可以通过
进行验证jarsigner -verify -verbose my_application.apk
Android 7.0引入了APK Signature Scheme v2,这是一种新的应用签名方案,可提供更快的应用安装时间,并提供更多保护,防止对APK文件进行未经授权的更改(有关详细信息,请参阅here和here)。因此,Google实施了他们的own apk signer called apksigner
(呃!)
脚本文件可以在%ANDROID_HOME%/sdk/build-tools/24.0.3/
中找到(.jar位于/lib
子文件夹中)。像这样使用它
apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name
可以通过
进行验证apksigner verify my-app.apk
答案 2 :(得分:10)
最快的方法是使用debug keystore进行签名:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore app.apk androiddebugkey -storepass android
或在Windows上:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore %USERPROFILE%/.android/debug.keystore test.apk androiddebugkey -storepass android
答案 3 :(得分:5)
您使用jarsigner签署APK。您不必使用原始密钥库进行签名,只需生成一个新密钥库即可。阅读详细信息:http://developer.android.com/guide/publishing/app-signing.html
答案 4 :(得分:3)
更新回答
检查https://shatter-box.com/knowledgebase/android-apk-signing-tool-apk-signer/
旧答案
检查apk-signer签署应用的好方法