Android APP 编译流程

2020-08-20  本文已影响0人  _喝喝酒吹吹风_

流程

  1. 编译
  2. DEX
  3. 打包
  4. 签名
  5. 对齐

对齐的作用

根本目的是帮助操作系统更高效率的根据请求索引资源,可以减少CPU访问内存的次数,但是缺点是增加了存储空间

android 编译流程:

android-build-flow.jpg

APK包结构

r 文件夹

项目工程中的 res目录,包括图片、字符串等等
该目录下的资源会被映射到R.java文件中

assets 文件夹

文件夹目录保留工程中assets目录,其他工程下的、jar包中的assets也会合并到该assets目录下,该目录下的资源不会被映射到R.java文件中,访问的时候需要AssetManager类

lib 文件夹

包含所有的so文件,so目录的路径保留原有的路径

META-INF目录

信息描述,签名
所有文件的SHA1-Digest 签名,防止其他程序篡改apk包中的文件

AndroidManifest文件

用来做组件查找

classes.dex文件

虚拟机执行的文件

resources.arsc文件

资源文件索引

D8 R8 和 DEX 的区别

D8 和 DX 比较
D8脱糖

脱糖合并进D8可以减少编译时间,优化更多代码,但是字节码处理工具必须支持JAVA8

  1. .class -> desugar -> ... -> D8 -> .DEX
  2. .class -> [desugar-D8] -> .DEX
Jack编译器

之前的编译

  1. graph LR
  2. Java_Source-.Javac.->Java_ByteCode
  3. Java_ByteCode-.dx.->dex

Jack编译:依赖Java字节码的第三方库在新的编译器体系下就不能使用了,成本偏大

  1. graph LR
  2. Java_Source-.Jack_Compiler.-dex
R8
dex 拆分
refrence
  1. [Android D8 编译器 和 R8 工具]https://blog.csdn.net/Mr_dsw/article/details/90141647
  2. [使用dx将class转dex总结] https://www.jianshu.com/p/16efe657ec7e
上一篇 下一篇

猜你喜欢

热点阅读