android 如何签署一个已经编译好的APK

bzzcjhmw  于 2023-03-27  发布在  Android
关注(0)|答案(6)|浏览(139)

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

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

原始的apk是由keystore签署的(在eclipse IDE上),这个不是,我怎么能在Eclipse之外用它的原始keystone文件正确地签署它呢!?

yrdbyhpb

yrdbyhpb1#

使用创建密钥

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

查看更多信息

qrjkbowd

qrjkbowd2#

自动化流程:

使用此工具(使用Google的新apksigner):
https://github.com/patrickfav/uber-apk-signer
免责声明:我是开发人员:)

手工流程:

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

您需要生成一次密钥库并使用它来签署您的unsigned apk。使用%JAVA_HOME%/bin/中的keytoolprovided by the JDK

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

第二步或第四步:齐帕林

zipalignwhich is a tool provided by the Android SDK发现在例如%ANDROID_HOME%/sdk/build-tools/24.0.2/是一个强制性的优化步骤,如果你想上传apk到Play商店.

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

**注意:**当使用旧的jarsigner时,你需要zipalign AFTER 签名。当使用新的apksigner方法时,你需要 BEFORE 签名(令人困惑,我知道)。Invoking zipalign before apksigner works fine因为apksigner保留了APK对齐和压缩(不像jarsigner)。

您可以 * 验证 * 与

zipalign -c 4 my-aligned.apk

第三步:签名验证

使用build-tools 24.0.2及更早版本

使用jarsigner,就像在%JAVA_HOME%/bin/中找到的keytool 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

使用build-tools 24.0.3及更新版本

Android 7.0引入了APK签名方案v2,这是一种全新的应用签名方案,可加快应用安装速度,并提供更多保护,防止APK文件遭到未经授权的更改(更多细节请看这里和here)。因此,Google实现了他们的own apk signer called apksigner(duh!)脚本文件可以在%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

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

vuktfyat

vuktfyat3#

最快的方法是使用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
mrfwxfqh

mrfwxfqh4#

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

pvabu6sv

pvabu6sv5#

对于那些不想为每个项目创建一个bat文件来编辑的人,或者不想记住与keytools和jarsigner程序相关的所有命令,只想在一个过程中完成它的人,请使用这个程序:
http://lukealderton.com/projects/programs/android-apk-signer-aligner.aspx
我建立它是因为我受够了每次都要输入所有文件位置的冗长过程。
这个程序可以保存你的配置,所以下次你启动它的时候,你只需要点击生成,它就会为你处理,就是这样。
无需安装,它是完全可移植的,并将其配置保存在同一文件夹中的CSV中。

hfsqlsce

hfsqlsce6#

更新答复

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

旧答案

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

相关问题