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

article/2025/9/19 14:38:33

这是【Android 教程系列第 28 篇】,如果觉得有用的话,欢迎关注专栏。

为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必须加固后才能上架。

而对 Apk 签名,本篇博客提供两种工具,下面是文章正文。

操作系统:macOS BigSur 11.4 M1,java 版本: 1.8.0_211 。

注:给 Apk 签名前需要生成密钥 keystore ,如果你不会,可以参考这两篇博客

  • 如何使用 Android Studio 生成 keystore 签名文件
  • 如何使用 Keytool 工具生成 keystore 签名文件

文章目录

      • 一:jarsigner 和 apksigner 两种签名工具的介绍
      • 二:简单了解 v1 签名和 v2 签名的区别
      • 三:对 Apk 签名
        • 方式一:jarsigner
        • 方式二:apksigner
      • 四:检查 Apk 是否已签名 v1、v2、v3、v4

一:jarsigner 和 apksigner 两种签名工具的介绍

jarsigner

jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner ,

比如我的 jarsigner 工具的位置在

/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/bin/jarsigner

效果图如下
在这里插入图片描述

apksigner

apksigner 是 Google 官方提供的针对 Android Apk 签名和验证的专用工具,位于 Android SDK / build-tools / SDK 版本 / apksigner

以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在

/Users/suxing/Library/Android/sdk/build-tools/30.0.2/apksigner

效果图如下

在这里插入图片描述
如果你用的是 Android Studio 或者 IDEA ,安装这两个编辑器时会自动下载 Android SDK ,所以 apksigner 工具也不需要另外安装。

不过,无论是 apk 包 还是 jar 包,其本质都是 zip 格式的压缩包,如果只针对 v1 签名的话,两者的签名过程其实差不多。

apksigner 工具默认同时使用 v1 和 v2 签名,以兼容 Android 7 以下的系统版本。

二:简单了解 v1 签名和 v2 签名的区别

注:该段描述主要参考链接地址为 点击此处,如有描述不当之处,欢迎指正。

v1 签名

在 Android 7.0 (即 Android N,Android Api 24) 以下的版本,只能使用旧签名方案,也就是 v1 签名。

v1 签名使用 JDK 的 jarsigner 工具,对 zip 压缩包的每个文件进行验证,签名后仍可对压缩包进行修改、移动、重新压缩文件。

v2 签名

自 Android 7.0 开始,Google 新增了 v2 签名方案。

v2 签名使用 Google 自带的 apksigner 工具,对 zip 压缩包的整个文件进行验证,签名后不能修改压缩包,包括 zipalgin 。

如果你对 v2 签名的 apk 解压,没有发现签名文件,重新压缩后 v2 签名失效,这说明 v2 签名是对整个 Apk 进行签名验证。

v2 签名相对 v1 签名的优点

  • 因为不能修改压缩包,所以 v2 签名会更安全。
  • v2 签名是对整个 Apk 进行签名验证,不需要解压验证,所以签名验证的时间会更短。

三:对 Apk 签名

我在 Downloads 文件夹下新建了一个未签名的 Apk 和一个密钥库 keysotre,如下图所示
在这里插入图片描述
先用 keytool -printcert -jarfile 命令查看该 Apk 是否签名,如下图所示
在这里插入图片描述
当前 Apk 显示未签名,下面分别介绍如何用 jarsigner 和 apksigner 对 APK 签名。

方式一:jarsigner

jarsigner 只支持 v1 签名,先来看下使用命令,下面命令中涉及到路径的都是文件的绝对路径。

jarsigner -verbose -keystore 证书签名文件路径 -signedjar 签名后新Apk路径.apk 要签名的Apk路径.apk 证书签名别名

在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名,如下图所示
在这里插入图片描述
因为 jarsigner 是对每一个文件进行签名,签名过程中输出的信息比较多,这里我直接截图到最后,如下图所示
在这里插入图片描述
在 Downloads 文件夹下新生成了一个 signed.apk 文件,
在这里插入图片描述
我们对 signed.apk 这个文件用 keytool -printcert -jarfile 命令查看该 Apk 是否签名,
在这里插入图片描述
可以看到已经成功签名,使用 jarsigner 对 Apk 签名,会新生成一个 Apk 文件,老的未签名的 Apk 文件不会受其影响,这点和 apksigner 的 v2 签名是不一样的。

方式二:apksigner

apksigner 默认同时支持 v1 和 v2 签名,先来看下使用命令,下面命令中涉及到路径的都是文件的绝对路径。

apksigner sign --ks 证书签名文件路径 --ks-key-alias 证书签名别名 要签名的apk路径.apk

在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名,如下图所示
在这里插入图片描述
输入密钥库的密码后,直接就输出完毕了,什么情况?这就完成了?

是的,因为 apksigner 是对整个 Apk 包进行验证签名,所以没有其它的输出信息。

