如何签署android apk文件

时间:2011-01-31 16:01:09

标签: android apk signing

我正在尝试签署我的apk文件。我无法弄清楚该怎么做。我找不到好的深入方向。我的编程经验很少,所以任何帮助都会受到赞赏。

6 个答案:

答案 0 :(得分:83)

手册足够清晰。在你完成它之后,请指明你遇到的部分,我建议:

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

好的,一个没有参考或者日食的小概述,所以留出一些空间来解决错误,但它的工作原理是这样的

  • 在eclipse中打开您的项目
  • 按鼠标右键 - >工具(android工具?) - > export signed application(apk?)
  • 完成向导:
  • 建立一个新的密钥库。记住密码
  • 签署您的应用
  • 保存等。

另外,从链接:

  

使用Eclipse ADT编译和签名

     

如果您将Eclipse与ADT一起使用   插件,您可以使用导出向导   导出已签名的.apk(甚至是   如有必要,创建一个新的密钥库。   导出向导执行所有操作   与Keytool和。的互动   Jarsigner for you,它允许你   使用GUI签名包   执行手动程序   如所讨论的那样编译,签名和对齐   以上。一旦向导编译完毕   并签署了您的包裹,它也将   执行包对齐   拉链对齐。因为导出向导   你使用Keytool和Jarsigner   应该确保它们是可访问的   在您的计算机上,如上所述   在签名的基本设置中。

     

创建已签名且对齐的.apk   蚀:

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

         

    现在启动“导出Android应用程序”向导,这将指导   你通过签署的过程   您的申请,包括步骤   选择用于的私钥   签署.apk(或创建一个新的.apk)   密钥库和私钥)。

  4.   
  5. 完成导出向导,您的应用程序将被编译,   签名,对齐,准备好了   分布。
  6.   

答案 1 :(得分:30)

以下是有关如何手动签署APK的指南。其中包含有关apk-signer (10/2016)中介绍的新build-tools 24.0.3的信息

自动流程:

使用此工具(使用Google提供的新apksigner):

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

免责声明:我是开发人员:)

手动流程:

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

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

中的keytool provided by the JDK
keytool -genkey -v -keystore my.keystore -keyalg RSA -keysize 2048 -validity 10000 -alias app

步骤2或4:Zipalign

例如,{p> 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

第3步:签署&验证

使用构建工具24.0.2及更早版本

使用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

使用构建工具24.0.3和更新版本

Android 7.0引入了APK Signature Scheme v2,这是一种新的应用签名方案,可提供更快的应用安装时间,并提供更多保护,防止对APK文件进行未经授权的更改(有关详细信息,请参阅herehere)。谷歌实施他们的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

The official documentation can be found here.

答案 2 :(得分:8)

别担心......!请按照以下步骤操作,您将获得已签名的.apk文件。我也担心这一点,但这些步骤让我摆脱了挫折感。 签署申请的步骤:

  1. 导出未签名的包:
  2. 右键单击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商店上传。

答案 3 :(得分:7)

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

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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
    
  4. 第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>
    

    注意:

    验证命令只是检查APK是否正确构建和签名!

    参考

    我希望这能有助于所有人:)