apksigner

文档地址

https://developer.android.com/studio/command-line/apksigner#rotate_signing_keys_2

您可以使用 Android SDK 构建工具的修订版 24.0.3 及更高版本中提供的 apksigner 工具为 APK 签名,并确保 APK 的签名能够在 APK 支持的所有版本的 Android 平台上成功通过验证。本页提供了有关如何使用该工具的简短指南,并可作为查阅该工具支持的不同命令行选项的参考文档。如需有关如何使用 apksigner 工具为 APK 签名的更完整说明,请参阅为您的应用签名指南。

注意:如果您在使用 apksigner 为 APK 签名后又对 APK 做了更改,则 APK 的签名将会失效。因此,要使用 zipalign 等工具,您必须在为 APK 签名之前使用。

用法

为 APK 签名

使用 apksigner 工具为 APK 签名的语法如下:

apksigner sign --ks keystore.jks |--key key.pk8 --cert cert.x509.pem[signer_options] app-name.apk

在您使用 apksigner 工具为 APK 签名时,必须提供签名者的私钥和证书。您可以通过两种不同的方式添加此信息:

使用 --ks 选项指定密钥库文件。
使用 --key 和 --cert 选项分别指定私钥文件和证书文件。私钥文件必须使用 PKCS #8 格式,证书文件必须使用 X.509 格式。
通常情况下,您只会使用一个签名者为 APK 签名。如果您需要使用多个签名者为 APK 签名,请使用 --next-signer 选项将要应用于每个签名者的常规选项集分隔开:

apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk

验证 APK 签名

确保 APK 签名能在支持的平台上成功通过验证的语法如下:

apksigner verify [options] app-name.apk

轮替签名密钥

轮替签名证书世系或新签名序列的语法如下:

$ apksigner rotate --in /path/to/existing/lineage \--out /path/to/new/file \--old-signer --ks old-signer-jks \--new-signer --ks new-signer-jks

选项

以下列表包含 apksigner 工具支持的每个命令的选项集。

签名命令

常规选项

以下选项指定要应用于签名者的基本设置:

–out
您将要保存已签名 APK 的位置。如果未明确提供此选项,则 APK 软件包将就地签名,并替换输入的 APK 文件。

–min-sdk-version
apksigner 用来确认 APK 签名将通过验证的最低 Android 框架 API 级别。该级别值越高,表示该工具在为应用签名时可使用的安全参数越强,但这会限制 APK 只能用于搭载更新版本 Android 的设备。默认情况下,apksigner 会使用应用清单文件中的 minSdkVersion 属性的值。

–max-sdk-version
apksigner 用来确认 APK 签名将通过验证的最高 Android 框架 API 级别。默认情况下,该工具会使用尽可能高的 API 级别。

–v1-signing-enabled <true | false>
确定 apksigner 是否会使用基于 JAR 的传统签名方案为给定的 APK 软件包签名。默认情况下,该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案。

–v2-signing-enabled <true | false>
确定 apksigner 是否会使用 APK 签名方案 v2 为给定的 APK 软件包签名。默认情况下,该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案。

–v3-signing-enabled <true | false>
确定 apksigner 是否会使用 APK 签名方案 v3 为给定的 APK 软件包签名。默认情况下,该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案。

–v4-signing-enabled <true | false | only>
确定 apksigner 是否会使用 APK 签名方案 v4 为给定的 APK 软件包签名。此方案会在单独的文件 (apk-name.apk.idsig) 中生成签名。如果为 true 并且 APK 未签名,则系统会根据 --min-sdk-version 和 --max-sdk-version 的值生成 v2 或 v3 签名。然后,该命令会根据已签名的 APK 的内容生成 .idsig 文件。使用 only 仅生成 v4 签名,而不会修改 APK 及其在调用前具有的任何签名;如果 APK 没有 v2 或 v3 签名,或者签名使用的密钥不同于为当前调用提供的密钥,则 only 会失败。默认情况下,该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案。

-v,–verbose
使用详细输出模式。

每个签名者的选项

以下选项用于指定特定签名者的配置。如果您仅使用一个签名者为应用签名,就不需要使用这些选项。

–next-signer
用于为每个签名者指定不同的常规选项。

–v1-signer-name
相关文件的基名,此类文件构成当前签名者的 JAR 签名。默认情况下,对于该签名者,apksigner 会使用密钥库的密钥别名或密钥文件的基名。

密钥和证书选项

以下选项用于指定签名者的私钥和证书:

–ks
签名者的私钥和证书链包含在给定的基于 Java 的密钥库文件中。如果文件名设为 “NONE”,则包含密钥和证书的密钥库不需要指定文件,某些 PKCS#11 密钥库就是这种情况。

–ks-key-alias
表示签名者在密钥库中的私钥和证书数据的别名的名称。如果与签名者关联的密钥库包含多个密钥,则必须指定此选项。

–ks-pass
包含签名者私钥和证书的密钥库的密码。您必须提供密码才能打开密钥库。apksigner 工具支持以下格式:

pass:- 密码与 apksigner sign 命令的其余部分一起提供(内嵌在其中)。
env: - 密码存储在给定的环境变量中。
file: - 密码存储在给定文件中的某一行。
stdin - 密码作为标准输入流中的某一行提供。这是 --ks-pass 的默认行为。
注意:如果一个文件中包含多个密码,请分别在不同的行中指定这些密码。apksigner 工具会根据您指定 APK 签名者的顺序将密码与签名者相关联。如果您为签名者提供了两个密码,apksigner 会将第一个密码视为密钥库密码,将第二个密码视为密钥密码。

–pass-encoding
在尝试处理包含非 ASCII 字符的密码时,请添加指定的字符编码(例如,ibm437 或 utf-8)。
密钥工具通常使用控制台的默认字符集转换密码,以加密密钥库。默认情况下,apksigner 会尝试使用多种形式的密码进行解密:Unicode 编码形式、使用 JVM 默认字符集编码的形式,以及使用控制台的默认字符集编码的形式(在 Java 8 及更早版本上)。在 Java 9 上,apksigner 无法检测控制台的字符集。因此,当使用非 ASCII 密码时,您可能需要指定 --pass-encoding。对于密钥工具在不同操作系统或不同语言区域中创建的密钥库,您可能也需要指定此选项。

–key-pass
签名者私钥的密码。如果私钥受密码保护,则需要该密码。apksigner 工具支持以下格式:

pass:- 密码与 apksigner sign 命令的其余部分一起提供(内嵌在其中)。
env: - 密码存储在给定的环境变量中。
file: - 密码存储在给定文件中的某一行。
stdin - 密码作为标准输入流中的某一行提供。这是 --key-pass 的默认行为。
注意:如果一个文件中包含多个密码,请分别在不同的行中指定这些密码。apksigner 工具会根据您指定 APK 签名者的顺序将密码与签名者相关联。如果您为签名者提供了两个密码,apksigner 会将第一个密码视为密钥库密码,将第二个密码视为密钥密码。

–ks-type
与包含签名者的私钥和证书的密钥库关联的类型或算法。默认情况下,apksigner 会使用在安全属性文件中定义为 keystore.type 常量的类型。

–ks-provider-name
请求签名者的密钥库实现时使用的 JCA 提供程序的名称。默认情况下,apksigner 会使用优先级最高的提供程序。

–ks-provider-class
请求签名者的密钥库实现时使用的 JCA 提供程序的完全限定类名。此选项可作为 --ks-provider-name 的替代选项。默认情况下,apksigner 会使用由 --ks-provider-name 选项指定的提供程序。

–ks-provider-arg
要作为 JCA 提供程序类的构造函数的参数传入的字符串值;该类本身由 --ks-provider-class 选项定义。默认情况下,apksigner 会使用该类的 0 参数构造函数。

–key
包含签名者私钥的文件的名称。该文件必须使用 PKCS #8 DER 格式。如果密钥受密码保护,则除非您使用 --key-pass 选项指定其他类型的输入格式,否则 apksigner 会提示您使用标准输入格式输入密码。

–cert
包含签名者证书链的文件的名称。此文件必须使用 X.509 PEM 或 DER 格式。

验证命令

–print-certs
显示有关 APK 签名证书的信息。

–min-sdk-version
apksigner 用来确认 APK 签名将通过验证的最低 Android 框架 API 级别。该级别值越高,表示该工具在为应用签名时可使用的安全参数越强,但这会限制 APK 只能用于搭载更新版本 Android 的设备。默认情况下,apksigner 会使用应用清单文件中的 minSdkVersion 属性的值。

–max-sdk-version
apksigner 用来确认 APK 签名将通过验证的最高 Android 框架 API 级别。默认情况下,该工具会使用尽可能高的 API 级别。

-v、–verbose
使用详细输出模式。

-Werr
将警告视为错误。

示例

为 APK 签名

使用 release.jks(密钥库中唯一的密钥)为 APK 签名:

$ apksigner sign --ks release.jks app.apk

使用私钥和证书(存储为不同的文件)为 APK 签名:

$ apksigner sign --key release.pk8 --cert release.x509.pem app.apk

使用两个密钥为 APK 签名:

$ apksigner sign --ks first-release-key.jks --next-signer --ks second-release-key.jks app.apk

验证 APK 签名

检查 APK 的签名是否可在 APK 支持的所有 Android 平台上被确认为有效:

$ apksigner verify app.apk

检查 APK 的签名是否可在 Android 4.0.3(API 级别 15)及更高版本上被确认为有效:

$ apksigner verify --min-sdk-version 15 app.apk

轮替签名密钥

启用支持密钥轮替的签名证书沿袭:

$ apksigner rotate --out /path/to/new/file --old-signer \--ks release.jks --new-signer --ks release2.jks

再次轮替您的签名密钥:

$ apksigner rotate --in /path/to/existing/lineage \--out /path/to/new/file --old-signer --ks release2.jks \--new-signer --ks release3.jks