回到 Downloads 文件夹后,如下图所示
在这里插入图片描述
会发现多了一个后辍名为 .idsig 的,这个可以不用处理,直接删掉也没问题。

除了这个外,你会发现并没有新生成一个 Apk 文件,这是因为 apksigner 是直接对未签名的 Apk 包进行签名,我们用 keytool -printcert -jarfile 命令查看 allensu.apk 是否签名,如下图所示
在这里插入图片描述
可以看到,最原始的未签名的 allensu.apk 也已签名。

四:检查 Apk 是否已签名 v1、v2、v3、v4

在终端输入如下命令即可

apksigner verify -verbose -print-certs 要检查的Apk路径.apk

如下图所示
在这里插入图片描述
可以看到,allensu.apk 已签名了 v1、v2 和 v3,关于 v4 签名可以暂时不用考虑。

至此,关于 Android 分别使用 jarsigner 和 apksigner 对 APK 签名(v1、v2 签名)的教程便介绍到这里。

你的问题得到解决了吗?欢迎在评论区留言。

赠人玫瑰,手有余香,如果觉得文章不错,希望可以给个一键三连,感谢。


结束语

技术是一点一点积累的,大神也不是一天就可以达到的。原地不动就是退步,所以每天进步一点点。

最后,附上一句格言:"好学若饥,谦卑若愚",望共勉。

http://chatgpt.dhexx.cn/article/ldEyoeWM.shtml

相关文章

【Java可执行命令】(十)JAR文件签名工具 jarsigner:通过数字签名及验证保证代码信任与安全,深入解析 Java的 jarsigner命令~

Java可执行命令之jarsigner 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法3.1.1 可选参数&#xff1a;jarsigner -keystore < url>3.1.2 可选参数&#xff1a;jarsigner -storepass <口令>3.1.3 可选参数&#xff1a;jarsigner -keypass <口令>3.1.4 可选参…

您的凭据不工作,请输入新凭据

转载自 http://m.blog.csdn.net/article/details?id47706021 今天上班同事说远程桌面无法使用&#xff0c;然后VNC连接&#xff0c;查看情况&#xff0c;密码是正确的&#xff0c;防火墙也关了&#xff0c;百思不得其解。 上网查询问题&#xff0c;找到一个解决办法&#xff0…

远程桌面连接提示“您的凭据不工作”

本次操作的是企图远程别人的电脑配置&#xff0c;而非被远程的电脑 在域环境中&#xff0c;如果使用Vista及以上的操作系统&#xff0c;默认情况下&#xff0c;在连接到远程计算机时无法保存凭据。 当我们使用远程桌面连接时&#xff0c;即使已经勾选了“记住我的凭证”。 但是…

凭据不工作

最悲催的事情是什么&#xff1f;那就是你可以远程别人的电脑&#xff0c;但是别人不能远程自己的电脑&#xff01; 背景&#xff1a; 换了个win8.1的系统&#xff0c;刚开始可以远程上,过了几天,电脑突然不能远程了,让我很是郁闷呀. 于是在网上查了好多资料,看看他到底是什么…

win10远程桌面连接凭据怎么设置_win10远程桌面连接提示您的凭据不工作修复方法...

在win10系统中&#xff0c;使用远程桌面可以不在用户电脑前就可以帮助他人&#xff0c;轻松的解决一些自己不在场的难题&#xff0c;然而近日有用户却发现自己的win10系统在进行远程桌面连接时出现提示您的凭据不工作的问题&#xff0c;那么对此有什么方法能够解决呢&#xff1…

计算机远程连接提示凭证不工作,连接远程桌面提示您的凭证不工作怎么办

安装win10正式版&#xff0c;工作需要连接远程桌面&#xff0c;但是连接过程中&#xff0c;提示您的凭证不工作。原有保存的远程帐号密码无法使用&#xff0c;导致远程登录系统失败&#xff0c;连接远程桌面提示您的凭证不工作的解决方法其实很简单&#xff0c;下面由学习啦小编…

远程连接不成功,提示您的凭据不工作的解决办法

1&#xff0c;输入WindowsR键 进入命令行输入模式&#xff0c;在弹出的运行框里输入【gpedit.msc】点击确定&#xff0c;打开本地组策略编辑器 2&#xff0c;然后依次点击【计算机配置】&#xff0c;【管理模板】&#xff0c;【系统】&#xff0c;【凭据分配】。双击打开点击右…

远程桌面连接提示“您的凭据不工作” 解决方案!求解

最佳的方案是&#xff1a; 最好的解决方案&#xff1a; 最重要一点, 主机上要允许用户以非guest身份登录: 主机上运行gpedit.msc, 计算机配置/windows设置/安全设置/本地策略/安全选项/ 网络访问:本地帐户的共享和安全模型 选择: 经典-对本地用户进行身份验证,不改变其本来…

【目标检测】(9) 改进PANet特征提取金字塔,附Tensorflow完整代码

