Android基础之编译打包签名流程

Android编译打包的步骤如下
        1.生成R.java文件
        2.将aidl文件生成java文件
        3.将java文件编译成class文件
        4.将class文件打包成classes.dex文件
        5.打包资源文件(res、assets、AndroidManifest.xml等)
        6.生成未签名的apk文件
        7.对apk进行签名

KeyStore文件
    给应用签名需要用到一个签名文件,即keystore文件,后缀是 .jks
    1.keystore文件内容:秘钥库类型、秘钥库提供方、别名、创建日期、条目类型、证书链长度、证书(所有者、发布者、序列号、有效期、证书指纹),其中证书指纹包括MD5、SHA1、SHA256、签名算法名称、版本。
    2.如何查看keystore里面的内容
        keytool -list -v -keystore xxx.jks
        其中xxx.jks是你的keystore文件,以上命令是在keystore文件当前目录执行
    3.内容截图

APK文件里面的内容
    1.META-INF目录:该目录下存放签名后的CERT.RSA  CERT.SF 和 MANIFEST.MF 以及一个services目录,services目录是干嘛的大家可以查阅 Java SPI相关知识点
    2.res目录:该目录下存放Android各种原始资源,包括anim、drawable、layout、menu、mipmap、xml等。xml文件在Android N上将私有目录暴露出来的时候会用到
    3.lib 目录:lib目录下存放的是一些so文件(有些时候为了验证so有没有被编译出来,我们可以通过打包,解压查看lib下有没有对应的so文件)
    4.content-provider.ftl:Android N新特性里面权限操作相关内容
    5.resources.arsc:所有本地资源的编译产物,就是一个资源映射文件
    6.AndroidManifest.xml:编码后的AndroidManifest.xml
    7.classes.dex:编译后的class文件被dx转成成Dalvik虚拟机可识别的字节码文件

 

Android签名
    Android签名就是用来保证文件的完整性以及有效性,防止文件被篡改,Android签名采用非对称加密算法,用KeyStore文件里面的私钥进行文件内容的加密,校验的时候用公钥进行解密。而直接对apk内容进行加密的话,apk内容太多,所以会先对apk文件里面的文件进行一个摘要处理。
    1.MANIFEST.MF:这个是摘要文件。apk签名的时候会遍历apk里面的所有文件,对非文件夹非签名文件的文件、逐一生成SHA1值(摘要信息),在用Base64进行编码,如果你改变了apk里面的某个文件,那么该文件的SHA1值自然和MANIFEST.MF里面的对不上,校验自然而然不会通过
    2.CERT.SF:这个是摘要的签名文件。对上面生成的MANIFEST.MF,对MANIFST.MF中的每一条内容分别计算SHA1值,然后再进行Base64编码。此外,把整个MANIFEST.MF的内容进行SHA1值计算,并进行Base64编码,然后将上述内容写入CERT.SF文件中(这样如果MANIFEST.MF被篡改了,就跟CERT.SF里面的摘要对不上,自然校验也不会通过)
    3.CERT.RSA文件:CERT.RSA文件中保存了KeyStore中的证书(公钥)、所采用的加密算法等信息,同时还包括对CERT.SF中的内容用私钥进行加密之后的值
    总结:Android签名的时候先对apk文件进行摘要处理,所有文件对应的SHA1值会存放在META-INFO下面的MANIFEST.MF文件中;然后再对MANIFEST.MF中的每一条内容以及整个文件进行SHA1值计算存放在CERT.SF中;最后将Keystore中的公钥、所采用的加密算法等信息以及对CERT.SF用私钥加密后的值存入CERT.RSA中

参考资料
    1.https://blog.csdn.net/xiqingnian/article/details/27338677

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值