1. 工具介绍

jarsigner 是JDK提供的针对jar包签名的通用工具,
位于 JDK/bin/jarsigner

apksigner 是Google官方提供的针对Android apk 签名验证的专用工具
位于 Android SDK/build-tools/SDK version/apksigner.bat
在Android Studio 中点击菜单 Build -> Generate signed apk … 可以打包签名

不管是apk 包,还是jar 包,本质都是zip 格式的压缩包,所以他们的签名过程都差不多(仅限V1签名),
以上两个工具都可以对Android apk 包进行签名


2.1 V1 和V2签名的区别

V1 签名是 jar signature

  • 来自JDK (jarsigner), 对zip 压缩包的每一个文件进行验证, 签名后还能对压缩包进行修改(移动/重新压缩文件)
  • 对 V1 签名的apk/jar 解压,在meta-INF 存放签名的文件(MANIFEST.MF, CERT.SF, CERT.RSA)
  • 其中 MANIFEST.MF 文件保存所有文件的SHA1 指纹(除了META-INF文件), 由此可知, V1 签名是对压缩包中单个文件签名验证

V2 签名是 Full apk signature
来自Google(apksigner), 对zip压缩包的整个文件验证, 签名后不能修改压缩包(包括zipalign),
对V2签名的apk解压,没有发现签名文件,重新压缩后V2签名就失效, 由此可知: V2签名是对整个APK签名验证

V2签名优点很明显:签名更安全(不能修改压缩包)签名验证时间更短(不需要解压验证),因而安装速度加快

从Android 7.0 开始,谷歌增加了新的签名发方式 V2 signature (APK signature )
但 Android 7.0 以下的版本,只能用旧的签名方案, V1 scheme (JAR signature)


2.2 zipalign和V2签名

位于Android SDK/build-tools/SDK版本/zipalign.exe
zipalign 是对zip包对齐的工具,使APK包内未压缩的数据有序排列对齐,从而减少APP运行时内存消耗
zipalign -v 4 in.apk out.apk //4字节对齐优化
zipalign -c -v 4 in.apk //检查APK是否对齐

zipalign可以在V1签名后执行
但zipalign不能在V2签名后执行,只能在V2签名之前执行


3. 签名步骤

1. 生成密钥对
如果已经有密钥库了,这一个步骤是可以忽略的.我们可以用同一个密钥库对一堆app 进行签名,为什么呢,这个想想也很简单,假设我开发了一堆APP, 我肯定是用同一个密钥对它们进行加密的呀.Eclipse或Android Studio在Debug时,对App签名都会使用一个默认的密钥库:默认在C:\Users\用户名\.android\debug.keystore密钥库名:   debug.keystore密钥别名:   androiddebugkey密钥库密码: android1.生成密钥对进入JDK/bin, 输入命令 keytool -genkeypair -keystore 密钥库名 -alias 密钥别名 -validity 天数 -keyalg RSA参数:-genkeypair  生成一条密钥对(由私钥和公钥组成)-keystore    密钥库名字以及存储位置(默认当前目录)-alias       密钥对的别名(密钥库可以存在多个密钥对,用于区分不同密钥对)-validity    密钥对的有效期(单位: 天)-keyalg      生成密钥对的算法(常用RSA/DSA,DSA只用于签名,默认采用DSA)-delete      删除一条密钥提示: 可重复使用此条命令,在同一密钥库中创建多条密钥对例如:     在debug.keystore中新增一对密钥,别名是releasekeytool -genkeypair -keystore debug.keystore -alias release -validity 300002.查看密钥库进入JDK/bin, 输入命令keytool -list -v -keystore 密钥库名参数:-list 查看密钥列表-v    查看密钥详情例如:keytool -list -v -keystore debug.keystore现在debug.keystore密钥库中有两对密钥, 别名分别是androiddebugkey release


3.2 签名

1.方法一(jarsigner,只支持V1签名)进入JDK/bin, 输入命令jarsigner -keystore 密钥库名 xxx.apk 密钥别名从JDK7开始, jarsigner默认算法是SHA256, 但Android 4.2以下不支持该算法,所以需要修改算法, 添加参数 -digestalg SHA1 -sigalg SHA1withRSAjarsigner -keystore 密钥库名 -digestalg SHA1 -sigalg SHA1withRSA xxx.apk 密钥别名参数:-digestalg  摘要算法-sigalg     签名算法例如:用JDK7及以上jarsigner签名,不支持Android 4.2 以下jarsigner -keystore debug.keystore MyApp.apk androiddebugkey用JDK7及以上jarsigner签名,兼容Android 4.2 以下            jarsigner -keystore debug.keystore -digestalg SHA1 -sigalg SHA1withRSA MyApp.apk androiddebugkey2.方法二(apksigner,默认同时使用V1和V2签名)进入Android SDK/build-tools/SDK版本, 输入命令apksigner sign --ks 密钥库名 --ks-key-alias 密钥别名 xxx.apk若密钥库中有多个密钥对,则必须指定密钥别名apksigner sign --ks 密钥库名 --ks-key-alias 密钥别名 xxx.apk禁用V2签名apksigner sign --v2-signing-enabled false --ks 密钥库名 xxx.apk参数:--ks-key-alias       密钥别名,若密钥库有一个密钥对,则可省略,反之必选--v1-signing-enabled 是否开启V1签名,默认开启--v2-signing-enabled 是否开启V2签名,默认开启例如:在debug.keystore密钥库只有一个密钥对apksigner sign --ks debug.keystore MyApp.apk在debug.keystore密钥库中有多个密钥对,所以必须指定密钥别名apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey MyApp.apk

3.3签名验证

1.方法一(keytool,只支持V1签名校验)进入JDK/bin, 输入命令keytool -printcert -jarfile MyApp.apk (显示签名证书信息)参数:-printcert           打印证书内容-jarfile <filename>  已签名的jar文件 或apk文件   2.方法二(apksigner,支持V1和V2签名校验)进入Android SDK/build-tools/SDK版本, 输入命令apksigner verify -v --print-certs xxx.apk参数:-v, --verbose 显示详情(显示是否使用V1和V2签名)--print-certs 显示签名证书信息例如:apksigner verify -v MyApp.apkVerifiesVerified using v1 scheme (JAR signing): trueVerified using v2 scheme (APK Signature Scheme v2): trueNumber of signers: 1

References

https://blog.csdn.net/qq_32115439/article/details/55520012
https://www.jianshu.com/p/53078d03c9bf

Android APK的签名--笔记版 V1 签名和V2签名总结相关推荐

  1. (原创)Android apk应用加固、字节对齐、二次签名全流程

    这篇博客主要是讲如何对apk应用进行加固.对齐和签名的,会有详细的步骤逐一介绍 前言 随着各大加固工具都开始逐一收费后,个人开发中或者中小型企业如何对应用进行加固就成了一个问题.以前我常用的是360加 ...

  2. Android apk 腾讯云-乐固的加固及签名

    最近一个APP要在应用宝上上线,要求要用腾讯云的乐固进行加固,在这里简单介绍一下怎么使用它: 一 :首先要下载腾讯云-乐固的软件,登录,如图所示:           然后点击添加应用,添加自己的ap ...

  3. dashboard android,dashboard下载-Dashboard 安卓版v1.2.12-PC6安卓网

    Dashboard是一款高效的数据分析服务应用.Dashboard可以便捷,高效的对Dashboardf数据进行呈现,数据源丰富,可以构建各种仪表板,使用方便. 软件介绍 Dashboard是一种数据 ...

  4. Android APK签名总结-- V1签名和V2签名使用和区别

    1. 工具介绍 jarsigner 是JDK提供的针对jar包签名的通用工具, 位于 JDK/bin/jarsignerapksigner 是Google官方提供的针对Android apk 签名验证 ...

  5. Android APK 签名、打包笔记

    我们知道,一款Android 要发布的话,必须经过签名,Android目前支持的签名方式包括三种: v1 方案:基于JAR签名. v2 方案:APK 签名方案 v2(在 Android 7.0 中引入 ...

  6. Android 签名方法---同时使用V1和V2签名

    什么是V1和V2签名 V1签名(jar signature): V1是Android7.0之前的签名方式,使用JDK中的jar signature方式对APK进行签名打包.签名完成后会生成一个META ...

  7. 对Android apk 签名 --apksigner

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

  8. Android APK签名 JKS 密钥库使用专用格式。建议使用 “keytool -importkeystore -srckeystore E:\xxxxxx- pkcs12“ 迁移到行业标准格式

    Android Studio中进行签名 转载地址:Android APK签名 JKS 密钥库使用专用格式.建议使用 "keytool -importkeystore -srckeystore ...

  9. 一篇文章看明白 Android v1 v2 签名机制

    Android - v1 & v2 签名机制 相关系列 一篇文章看明白 Android 系统启动时都干了什么 一篇文章了解相见恨晚的 Android Binder 进程间通讯机制 一篇文章看明 ...

最新文章

  1. (转)一个as3写的减速效果
  2. 微型计算机步进电机控制,步进电机的微型计算机控制
  3. XML基础教程(2)
  4. android .so文件详解以及兼容性
  5. java框架ssm整合_SSM三大框架整合详细教程(Spring+SpringMVC+MyBatis)
  6. 谷歌浏览器书签栏怎么隐藏 谷歌Chrome浏览器书签栏隐藏教程
  7. 厉害了!JMeter 模拟超过 5 万的并发用户!
  8. Eclipse导入MySQL驱动包
  9. UE4 使用蓝图进行编辑器扩展
  10. wⅰndows ISO文件备份,5 款 Windows 最佳备份软件
  11. 百词斩不复习_不背单词和百词斩哪个好?
  12. python创建空字典什么意思_Python3基础 dict 创建字典 空字典
  13. 项目【QT5.13频谱分析软件】(一)——开篇介绍
  14. Java实现 LeetCode 787 K 站中转内最便宜的航班(两种DP)
  15. Redis锁解决超卖问题
  16. 第三章 电商分析之会员活跃度
  17. VNC 锁屏之后无法输入密码解锁
  18. java 按照拼音排序,java按照文件名排序,中文按拼音字母排序
  19. LCD6210字符型液晶显示器 (1)
  20. 怎么将计算机的触摸鼠标锁定,戴尔电脑怎么将触控板锁定?

热门文章

  1. 阿里面试这样问:Nacos配置中心交互模型是 push 还是 pull ?(原理+源码分析)...
  2. 如何打造一个经常宕机的业务系统?
  3. 搞一个短信验证码登录,难吗?四步搞定!
  4. 朋友在小厂待到三十多岁了 现在跳槽能找到什么样的工作
  5. 一文搞懂全链路监控:方案概述与比较!
  6. 98页PPT,看懂阿里、小米、京东、美团的组织架构和战略变迁!
  7. 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
  8. 如何确定Scrum团队的最佳规模?
  9. 小程序开发需要注意什么
  10. Leangoo敏捷项目管理软件做多团队大规模敏捷