前言

为了增加 Apk 的安全性,防止反编译,我们会对开发的 Apk 做签名处理,如果要上架应用商店,部分还会要求 Apk 必须加固后才能上架。另外存在一部分免费加固apk后会删除AndroidStudio打包的签名,需要我们重新签名,这就是本文的由来。

使用工具介绍

jarsigner

jarsigner 是 JDK 提供的针对 jar 包签名的工具,如果你本地已经安装了 Java 环境,会自带 jarsigner,比如我的 jarsigner 工具的位置在:E:\devlop_tool\Java\jdk1.8.0_161\bin

apksigner

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

以我本地的 Android SDK 30.0.2 版本为例, apksigner 工具的位置在:E:\devlop_tool\AndroidSDK\build-tools\30.0.2

下面,我们将使用jarsigner 和 apksigner 两种签名工具分别进行演示。

一. 使用jarsigner签名

1.首先cmd进入jdk的bin目录

2.使用下面签名命令 (以oppo应用转移空包签名为例)

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

3.示例代码(最好指定打包路径方便寻到,以免到bin目录导致异常

jarsigner -verbose -keystore F:\relealseProject\jiagu\xxx.jks -signedjar F:\relealseProject\unsign\vivo_sign.apk F:\relealseProject\unsign\vivo_unsign.apk xxx

4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名

注意:证书别名一定填写正确(不然报错:请指定别名)。输出apk名字和要签名的apk顺序不要错乱(不然报错:jarsigner: 无法打开 jar 文件)

二. 使用apksigner签名

1.首先cmd进入jdk的bin目录

2.使用下面签名命令 (以oppo应用转移空包签名为例)

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

3.示例代码

apksigner sign --ks F:\relealseProject\jiagu\XXX.jks --ks-key-alias XXX F:\workdir\gitlab\ciicbj-app-android\app\release\XXX.apk

4.在终端输入命令后按回车,然后根据提示输入密钥库的密码后开始签名

注意:输入密钥库的密码后,直接就输出完毕了,什么情况?这就完成了?是的,因为 apksigner 是对整个 Apk 包进行验证签名,所以没有其它的输出信息。会发现多了一个后辍名为 .idsig 的,这个可以不用处理,直接删掉也没问题。


简单了解 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 进行签名验证,不需要解压验证,所以签名验证的时间会更短。

两者区别说明:

jarsigner 只支持 v1 签名

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

检查 Apk 是否已签名 v1、v2、v3、v4,并对比两者的区别

在终端输入如下命令即可

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

  • apksigner

结束语

由上图可知两者签名的区别,各位看官根据需要使用即可。

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

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

Android jarsigner和apksigner签名apk(.jks)相关推荐

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

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

  2. android+apk+修改+签名文件位置,Jenkins打包android应用时自动签名apk详解

    前言 如果你是使用android studio编译项目的化,在编译apk只会会自动给apk签名. 但默认配置下jenkins下编译出的apk是unsign的.需要一些额外的设置才能自动sign. 这个 ...

  3. android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解

    前言 如果你是使用android studio编译项目的化,在编译apk只会会自动给apk签名. 但默认配置下jenkins下编译出的apk是unsign的.需要一些额外的设置才能自动sign. 这个 ...

  4. Android Studio 打包、生成jks密钥、签名Apk、多渠道打包

    一.生成jks签名文件 1.选择Build > Generate Signed APK- 2.选择Create new- 3.选择签名文件的路径,这些信息和eclipse一样了,填完点击OK 即 ...

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

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

  6. Android对下载的加固Apk进行签名认证

    Android对下载的加固Apk进行签名认证 加固Apk签名认证 下载加固包和签名文件放到文件目录下 验证JDK环境和jarsigner命令 验证apk包是否是已经加密的 对未签名的apk进行签名 加 ...

  7. 【Android 安全】使用 360 加固宝加固应用 ( 加固工具准备 | 生成签名 APK | 加固操作 | 反编译验证加固效果 )

    文章目录 一. 加固工具准备 二. 生成签名 APK 三. 加固操作 四. 反编译验证加固效果 本博客用于记录下 360 加固保 加固应用流程 ; ( 上一次加固还是一年前 , 过程全忘了 o(╥﹏╥ ...

  8. 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )

    文章目录 一.解压 apk 文件 二.加密生成 dex 文件 三.打包未签名 apk 文件 四.完整代码示例 五.文件解压缩相关代码 六.执行结果 参考博客 : [Android 安全]DEX 加密 ...

  9. android 手动签名apk,记录手动签名APK的过程

    记录手动签名APK的过程 前两天更新了华为平台上的APK,被驳回,原因是新APK签名和老的APK不一致,老用户安装会失败,用命令行安装会报如下的错误: harlanc@harlancdeMacBook ...

最新文章

  1. 网易是世界最好的公司
  2. 和为s的连续正数序列
  3. R语言基础与入门实践
  4. vSphere 6.5 新功能 (1) - 全功能 vCenter S
  5. 简单封装浏览器 cookie 工具类
  6. 如何从另一个线程更新GUI?
  7. matlab zeros(12 1),Matlab中  函数zeroS(1,8) 代表什么意思??
  8. 「HDU6158」 The Designer(圆的反演)
  9. 第四范式入选Forrester中国机器学习Now Tech™,成唯一AutoML专注类大型厂商
  10. 联手微软,Docker公司将推出Docker Desktop for WSL 2
  11. 芯片设计中的latch_Latch-up (闩锁效应)
  12. python计算时间装饰器_python 写一个计算运行时间的装饰器
  13. echarts实现双Y轴之散点和折线图
  14. [考试]20150903
  15. 实验室服务器系统设计,实验室教学管理系统设计与实现
  16. Linux安装fcitx输入法
  17. 开始学习英语的七个步骤。
  18. N个空饮料瓶总共能换多少瓶饮料喝的问题
  19. Python 日志logging模块初探及多线程踩坑(2)
  20. Java 编程问题:四、类型推断

热门文章

  1. delphi笔记之for循环
  2. 行李牌上的条形码是怎么制作的
  3. 爬虫简单实例-爬取拼多多商品信息
  4. 为什么很多程序员宁可打游戏也不追女生
  5. python subprocess_python subprocess 模块传参方法
  6. mmo及时战斗游戏中的场景线程分配
  7. 车牌摇号、限行、交通拥堵未来会通通消失?阿里王坚说利用机器智能可以做到
  8. 金融级安全“零失分”,腾讯云IT管理水平再获国际认可
  9. mysql王者晋级 电子书_“MySQL王者晋级之路”读书笔记-结构与引擎
  10. buzz fizz 翻译_The Fizz-Buzz