Okio数据读取的时序图
2021-02-26 16:52:14 8 举报
Okio数据读取的时序图
作者其他创作
大纲/内容
CompileApp()
准备安装
解析参数\"zip-location\
应用数据拷贝
SegmentPool
Write Buffer
系统调用
readByte()
设置编译环境并打开和加载启动类路径的文件
OpenFromZip()
writableSegment()
read(Segment.SIZE)
DMA拷贝
open()
用户空间
CPU拷贝
opened_dex_files_
根据已安装的APK和新构建的PAK生成一个二进制补丁
校验
从Buffer的Segment链表中取得一个可写的节点。
替换 + 安装
Buffer
网卡
内核空间
仅需要位置、内容表、和签名信息
在新老APK间执行文件级别的diff
Application Buffer
Dex2Oat
构建系统
复制/移动
ParseArgs()
最终读取数据的底层实现。
Segment
Setup()
磁盘
Okio$Source
打开APK中的所有classesN.dex文件,映射进内存,并生成DexFile对象
Read Buffer
DexFile
FileInputStream
系统数据拷贝
检测我们是否能够在不重启应用的情况下替换资源/代码
准备APK 补丁信息
RealBuffredSource
后续的数据读取将从缓存中读取,减少和系统接口调用。
设备
将所有成功加载的DexFile添加到dex_files中,后续的Compile仅编译集合中的dex文件
读取设备APK metadata信息
读取本地APK metadata信息
take()
生成APK用于替换/安装
dex2oat.cc
request(1)
变更检测
main
dex2oat()
读取上一次安装的类信息
require(1)
比较
收藏
收藏
0 条评论
回复 删除
下一页