android = Linux Kernel + c/c++ Runtime Framework + Dalvik Virtual Machine + Java Runtime Framework
-生成apk的流程
(源码) (dx工具) 打包在apk中的
java编译器----------->java字节码(.class)------------>Dex字节码------------------->classes.dex文件中
-手机安装apk的过程
(java Runtime Framework中的) Socket IPC通知c/c++ Runtime Framework 中的
PackageManagerService解析 install守护进程优化apk的classes.dex
apk文件--------------------------------> + ---------------------------------------------->classes.odex文件
-apk的运行过程
(向Java Runtime Framework中的 (通过socket IPC向c/c++ Runtime Framework 里的
ActivityManagerService发送请求 ) zygote守护进程)
从Launcher点击图标-----------------------------------------> + ------------------>应用程序进程(包含一个Dalvik,并通过
Dalvik加载classes.odex文件 )
-应用程序界面的绘制和渲染过程
(Java Runtime Framework中的 By Binder IPC
SDK提供的UI类
---> WindowManagerService) +------------------>c/c++Runtime Framework中的
申请分配Graphic Buffers SurfaceFlinger申请分配Graphic Buffer,这时
SufaceFlinger通过HAL层次Gralloc模块向Kernel中的
显卡或GPU驱动申请分配真正的Graphic Buffers
------------>绘制UI
(硬件绘制,即,通过c/c++ Runtime Framework 中的OpenGL E绘制)
这时候SDK的UI类的与绘制相关的函数调用通过Dalvik虚拟机都转化成了C/C++ Runtime Framework里面的OpenGL操作。)
应用程序UI绘制完成之后,结果就保存上述的图形缓冲区中。
- 图形缓冲区----->手机屏幕的过程
OpenGL或HWCompsor渲染到
Binder IPC
手机屏幕上的图形缓冲区 SurfaceFlinger提交给
图形缓冲区------------------------>SurfaceFlinger---------------------------------------->主图形缓冲区-------------------->Kernel的图形显卡
------------>在屏幕上显示