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的修改都逃不过新的应用签名方案的检查。

 

posted @ 2020-03-27 15:54  hellodingc  阅读(383)  评论(0)    收藏  举报