编译生成APK的全过程

不关是Android 客户端还是Android SDK等,在平时工作的时候都会遇到过生成Apk的时候,用AS的话的确是一键就可以生成一个Apk,但是很多小伙伴还不知道从代码到一个Apk文件这中间到底经历了什么,接下来我们就大致说说,先上一张官方的图:
在这里插入图片描述
这里先大致讲一下图中涉及到的一些工具:

工具用处
aaptAndroid的资源打包工具
aidl用于将Android的接口语言转换成.java的工具
javacJava Compiler
dex将.class文件转换成Davik VM能识别的.dex文件
apkbuilder用于生成一个不带签名的Apk
jarsignerApk签名工具
zipalign字节码对齐工具

大致的一个流程:

  • 用aapt将Android的一些资源(Resource资源、assets文件、AndroidManifest.xml文件等)转换成R.Java文件(生成的R文件在gen目录下)
  • 将AIDL文件通过aidl工具转换成对应的.java文件
  • 然后通过javac工具把.java文件转换成对应的.class文件
  • 然后用javac将.class文件转换成Davik VM支持的dex文件
  • 通过apkbuilder打包成圣一个不带签名文件的Apk
  • 使用jarsigner对apk文件进行签名(签名后才能安装到手机上)
  • 用zipalign对签名后的.apk文件进行对齐处理

Android7.0之后引入了APK Signature Scheme v2,这里要说一下Android 的V1签名和V2签名的区别:
V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。

V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间,从而加快应用安装速度。

v1和v2的签名使用

1)只勾选v1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式

2)只勾选V2签名7.0以下安装不了,7.0以上则使用了V2的方式验证

3)同时勾选V1和V2则所有机型都没问题

开发者可以在build.gradle文件中标明使用哪种签名进行打包

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值