簡體   English   中英

如何簽署android apk文件

[英]How to sign an android apk file

我正在嘗試簽署我的apk文件。 我無法弄清楚該怎么做。 我找不到好的深入方向。 我的編程經驗很少,所以任何幫助都會受到贊賞。

手冊很清楚。 請說明您在完成工作后遇到的問題,我建議:

https://developer.android.com/studio/publish/app-signing.html

好的,一個沒有引用或eclipse的小概述,所以留出一些空間來解決錯誤,但它的工作原理如下

  • 在eclipse中打開你的項目
  • 按右鍵 - >工具(android工具?) - >導出簽名的應用程序(apk?)
  • 完成向導:
  • 建立一個新的密鑰庫。 記住密碼
  • 簽署您的應用程序
  • 保存等

另外,從鏈接:

使用Eclipse ADT編譯和簽名

如果您將Eclipse與ADT插件一起使用,則可以使用“導出向導”導出已簽名的.apk(如果需要,甚至可以創建新的密鑰庫)。 導出向導為您執行與Keytool和Jarsigner的所有交互,這允許您使用GUI對包進行簽名,而不是執行手動過程來編譯,簽名和對齊,如上所述。 一旦向導編譯並簽署了包,它還將使用zip對齊執行包對齊。 由於導出向導同時使用Keytool和Jarsigner,因此應確保可以在計算機上訪問它們,如上面的“簽名基本設置”中所述。

要在Eclipse中創建已簽名且對齊的.apk:

  1. 在Package Explorer中選擇項目,然后選擇File> Export。
  2. 打開Android文件夾,選擇Export Android Application,然后單擊Next。

    現在將啟動“導出Android應用程序”向導,該向導將指導您完成對應用程序進行簽名的過程,包括選擇用於對.apk進行簽名(或創建新的密鑰庫和私鑰)的私鑰的步驟。

  3. 完成導出向導,您的應用程序將被編譯,簽名,對齊並准備分發。

以下是有關如何手動簽署APK的指南。 它包含有關在build-tools 24.0.3 (10/2016)中引入的新apk-signer signer的信息

自動化流程:

