如何签署android apk文件

chr*_*iss 108 android signing apk

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

Nan*_*nne 84

手册很清楚.请说明您在完成工作后遇到的问题,我建议:

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. 完成导出向导,您的应用程序将被编译,签名,对齐并准备分发.

  • 你读过这本手册了吗?`-alias <alias_name>密钥的别名.只使用别名的前8个字符.它只是一个别名.一个名字,如果你愿意的话.我建议"firstkey":-) (9认同)
  • 但请阅读整个事情.最后还有一些针对日食的提示 (2认同)

pat*_*ckf 32

以下是有关如何手动签署APK的指南.它包括有关新apk-signer推出的信息build-tools 24.0.3 (10/2016)

自动化流程:

使用此工具(使用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
Run Code Online (Sandbox Code Playgroud)

第2步或第4步:Zipalign

zipalign 这是Android SDK提供的工具,例如,%ANDROID_HOME%/sdk/build-tools/24.0.2/如果您想将apk上传到Play商店,则必须采用强制优化步骤.

zipalign -p 4 my.apk my-aligned.apk
Run Code Online (Sandbox Code Playgroud)

注意:使用旧版jarsigner时需要在签名进行zipalign .使用新apksigner方法时,请签名之前进行(令人困惑,我知道).在apksigner工作正常之前调用zipalign是因为apksigner保留了APK对齐和压缩(与jarsigner不同).

您可以验证对齐方式

zipalign -c 4 my-aligned.apk
Run Code Online (Sandbox Code Playgroud)

第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
Run Code Online (Sandbox Code Playgroud)

并且可以通过验证

jarsigner -verify -verbose my_application.apk
Run Code Online (Sandbox Code Playgroud)

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

Android 7.0引入了APK Signature Scheme v2,这是一种新的应用程序签名方案,可提供更快的应用程序安装时间,并提供更多保护,防止对APK文件进行未经授权的更改(有关详细信息,请参阅此处此处).因此谷歌实施了自己的apk签名者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
Run Code Online (Sandbox Code Playgroud)

并且可以通过验证

apksigner verify my-app.apk
Run Code Online (Sandbox Code Playgroud)

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


Rup*_*dav 9

APK Signing Process

To manually sign an Android APK file run these three commands:

  1. Generate Keystore file

    keytool -genkey -v -keystore YOUR_KEYSTORE_NAME.keystore -alias ALIAS_NAME -keyalg RSA -keysize 2048 -validity 10000
    
    Run Code Online (Sandbox Code Playgroud)
  2. Sign Your APK file using jarsigner

    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore KEYSTORE_FILE_PATH UNSIGNED_APK_PATH ALIAS_NAME
    
    Run Code Online (Sandbox Code Playgroud)
  3. Align Signed APK using zipalign tool

    zipalign -v 4 JARSIGNED_APK_FILE_PATH ZIPALIGNED_SIGNED_APK_FILE_PATH
    
    Run Code Online (Sandbox Code Playgroud)

STEP 1


Generate Keystore file

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

Example:

keytool -genkey -v -keystore id.keystore -alias MySignedApp -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)

keystore password : yourApp@123 key password : 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>
Run Code Online (Sandbox Code Playgroud)

STEP 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

Example

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore D:\ru\SignedBuilds\MySignedApp\id.keystore D:\ru\SignedBuilds\MySignedApp\MySignedAppS1-release-unsigned.apk id
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

Verify that your APK is signed

jarsigner -verify -verbose -certs JARSIGNED_APK_FILE_PATH

例子

jarsigner -verify -verbose -certs MySignedAppS1-release-unsigned.apk
Run Code Online (Sandbox Code Playgroud)

指令输出/输出

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>
Run Code Online (Sandbox Code Playgroud)

第 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
Run Code Online (Sandbox Code Playgroud)

指令输出/输出

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>
Run Code Online (Sandbox Code Playgroud)

Verify that your APK is Aligned successfully

zipalign -c -v 4 YOUR_APK_PATH

例子

zipalign -c -v 4 D:\ru\SignedBuilds\MySignedApp\MySignedApp.apk
Run Code Online (Sandbox Code Playgroud)

指令输出/输出

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>
Run Code Online (Sandbox Code Playgroud)

笔记:

verify 命令只是为了检查 APK 是否正确构建和签名!

参考

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


tra*_*nte 8

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

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

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


Pir*_*hah 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验证.

方法2

如果你在ADT中使用eclipse,那么编译,签名,对齐和准备文件就很容易分发.你必须按照这个步骤操作.

  • 文件>导出.
  • 导出android应用程序
  • 浏览 - >选择您的项目
  • 下一步 - >下一步

这些步骤将对您的项目进行编译,签名和拉链对齐,现在您已准备好分发您的项目或在Google Play商店上传.