如何签署Android APK文件


111

我正在尝试签署我的apk文件。我不知道该怎么做。我找不到很好的深入指导。我几乎没有编程经验,所以将不胜感激。



2
你可以找到关于此这里伟大的教程androidcookers.co.cc/2012/06/...
Bratin

1
我使用了完整的教程,从创建自己的密钥库到在Eclipse中导出签名的APK。mahadera.com/export-signed-android-apk-in-eclipse-ide
Jayson Tamayo

Answers:


84

手册很清楚。请详细说明完成后遇到的困难,我建议:

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

好吧,一个简短的概述,不带参考或偏见,因此留出一些错误的空间,但它的工作原理是这样的

  • 在Eclipse中打开您的项目
  • 按鼠标右键->工具(android工具?)->导出签名的应用程序(apk?)
  • 通过向导:
  • 进行新的密钥存储。记住那个密码
  • 签署您的应用
  • 保存等

另外,从链接:

使用Eclipse ADT进行编译和签名

如果您将Eclipse与ADT插件一起使用,则可以使用“导出向导”来导出已签名的.apk(必要时甚至可以创建一个新的密钥库)。导出向导将为您执行与Keytool和Jarsigner的所有交互,这使您可以使用GUI对程序包进行签名,而不必执行如上所述的手动过程进行编译,签名和对齐。向导编译并签名了程序包后,它还将使用zip align执行程序包对齐。由于“导出向导”同时使用Keytool和Jarsigner,因此应确保它们可以在计算机上访问,如“签名基本设置”中所述。

要在Eclipse中创建签名并对齐的.apk,请执行以下操作:

  1. 在Package Explorer中选择项目,然后选择File> Export。
  2. 打开Android文件夹,选择“导出Android应用程序”,然后单击“下一步”。

    现在将启动“导出Android应用程序”向导,该向导将指导您完成对应用程序进行签名的过程,包括选择用于签名.apk的私钥(或创建新的密钥库和私钥)的步骤。

  3. 完成导出向导,您的应用程序将被编译,签名,对齐并准备分发。

我不知道该如何开始。我正在使用eclipse版本:Helios Service Release 1
chriss 2011年

2
但请阅读整个内容。最后还有一些秘诀
Nanne11年

1
在密钥创建中,我需要输入什么别名?
克里斯

9
您看过手册了吗?-alias <alias_name> An alias for the key. Only the first 8 characters of the alias are used.这只是一个别名。一个名字,如果你愿意的话。我建议“ firstkey” :-)
Nanne

1
抱歉,我还是不明白。我将如何使用该别名。目的是什么?
user462990 2013年

37

这是有关如何手动签名APK的指南。它包含有关(10/2016)中apk-signer引入的新信息build-tools 24.0.3

自动化流程:

使用此工具(使用来自Google的新apksigner):

https://github.com/patrickfav/uber-apk-signer

免责声明:我是开发商:)

手动流程:

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

您需要一次生成一个密钥库,并用它来签名您的unsignedapk。使用JDK提供的keytool %JAVA_HOME%/bin/

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

步骤2或4:Zipalign

zipalign %ANDROID_HOME%/sdk/build-tools/24.0.2/如果您要将apk上传到Play商店,则该工具是Android SDK提供的工具,例如在强制优化步骤中。

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一样的工具,该工具随附于JDK发行版%JAVA_HOME%/bin/并按以下方式使用它:

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签名者apksigner(duh!)。可以在%ANDROID_HOME%/sdk/build-tools/24.0.3//lib子文件夹中的.jar)中找到脚本文件。这样使用

apksigner sign --ks my.keystore my-app.apk --ks-key-alias alias_name

并可以通过

apksigner verify my-app.apk

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


10

对于IntelliJ IDEA或Android Studio的用户,请执行以下步骤:
*从菜单Build/Generate signed APK
*您需要创建密钥库路径。在对话框中,单击Create new。您将创建一个包含密钥的jks文件。选择文件夹,定义密码。这样您的密钥库就可以了。
*通过使用别名,密钥密码,您的姓名等为您的应用程序创建新密钥。
*单击下一步。
*从对话框中选择Proguard

您已签名的APK文件已准备就绪。

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


8

别担心...!请按照以下步骤操作,您将获得签名的.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已验证。

方法二

如果您将eclipse与ADT结合使用,则很容易编译,签名,对齐并准备好文件进行分发。只需按照以下步骤进行操作即可。

  • 文件>导出。
  • 导出android应用
  • 浏览->选择您的项目
  • 下一个->下一个

这些步骤将对您的项目进行编译,签名和zip对齐,现在您可以分发项目或在Google Play商店中上传了。


那正是我需要的,正在使用一个新的在线构建工具,并且不得不使用我以前的密钥库,而不是他们新生成的密钥库。我唯一缺少的是ZIP对齐apk,因此,如果有人遇到相同的问题,请转到此处stackoverflow.com/a/22682132/826194
Larzan 2014年

5

APK签名过程

要手动签名Android APK文件,请运行以下三个命令:

  1. 生成密钥库文件

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

    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-详细-sigalg SHA1withRSA -digestalg SHA1-密钥库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-验证-详细-证书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是否正确构建和签名!

参考资料

我希望这对所有人都有帮助:)


2

我遇到了这个问题,并通过检查清单中的min sdk版本来解决。设置为15(ICS),但是我的手机运行的是10(Gingerbread)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.