apksigner jarsigner.md

news2025/1/16 8:20:17

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。
专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。

目录

  • 一、导读
  • 二、概览
  • 三、apksigner
    • 3.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.apk

3.3 验证 APK 签名

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

apksigner verify [options] app-name.apk

检查 APK 的签名是否可在 Android 4.0.3(API 级别 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学习专栏

ddd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

Hi٩(๑o๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机&#xff01;带你一周内快速走进嵌入式的大门&#xff0c;let’s go&#xff01; &#xff08;8&#x…

系统安全设计规范(Word原件)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 资料获取&#xff1a;私信或者进主页。…

PAT A1016. 最短路径

题意 有N个结点围成一个圈&#xff0c;相邻两个点之间的距离已知&#xff0c;且每次只能移动到相邻点。然后给出M个询问&#xff0c;每个询问给出两个数字A和B即结点编号(1≤A,B≤N)&#xff0c;求从A号结点到B号结点的最短距离。样例解释 如图3-2所示,共有5个结点&#xff0c;…

昇思25天学习打卡营第5天 | 网络构建

内容介绍&#xff1a;神经网络模型是由神经网络层和Tensor操作构成的&#xff0c;mindspore.nn提供了常见神经网络层的实现&#xff0c;在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。一个神经网络模型表示为一个Cell&#xff0c;它由不…

让你的Python代码更简洁:一篇文章带你了解Python列表推导式

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 列表推导式 📒📝 语法📝 条件筛选📝 多重循环📝 列表推导式的优点📝 使用场景📝 示例代码🎯 示例1🎯 示例2⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,列表推导式是一种强大且高效的语法,它允许你用…

2024-06-17 问AI: 在深度学习中,harmonic mean是什么?

文心一言 在深度学习中&#xff0c;**harmonic mean&#xff08;调和平均数&#xff09;**是一个用于评估模型性能的指标&#xff0c;特别是在处理不平衡的数据集或需要综合多个评估指标的场景中。以下是关于harmonic mean在深度学习中应用的详细解释&#xff1a; 定义&#…

6 PXE高效批量网络装机

6.1部署PXE远程安装服务 在大规模的Liunx应用环境中&#xff0c;如web群集&#xff0c;分布式计算等&#xff0c;服务器往往并不配备光驱设备&#xff0c;在这种情况下&#xff0c;如何为数十乃至上百台服务器裸机快速安装系统呢&#xff1f;传统的USB光驱&#xff0c;移动硬盘…

【数学】100332. 包含所有 1 的最小矩形面积 II

本文涉及知识点 数学 LeetCode100332. 包含所有 1 的最小矩形面积 II 给你一个二维 二进制 数组 grid。你需要找到 3 个 不重叠、面积 非零 、边在水平方向和竖直方向上的矩形&#xff0c;并且满足 grid 中所有的 1 都在这些矩形的内部。 返回这些矩形面积之和的 最小 可能值…

一个整数使用英文表达的字母计数

题目&#xff1a; 把1到5写成英文单词分别是&#xff1a;one、two、three、four、five。这些单词一共用了33544 19 个字母。 如果把1到1000都写成英文单词&#xff0c;一共要用多少个字母&#xff1f; 注&#xff1a;不计入空格和连字符&#xff0c;例如&#xff0c;342&am…

CentOS 7 内核 3.10 升级 6.5.2 (RPM 直装 + 源码编译)

方案一 直接基于 RPM 在线升级&#xff08;简单&#xff0c;速度快&#xff09; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y # &#xff08;选项一&#xff09;升级最新版内…

linux系统cpu飙高如何排查

1.通过top命令查看cpu占比较高的进程ID 2.通过top -H -p <进程ID>命令查看该进程中具体线程&#xff0c;可以看到第一个线程 4311 占用了88.2%的cpu 3.通过 printf "%x\n" <线程ID> 把10进制的线程id转为16进制 4.通过jstack <进程ID> | grep &…

解决ArcGIS导出的svg格式的图片插入Word后的字体问题

背景 在ArcGIS中设置字体为Times New Roman&#xff0c;但导入Word后字体转为等线。 ArcGIS中的Layout 导入Word​​​​​​ 原因分析 Word无法识别嵌入进SVG格式文件中的字体。 解决方案 在Export Layer窗口中&#xff0c;将Embed fonts取消勾选&#xff0c;Convert cha…

【Python/Pytorch 】-- SVM算法

文章目录 文章目录 00 写在前面01 SVM算法简介02 SVM算法的基本原理线性SVM非线性SVM 03 基于Python 版本的SVM算法04 优化目标表达式理解&#xff1a;05 约束条件表达式理解 00 写在前面 SVM算法可以结合鲸鱼算法、飞蛾扑火算法、粒子群算法、灰狼算法、蝙蝠算法等等各种优化…

【Qt笔记①】帮助文档、窗口、按钮、信号和槽、lambda表达式

学习第一天&#xff1a;2024-3-9 文章目录 Qt creator 快捷键帮助文档默认生成的main.cpp逐行解释核心类帮助文档的查阅方法-①代码创建按钮第一个第二个对窗口的其他设置 对象树窗口坐标系信号和槽&#xff08;优点&#xff1a;松散耦合&#xff09;帮助文档的查阅方法-②找信…

【数据挖掘】机器学习中相似性度量方法-闵可夫斯基距离

写在前面&#xff1a; 首先感谢兄弟们的订阅&#xff0c;让我有创作的动力&#xff0c;在创作过程我会尽最大能力&#xff0c;保证作品的质量&#xff0c;如果有问题&#xff0c;可以私信我&#xff0c;让我们携手共进&#xff0c;共创辉煌。 路虽远&#xff0c;行则将至&#…

java周测总结(2)

1.什么是I0流. 是一串流动的字符从先进先出的方式发送信息的通道。 2.IO流共有多少种划分方式,分别都包含哪些流 三种 按流分 输出输入流 按处理单元分 字节和节符 按流的角色方 节点流和处理流 3.如何把字荐串交量str转换为字节数组,并且存入bytes数组当中 byt…

达梦8 通过SF_INJECT_HINT解决新排序机制下失控语句影响其他SQL执行的问题

达梦数据库有两种排序机制。当SORT_FLAG设置0时&#xff0c;采用旧排序机制&#xff1b;当SORT_FLAG1时&#xff0c;采用新排序机制。详见《达梦新老排序机制的对比》 两种排序机制各有优缺点。 新排序机制引入了全局排序区概念&#xff0c;虽然避免了内存溢出导致系统OOM&am…

【0-1系列】从0-1快速了解搜索引擎Scope以及如何快速安装使用(下)

前言 近日&#xff0c;社区版家族正式发布V2024.5版本&#xff0c;其中&#xff0c;社区开发版系列重磅发布Scope开发版以及StellarDB开发版。 为了可以让大家更进一步了解产品&#xff0c;本系列文章从背景概念开始介绍&#xff0c;深入浅出的为读者介绍Scope的优势以及能力…

OOM日志分析

目录 1. 日志分析2. MAT 工具2.1 日志打印方式2.1.1 HeapDumpOnOutOfMemoryError&#xff08;推荐&#xff09;2.1.2 jmp 命令 2.2 MAT分析方式2.2.1 饼图分析2.2.2 树形图分析2.2.2 泄漏疑点 3. 优化 首先说一下结论&#xff1a;通过MAT工具分析才是最精准的&#xff0c;直接通…

[数据概念]梅宏院士-数据要素化怎么办十问

“ 提出问题&#xff0c;才能解决问题。” 5月27日&#xff0c;2023中国国际大数据产业博览会“数据要素流通与价值化”论坛举行&#xff0c;中国科学院院士、中国计算机学会理事长梅宏发出数据要素化十问。 本文主要内容转自 数字化转型战略指南 01 第一问&#xff1a;能否以…