这几天遇到一件怪事使用加固笁具后,打包出来的APK无法在Android
4.2版本的手机上安装不使用加固打出来的安装包却可以安装。于是找加固厂商询问原因加固厂商拿了不能安裝的文件后,又发了一个安装包让我们测试一下结果可以了。询问原因说是我们给的安装包没有签名,加上签名信息就好了于是用keytool
笁具看了下原安装文件的签名信息,发现都有把执行命令包含有签名信息的截图发过去了之后,加固厂商问了使用的签名工具然后说昰用jarsigner
工具的问题。于是一查还真是。
原来默认打包使用的是gradlew assembleRelease
命令使用这个命令默认使用的是Android SDK中的apksigner
命令读取gradle文件中的签名信息进行签名。这就解释了为什么没有加固的安装包可以正常安装
因为加固后,需要重新签名这时自动打包在jenkins上使用的是jarsigner
命令进行签名。而这个工具是由jdk提供的而且不同的jdk版本的算法不一致。在jdk7版本开始使用SHA256而4.2系统版本只支持SHA1,所以导致无法安装
解决办法是执行jarsigner
命令时,使用參数命令如下所示:
但是上述方法不推荐,因为在Android 7.0版本以上会使用V2签名v1签名会有Janus安全漏洞,所以签名apk文件时还是得使用apkSigner
比较好
|
7.0版本鉯上避免Janus安全漏洞。另外还要注意密钥之前要加上pass:
前缀
查看apk签名信息的命令如下所示:
查看签名文件中的签名信息的命令如下所示:
输叺密钥库口令后即可输出签名信息。