簡體   English   中英

如何簽署一個已經編譯好的 Apk

[英]How to Sign an Already Compiled Apk

我已經用 apktool 解碼了一個 APK(因為原始源代碼丟失了)所以我可以解決布局 xml 文件的一些問題。 然后我用 apktool 重新構建了它,當我嘗試在我的設備上安裝它時(使用 adb: adb install appname.apk),它給了我這個錯誤:

[INSTALL_PARSE_FAILED_NO_CERTIFICATES]

然而,原始 apk 是由密鑰庫(在 Eclipse IDE 上)簽名的,這個不是,我如何在 Eclipse 之外使用它的原始 keystone 文件正確簽名!?

使用創建密鑰

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/ 的 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 保留了 APK 對齊和壓縮(與 jarsigner 不同)。

您可以驗證對齊方式

zipalign -c 4 my-aligned.apk

第 3 步:簽名和驗證

使用 24.0.2 及更早版本的構建工具

使用jarsigner ,它與 keytool 一樣,%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

使用構建工具 24.0.3 及更新版本

Android 7.0 引入了 APK 簽名方案 v2,這是一種新的應用簽名方案,可提供更快的應用安裝時間和更多保護,防止對 APK 文件進行未經授權的更改(有關更多詳細信息,請參閱此處此處)。 因此,Google 實現了自己的 apk 簽名器apksignerapksigner !)該腳本文件可以在%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

官方文檔可以在這里找到。

最快的方法是使用調試密鑰庫簽名:

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

您使用 jarsigner 來簽署 APK。 您不必使用原始密鑰庫進行簽名,只需生成一個新密鑰庫即可。 閱讀詳細信息: http : //developer.android.com/guide/publishing/app-signing.html

更新答案

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

舊答案

檢查apk-signer一種簽署應用程序的好方法

對於那些不想為每個項目創建一個 bat 文件來編輯的人,或者不想記住與 keytools 和 jarsigner 程序相關的所有命令而只想在一個過程中完成它的人,請使用這個程序:

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

我構建它是因為我厭倦了每次都必須鍵入所有文件位置的冗長過程。

這個程序可以保存你的配置,所以下次你啟動它時,你只需要點擊生成它就會為你處理它。 而已。

無需安裝,它完全可移植,並將其配置保存在同一文件夾中的 CSV 文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM