apk签名
Never let success get to your head and never let failure get to your heart.
不要让成功冲昏了头脑,也不要把失败记在心里。
赶时间看这里
我将apksigner签名命令整理成脚本,简化平时的操作。
mac平台下shell脚本
1 | signer命令的路径 |
复制代码保存成shell脚本
使用signer.sh [keystorePath][alias] [apkln]
window平台bat脚本
1 | @echo off |
修改成你本地路径,保存xxx.bat,注意要用ANSI编码格式保存,否则中文乱码
修改成你本地路径,保存xxx.bat,注意要用ANSI编码格式保存,否则中文乱码
修改成你本地路径,保存xxx.bat,注意要用ANSI编码格式保存,否则中文乱码
apksigner工具更多命令见 https://developer.android.google.cn/studio/command-line/apksigner
前言
在实际开发过程中,经常遇到会对一个空包APK进行重签名的情况,例如第三方加固平台,或者应用认领等,APK签名众所周知存在V1和V2两种方式的,对apk签名可以使用一下两种方式:
- jarsigner是JDK提供的针对jar包签名的通用工具,只支持V1方式的签名,不推荐。
- apksigner是针对Android apk签名专用工具,在7.0前只有V1方式的签名,而在7.0以上默认是根据apk的最大最新sdk版本来判断是否进行v1和v2签名,当然你也可以添加命令选项手动开启或关闭(目的是为了向下兼容),推荐
如上面所有APK文件的签名是分v1和v2的区别,jarsigner方式只支持V1签名,apksigner方式支持两种签名方式,那么v1和v2有什么区别呢?
v1与v2区别
APK文件其实是一个ZIP压缩文件,分为三部分,头文件、中央目录、结尾内容,V1签名和V2签名主要区别如下。
- V1签名只会检验第一部分的所有压缩文件,而不理会后两部分内容缺少对APK的完整性校验,V2签名是针对整个APK进行校验(不包含签名块本身)。
- V1中的数据摘要是基于原始未压缩文件计算的。因此在校验时,需要先解压出原始文件,这无疑是耗时的,而V2是对APK本身进行数据摘要计算,不存在解压APK的操作。
jarsigner
在签名命令格式:
1 | cd到jdk的bin目录或者直接应用jarsgner完整路径 |
- keystorePath,签名证书文件路径。
- apkOut,签名后的apk文件路径。
- apkln,需要签名的apk文件路径。
- alias,签名证书的别名。
apksigner
1 | cd Android SDK/build-tools/SDK版本, 输入命令或者直接引用apksigner |
- keystorePath,签名证书文件路径。
- apkOut,签名后的apk文件路径。
- apkln,需要签名的apk文件路径。
- alias,签名证书的别名。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 yinxin!