Android最新打包方式-支持V2

本文详细介绍了Android的V1和V2签名机制,V2签名提高了安装速度,但限制了apk被重新签名。提供了Android 7.0后重签名apk的方法,包括使用jarsigner和apksigner.jar。还提到了Walle工具,一种在apk签名块中添加渠道信息的解决方案,以避免修改apk带来的安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处!

签名机制:

V1:7.0以前默认,使用META-INF目录下三个文件,MANIFEST.MF,CERT.MF,CERT.RSA来保证apk不被修改。

MANIFEST.MF:记录apk资源中除META-INF,所有文件的Base64编码的SHA1值。防止apk资源被修改。

CERT.MF:记录MANIFEST.MF中属性值的Base64。防止MANIFEST.MF被修改。

CERT.RSA:记录通过开发者私钥对CERT.MF计算得到的签名,和开发者公钥。

解析过程是通过PackageManagerService.java和PackageParser.java对上述过程进行逆向操作。如果签名验证成功,则安装成功,否则安装失败。

V2:7.0以后默认此类型签名方式,如不处理安装时显示无证书。V1缺点在于,签名可以被清除,重新签名。

安装时,不用每次再去解压校验每个文件,只需要检验整个APK的数据摘要,发明SigningBlock插入apk修改偏移量满足zip结构要求。安装速度是V1的3倍左右。

将数据摘要、数字证书、额外属性组装成类MF文件

用私钥将MF计算得到类SF文件

将类MF文件和类SF文件,以及开发者公钥,用私钥签名成V2。

结构如下图:

V2严格限制apk不能被重新签名,否则已安装的apk,再替换安装时,检验不通过。

重签名:保证安装。环境:jdk1.8,据说jdk1.7要加入“-digestalg SHA1 -sigalg MD5withRSA”几个参数(未验证)

将apk解压,删除META-INF文件夹,重新压缩成zip格式。

v1:jarsigner -verbose -keystore  “jks路径” -storepass  “存储密码”  -keypass  “键密码”  -signedjar “输出apk 路径”  “转换apk路径”  “alias 别名”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘兆贤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值