如何做各大网站广告链接,手机号申请邮箱,淮南百姓网,专门做网站的软件是关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、商业变现、人工智能等#xff0c;希望大家多多支持。 目录 一、导读二、概览三、apksigner3.2 为 APK 签名3.3 验证… 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、商业变现、人工智能等希望大家多多支持。 目录 一、导读二、概览三、apksigner3.2 为 APK 签名3.3 验证 APK 签名3.4 轮换签名3.5 相关命令3.6 示例 四、 jarsigner五、 推荐阅读 一、导读
我们继续总结学习基础知识温故知新。
Android 系统要求所有 APK 必须先使用证书进行数字签名然后才能安装到设备上或进行更新。 使用 Android App Bundle 格式发布应用时需要先使用上传密钥为 app bundle 签名然后才能将其上传到 Play 管理中心其余操作则由 Play 应用签名功能完成。
二、概览
本文提供了有关签名简短指南并可作为查阅该工具支持的不同命令行选项的参考文档。 如需有关如何使用 apksigner 工具为 APK 签名的更完整说明请下文中的 为应用签名。
使用 Android SDK Build Tools 修订版 24.0.3 及更高版本中提供的 apksigner 工具为 APK 签名 并确保 APK 的签名将在该 APK 支持的所有版本 Android 平台上成功通过验证。
jarsigner 是 JDK 包签名的工具 。
下面我们分别讲一讲。
三、apksigner
3.2 为 APK 签名
apksigner sign --ks keystore.jks [signer_options] app-name.apk--ks 选项指定密钥库文件apksigner sign --ks keystore.jks --key key.pk8 --cert cert.x509.pem [signer_options] app-name.apk--key 指定私钥文件私钥文件必须使用 PKCS #8 格式。
--cert 选指定证书文件 证书文件必须使用 X.509 格式。如果需要同时为多个apk进行签名则使用如下命令 ( --next-signer)
apksigner sign [signer_1_options] --next-signer [signer_2_options] app-name.apk3.3 验证 APK 签名
检查 APK 的签名是否可在 APK 支持的所有 Android 平台上被确认为有效
apksigner verify [options] app-name.apk检查 APK 的签名是否可在 Android 4.0.3API 级别 15及更高版本上被确认为有效 apksigner verify --min-sdk-version 15 app.apk
3.4 轮换签名
用的比较少我们做个记录。这个签名方案只在v3中支持作用简单讲就是添加一个新的签名证书。
apksigner rotate --in /path/to/existing/lineage --out /path/to/new/file --old-signer --ks old-signer-jks --new-signer --ks new-signer-jks--out 要保存已签名 APK 的位置。如果未明确提供此选项APK 软件包将就地签名并覆盖输入的 APK 文件3.5 相关命令 --ks 选项指定密钥库文件--ks-key-alias alias signer 在密钥库中的私钥和证书数据的别名的名称--ks-pass input-format 包含 signer 私钥和证书的密钥库的密码--key 指定私钥文件私钥文件必须使用 PKCS #8 格式。--cert 选指定证书文件 证书文件必须使用 X.509 格式。--out 要保存已签名 APK 的位置。如果未明确提供此选项APK 软件包将就地签名并覆盖输入的 APK 文件--next-signer 用于为每个 signer 指定不同的常规选项。--min-sdk-version integer 用来确认 APK 签名将通过验证的最低 Android 框架 API 级别。
该级别值越高表示该工具在为应用签名时可使用的安全参数越强但这会限制 APK 只能用于搭载更新版本 Android 的设备。
默认情况下apksigner 会使用应用清单文件中的 minSdkVersion 属性的值--max-sdk-version integer 用来确认 APK 签名将通过验证的最高 Android 框架 API 级别。默认情况下该工具会使用尽可能高的 API 级别。--rotation-min-sdk-version integer 生成 APK 签名时 APK 的轮替签名密钥应使用的最低 API 级别。该 APK 的原始未轮替签名密钥将用于所有先前的平台版本。默认情况下
搭载 Android 13API 级别 33或更高版本的设备上支持的轮替签名密钥与 v3.1 签名分块搭配使用。--v1-signing-enabled true | false 确定 apksigner 是否会使用基于 JAR 的传统签名方案为给定的 APK 软件包签名。默认情况下
该工具会使用 --min-sdk-version 和 --max-sdk-version 的值来决定何时采用此签名方案--v2-signing-enabled true | false 确定 apksigner 是否会使用 APK 签名方案 v2 为给定的 APK 软件包签名--v3-signing-enabled true | false 确定 apksigner 是否会使用 APK 签名方案 v3 为给定的 APK 软件包签名--v4-signing-enabled true | false 确定 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 会失败。-v、--verbose 使用详细输出模式
3.6 示例
使用 release.jks密钥库中唯一的密钥为 APK 签名 $ apksigner sign --ks release.jks app.apk $ apksigner sign --ks release.jks --ks-key-alias 证书签名别名 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 签名且轮替的目标版本为 SDK 版本 28 及更高版本 $ apksigner sign --ks release.jks --next-signer --ks release2.jks –lineage /path/to/signing/history/lineage app.apk –rotation-min-sdk-version 28
使用轮替签名密钥为 APK 签名且轮替的目标版本为 SDK 版本 33 及更高版本 $ apksigner sign --ks release.jks --next-signer --ks release2.jks –lineage /path/to/signing/history/lineage app.apk
apksigner
四、 jarsigner
jarsigner 只支持 v1 签名用法如下
jarsigner -verbose -keystore 证书签名文件路径 -signedjar 签名后Apk.apk 要签名的Apk.apk 证书签名别名
-verbose 签名时输出详细信息
-keystore 指定签名文件
-signedjar 指定签名apk文件
五、 推荐阅读
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