各位同学好&#xff0c;今天和大家分享一下如何使用 注意力机制 和 深度可分离卷积 优化 YOLOV4 的 PANet 特征金字塔。看本篇博客之前&#xff0c;建议大家先看以下几篇&#xff1a; YOLOV4主干网络&#xff1a;https://blog.csdn.net/dgvv4/article/details/123818580 混合…

深度学习_图像分割_PANet论文详解

PANet论链接 PANet介绍 这篇文章提出的Path Aggregation Network (PANet)整体上可以看做是在Mask RCNN上做多处改进&#xff0c;充分利用了特征融合&#xff1a; 引入bottom-up path augmentation结构&#xff0c;充分利用网络浅特征进行分割。引入adaptive feature pooling…

【小样本分割 2020 ICCV】PANet

文章目录 【小样本分割 2020 ICCV】PANet1. 简介2. 网络2.1 整体架构2.2 原型学习2.3 非参数度量学习2.4 原型对齐正则化 3. 代码3.1 backbone3.2 模型代码 【小样本分割 2020 ICCV】PANet 论文题目&#xff1a;PANet: Few-Shot Image Semantic Segmentation with Prototype Al…

TPanel

TPanel位于Standard组件面板上&#xff0c;也是常用的一种容器控件。面板的一个优点就是放在面板上的组件称为面板的一部分&#xff0c;因此它们与面板一起移动。这在设计阶段很有用。 Panel组件的大部分功能在于其Align属性。例如&#xff0c;想显示标题在窗体上端&#xff0c…

[Neck] 空间金字塔池化【池化策略】(Space Pyramid Pool, SPP)模块和路径聚合网络【增强】(Path Aggregation Network, PANet)的结构

文章目录 背景yolo v4 中的空间金字塔池化(Space Pyramid Pool, SPP)模块和路径聚合网络(Path Aggregation Network, PANet)的结构SPP 模块Abstract IntroductionDeep Networks with Spatial Paramid PoolingTraining the NetworkSPP-Net for Image ClassificationSPP-Net for …

芒果改进YOLOv7系列:首发改进特征融合网络BiFPN结构,融合更多有效特征

💡统一使用 YOLOv7 代码框架,结合不同模块来构建不同的YOLO目标检测模型。文章目录 一、BiFPN论文理论部分代码部分YOLOv7+BiFPN在这篇文章中,将BiFPN结构加入到 YOLOv7 结构中 一、BiFPN论文理论部分 EfficientDet: Scalable and Efficient Object Detection BiFPN与P…

算法笔记(六)多尺度特征融合之FPN/PANet

前言 最近论文快deadline了&#xff0c;一直没空更新…今天复习一下多尺度特征融合的常用操作。 1. FPN 特征金字塔 论文&#xff1a;feature pyramid networks for object detection 论文链接 设计思路&#xff1a; 底层的特征语义信息比较少&#xff0c;但是目标位置准确…

PANet:YOLOv4中的路径聚合网络

点击上方“AI公园”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶” 作者&#xff1a;Miracle R 编译&#xff1a;ronghuaiyang 导读 非常简单高效的特征金字塔模块。 是最重要的计算机视觉过程之一&#xff0c;它将图像分割成更小的、多个片段&#xff0c;这样的…

PANet 学习笔记

PANet是18年的一篇CVPR&#xff0c;作者来自港中文&#xff0c;北大&#xff0c;商汤与腾讯优图&#xff0c;PANET可看作Mask-RCNN&#xff0c;是在Mask-RCNN基础上做的几处改进。 Introduce 解决问题&#xff1a; 当前实例分割最佳模型Mask-RCNN的信息传播还不够充分&#…

[小样本图像分割]PANet: Few-Shot Image Semantic Segmentation with Prototype Alignment

PANet:基于原型对齐的Few Shot图像语义分割&#xff08;ICCV19&#xff09; 论文地址 开源代码 摘要 本文从度量学习的角度来解决Few Shot Segmentation问题&#xff0c;提出一种新的原型对齐网络来更好地利用支持集信息。PANet从嵌入空间内的一些支持图像中学习特定类的原型…

PANet:基于金字塔注意力网络的图像超分辨率重建(Pytorch实现)

PANet&#xff1a;基于金字塔注意力网络的图像超分辨率重建 [!] 为了提高代码的可读性&#xff0c;本文模型的具体实现与原文具有一定区别&#xff0c;因此会造成性能上的差异 文章目录 PANet&#xff1a;基于金字塔注意力网络的图像超分辨率重建1.相关资料2.简介3.模型结构4.…

resnet50、FPN、Panet结构及代码

起初faster-r-cnn&#xff0c;只采用最后一层特作为rpn以及head部分的特征图 &#xff0c;后来不断改进&#xff0c;有了FPN&#xff0c; 再后来有了Panet&#xff0c;一般来说网络的层数越深它的语义信息越丰富。但是随着网络层数的加深&#xff0c;检测所需的位置信息就会越差…