Aapt 会将主工程、依赖库中的资源(res、assets)和androidManifest都合并,产出R.java、资源及资源索引resources.arsc;
之后javac编译包括R.java文件、主工程的java文件、aidl产生的java文件,产出class文件;如果需要插桩的话就插桩
之后使用Proguard/R8混淆工具对.class文件脱糖、压缩、混淆等,产出新的class文件;
之后使用Dx/D8编译工具将新的class文件再转换成dex文件,
之后打包成apk,然后签名、zipalign优化。
工具:aapt/aapt2、javac、Proguard/R8、Dx/D8、ApkBuilder、zipalign
当手指点击了桌面的App图标时发生了什么 - ProcessOn
主要参考 https://juejin.cn/post/6863756420380196877#heading-12
省流版:
双缓存:为了解决画面撕裂;画面撕裂来自于只有一个buffer时,正在display的那一帧数据被后一帧的数据覆盖了
Vsync:系统在收到VSync pulse(Vsync脉冲)后,将马上开始下一帧的渲染,(CPU开始计算数据)。
三缓冲:当显示器正在写入FrameBuffer同时GPU也正在写入BackBuffer时,下一次渲染开始了,此时CPU可以使用新增的GraphicBuffer进行计算。减少了Jank。(更多缓冲需要耗费更大的内存)
ChoreoGrapher机制:规定了数据计算开始(measure、layout、draw)的时机(vsync信号),使计算到渲染图像数据能有一个完整的16.6ms:更新ui(request()/invalidate())后编舞者注册vsync信号回调,在下一个vsync信号到时候立刻进行view的测量布局绘制