apk签名
申明:低级码农问题解决中的参考和解决后的小结,仅用于个人记录,能力有限,可能有些错误,缺陷不自知,欢迎在评论中指正,谢谢!
- apk签名的必要性
apk发布到应用市场,是必须进行签名的。使用第三方sdk,也需要凭借签名文件向对方申请license。
- apk签名的过程
1/生成签名文件。
我是使用Android Studio(3.5)生成签名文件的,各版本的菜单略有差异,3.5的菜单如下:build > Generate Singed Bundle/APK > Android App Bundle > Next > Create New ...,创建过程略,注意记住Key store password,Key alias,Kay password。
使用命令查看签名文件的指纹:keytool -list -v -keystore 签名文件路径

2/签名文件配置到工程中
在App的build.gradle中添加signerConfigs,并把signerConfigs配置给buildTypes,切记signerConfigs添加在buildTypes前面。
android { ...... signingConfigs { debug { storeFile file('......') storePassword "......" keyAlias "......" keyPassword "......" } release { storeFile file('......') storePassword "......" keyAlias "......" keyPassword "......" } } buildTypes { debug { ...... signingConfig signingConfigs.debug } release { ...... signingConfig signingConfigs.release } } }
3/验证打包的apk是否签名
有两种方法。第一种是用命令查看,jarsigner -verify apk路径。如果签名成功,则是jar 已验证,否则为jar 未签名。第二种是解压apk文件,签名成功后的apk在META-INF下多CERT.RSA和CERT.SE两个文件,另外在MANIFEST.MF文件中,也会多很多内容。CERT.RSA包含了公钥信息和发布机构信息,MANIFEST.MF 对apk中的所有文件(class,资源文件)sha-256后再进行base64编码,CERT.SF 对MANIFEST.MF中的每一条记录做sha-256后再进行base64编码。CERT.SF还比MANIFEST.MF多一条记录:SHA-256-Digest-Manifest,这是对MANIFEST.MF进行sha-256 + base6的值。
android7.0引入了新的签名方案V2。V2签名的apk只能在7.0及以上的手机运行。
apk是个zip格式,格式可参考:http://blog.sina.com.cn/s/blog_4c3591bd0100zzm6.html

新的签名方法会在Central Directory区块所在的文件位置前加上Apk Signing Block区块。

新应用签名方案的签名信息会被保存在区块2中, 而区块1、区块3、区块4是受保护的,在签名后任何对区块1、3、4的修改都逃不过新的应用签名方案的检查。
浙公网安备 33010602011771号