使用此工具(使用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 Signature Scheme v2,這是一種新的應用程序簽名方案,可提供更快的應用程序安裝時間,並提供更多保護,防止對APK文件進行未經授權的更改(有關詳細信息,請參閱此處此處 )。 因此谷歌實施了他們自己的apk apksigner名為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

並且可以通過驗證

apksigner verify my-app.apk

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

別擔心......! 請按照以下步驟操作,您將獲得已簽名的.apk文件。 我也擔心這一點,但這些步驟讓我擺脫了挫折感。 簽署申請的步驟:

  1. 導出未簽名的包:

右鍵單擊Eclipse中的項目 - > Android工具 - >導出未簽名的應用程序包(這里我們將GoogleDriveApp.apk導出到桌面)

使用密鑰庫和jarsigner工具對應用程序進行簽名(請按照以下步驟操作):

打開cmd - >更改存在“jarsigner.exe”的目錄(就像在我的系統中一樣,它存在於“C:\\ Program Files \\ Java \\ jdk1.6.0_17 \\ bin”中)

現在在cmd中輸入belwo命令:

jarsigner -verbose -keystore c:\\ users \\ android \\ debug.keystore c:\\ users \\ pir fahim \\ Desktops \\ GoogleDriveApp.apk my_keystore_alias

它會要求您提供密碼:為密鑰庫輸入密碼:它將為您的apk簽名。 要驗證簽名是否成功,您可以運行:

jarsigner -verify c:\\ users \\ pir fahim \\ Desktops \\ GoogleDriveApp.apk

它應該回來:jar驗證。

方法2

如果你在ADT中使用eclipse,那么編譯,簽名,對齊和准備文件就很容易分發。你必須按照這個步驟操作。

  • 文件>導出。
  • 導出android應用程序
  • 瀏覽 - >選擇您的項目
  • 下一步 - >下一步

這些步驟將對您的項目進行編譯,簽名和拉鏈對齊,現在您已准備好分發您的項目或在Google Play商店上傳。

對於IntelliJ IDEA或Android Studio的用戶,請執行以下步驟:
*從菜單Build/Generate signed APK
*您需要創建密鑰庫路徑。 從對話框中單擊“ Create new 您將創建一個包含密鑰的jks文件。 選擇文件夾,定義密碼。 所以你的密鑰庫好吧。
*使用別名,密鑰密碼,您的姓名等為您的應用程序創建新密鑰。
* 點擊下一步。
*從對話框中選擇是否Proguard

您簽名的APK文件已准備就緒。

幫助文件: https//www.jetbrains.com/idea/webhelp/generate-signed-apk-wizard.html

我遇到了這個問題,並通過檢查清單中的min sdk版本來解決。 設置為15(ICS),但我的手機運行10(姜餅)

APK簽名流程

要手動簽署Android APK文件,請運行以下三個命令:

  1. 生成密鑰庫文件

     keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000 
  2. 使用jarsigner簽署您的APK文件

     jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME 
  3. 使用zipalign工具對齊簽名APK

     zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH 

步驟1


Generate Keystore file

keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000

例:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000

密鑰庫密碼: yourApp @ 123密鑰密碼: yourApp @ 123

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>keytool -genkey -v -keystore id.keystore
 -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  MySignedApp Sample
What is the name of your organizational unit?
  [Unknown]:  Information Technology
What is the name of your organization?
  [Unknown]:  MySignedApp Demo
What is the name of your City or Locality?
  [Unknown]:  Mumbai
What is the name of your State or Province?
  [Unknown]:  Maharashtra
What is the two-letter country code for this unit?
  [Unknown]:  IN
Is CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra, C=IN corr
ect?
  [no]:  y

Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 10,
000 days
        for: CN=MySignedApp Demo, OU=Information Technology, O=MySignedApp Demo, L=Mumbai, ST=Maharashtra,
 C=IN
Enter key password for <MySignedApp>
        (RETURN if same as keystore password):
Re-enter new password:
[Storing id.keystore]

D:\ru\SignedBuilds\MySignedApp>

第2步


Sign your app with your private keystore using jarsigner

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>jarsigner -verbose -sigalg SHA1withRSA -
digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id ---
ect
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/---.SF
   adding: META-INF/---.RSA
  signing: AndroidManifest.xml
  ..... 
    signing: classes.dex
  signing: lib/commons-codec-1.6.jar
  signing: lib/armeabi/libkonyjsvm.so
jar signed.

Warning:
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not
be able to validate this jar after the signer certificate's expiration date (2044-02-07) or after an
y future revocation date.

D:\ru\SignedBuilds\MySignedApp>

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk

CMD O / P.

D:\ru\SignedBuilds\MySignedApp>jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
 s = signature was verified
  m = entry is listed in manifest
  k = at least one certificate was found in keystore
  i = at least one certificate was found in identity scope

jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not b
e able to validate this jar after the signer certificate's expiration date (2044-02-09) or after any
 future revocation date.

D:\ru\SignedBuilds\MySignedApp>

第3步


使用zipalign對齊最終的APK包

zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH_WITH_NAME_ofSignedAPK

zipalign -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P.

D:\Android\android-sdk\build-tools\19.1.0>zipalign -v 4 D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16
_prod_playstore\MySignedAppS1-release-unsigned.apk D:\ru\ru_doc\Signed_apk\MySignedApp\28.09.16_prod
_playstore\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

  4528613 classes.dex (OK - compressed)
 5656594 lib/commons-codec-1.6.jar (OK - compressed)
 5841869 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk

CMD O / P.

D:\Android\android-sdk\build-tools\19.1.0>zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Verifying alignment of D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk (
4)...

 4453984 res/drawable/zoomout.png (OK)
 4454772 res/layout/tabview.xml (OK - compressed)
 4455243 res/layout/wheel_item.xml (OK - compressed)
 4455608 resources.arsc (OK)
 4470161 classes.dex (OK - compressed)
 5597923 lib/commons-codec-1.6.jar (OK - compressed)
 5783198 lib/armeabi/libkonyjsvm.so (OK - compressed)
Verification succesful

D:\Android\android-sdk\build-tools\19.1.0>

注意:

verify命令只是檢查APK是否正確構建和簽名!

參考

我希望這會有所幫助:)

暫無
暫無

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

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