apksigner --> apk签名工具相关推荐

  1. 手机apk签名工具安卓版_小飞鱼APK签名工具使用方法

    小飞鱼APK签名工具是小飞鱼旗下的一款APK签名软件.是移动开发者必备的一款软件. 使用方法 1.双击运行小飞鱼APK签名工具.exe文件,出现如下界面: 2.点击"功能",没有签 ...

  2. android apk签名工具_关于keytool和jarsigner工具签名的使用小结

    在我们日常Android应用开发中,我们都要对我们开发的apk做签名处理,或者加固,增强我们apk的安全性,防止被逆向反编译,在apk签名这块,我们一般采用JDK自动工具来签名,下面就对相关工具做个简 ...

  3. android apk签名工具_Android 应用修改为系统签名的方法(macOS)

    在做 Android 工控机应用开发时,经常会涉及到一些要系统签名才能做的功能,比如应用静默更新,关机重启等功能. 本文介绍系统签名的具体操作方法. 需要准备的东西,相关的签名文件.签名工具.要签名的 ...

  4. Android Studio自带apk签名工具——apksigner

    问题背景 解决方法 总结 阅读之前注意: 本文阅读建议用时:5min 本文阅读结构如下表: 项目 下属项目 测试用例数量 问题背景 无 0 解决方法 无 1 总结 无 0 问题背景 最近在看<A ...

  5. 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具 | apksigner 签名工具 )

    文章目录 一.dx 工具 二.zipalign 对齐工具 三.apksigner 签名工具 生成多个 DEX 文件 , 需要使用一些工具 , 本博客中简要介绍这些工具 ; 一.dx 工具 dx 工具 ...

  6. 使用jdk 自带的jarsigner 签名工具签名的apk 和android规范有区别

    jdk 自带的签名工具签名后的 apk : ebuy 是签名文件的 Alias名称. android sdk 签名和jdk 签名之后的apk 对比: android sdk 签名: jdk jarsi ...

  7. 对Android apk 签名 --apksigner

    Android自签名方法,仅作记录. 因 apksigner 签名工具支持V1和V2签名,所以选用它 进行手动签名: 步骤如下: 切到Android SDK/build-tools/SDK版本, 输入 ...

  8. 【Android 教程系列第 28 篇】Android 分别使用 jarsigner 和 apksigner 对 APK 签名(v1、v2 签名)的详细教程

    这是[Android 教程系列第 28 篇],如果觉得有用的话,欢迎关注专栏. 为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必 ...

  9. [APK签名] apksigner APK V2签名

    apksigner V2签名 Android打渠道包时,经常先打一个母包,解压这个母包,完成渠道信息的注入后,需要对APK重新签名,这时就会用到jarsigner 或者 apksigner. 打包涉及 ...

  10. 【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )

    文章目录 一.APK 解析工具 二.解包 -> 分析 -> 重打包 -> 签名 流程 一.APK 解析工具 使用 [Android 逆向]使用 Python 编写 APK 批处理分析 ...

最新文章

  1. (转自scrum中文网)给Scrum Master的十个建议,你值得拥有
  2. SQL与NoSQL区别-存储规范
  3. 从起源到未来,一文看懂70年的人工智能简史
  4. centos7通过yum安装nginx
  5. 做一个可以和时空分类的神经网络
  6. linux fedora14 u盘运行,Win7下Fedora 14 硬盘或U盘安装指南
  7. 中国交通建设PPP模式产业投资现状及运营前景规划咨询报告2021版
  8. python 发邮件 timeout_python发送邮件
  9. 光流 | 高精度变分光流、LK-HS多项式展开的帧间估计、局部全局光流(论文翻译)及光流场与光流算法研究
  10. Go语言入门篇-使用Beego构建完整web应用
  11. 皇牌空战无限服务器,《皇牌空战:无限》正式停服 一个搏击长空的时代终结[多图]...
  12. CSS基本知识(慕课网)
  13. C语言中printf(built: %s %s,__TIME__,__DATE__);方便调试
  14. python traceback most recent_pyspider启动错误: Traceback (most recent call last):
  15. 开发中常遇到的linux系统配置操作整理
  16. Ubuntu 安装MySQL报共享库找不到
  17. ISIS 中 Level1-2路由器向本区域内Level-1邻居下发缺省路由
  18. textfield设置一键删除
  19. python jupyter notebook下载_Jupyter notebook 安装
  20. 9 个 yyds Java项目,可应对各种私活!

热门文章

  1. 矩阵转置,矩阵加,矩阵乘Java
  2. 比特bit,字节Byte,带宽流量和流速的关系,存储容量单位
  3. python zemax_python的用途和优点
  4. 计算机三级网络技术-----DHCP报文分析
  5. 机器学习文本特征提取
  6. 认知差距决定我们的人生差距?!
  7. 个人所得税纳税记录(原税收完税证明)下载方法
  8. 矩形口径喇叭天线设计——参数设置
  9. 必读开发规范之阿里巴巴开发手册(个人整理版)
  10. Java求取主析取范式、主合取范式、成真赋值、成假赋值、打印真值表