Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
|
|
More info
小楼一夜听春雨
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
|
|
More info
Android框架提供了两种绘制图形的方式:Canvas和OpenGL.
android.graphics.Canvas是一个2D图形API, 并且是在开发者中最流行的图形API. Canvas运算会在Android中绘制所有原生和自定义android.view.View. 在Android中,Canvas API通过一个名为OpenGLRender的绘制库实现硬件加速,该绘制库将Canvas运算转换为OpenGL运算,以便它们可以在GPU上执行。
从Android 4.0开始,硬件加速的Canvas默认情况下处于启用状态。因此,支持OpenGL ES 2.0的硬件GPU对于Android 4.0及更高版本的设备来说是强制要求。
除了Canvas,开发者渲染图形的另一个主要方式是使用OpenGL ES直接渲染到Surface. Android在Android.opengl包中提供了OpenGL ES接口,开发者可以使用这些接口通过SDK或Android NDK中提供的原生API调用其GL实现。
无论开发者使用什么渲染API,一切内容都会渲染到”Surface”. Surface表示缓冲队列中的生产方,而缓冲队列通常会被SurfaceFlinger消耗。在Android平台上创建的每个窗口都由Surface提供支持。所有被渲染的可见Surface都被SurfaceFlinger合成到显示部分。
下图显示了关键组件是如何协作的
到目前为止,我们已经分析了OpenAtlas中插件的安装,卸载,更新,以及安装好插件之后组件类的加载过程,但是对于这些是如何引发的还不知道,比如,在宿主的一个Activit中调用startActivity()跳转到插件中的一个Activity,如何判断这个Activity在的插件是否已经安装,如果没有,需要在哪里判断并安装呢?
要回答这些问题,就需要对于Android中四大组件的启动过程非常熟悉(主要涉及到ActivityThread,ApplicationThread,H,Instrumentation,ActivityManagerNative,
ActivityManagerProxy,AMS等),之后Hook一些关键的对象,然后在关键的位置进行判断并安装插件
如果看过我的前两篇博客Android插件化(二):OpenAtlas插件安装过程分析和Android插件化(三):OpenAtlas的插件重建以及使用时安装,就知道在插件的安装过程中OpenAtlas做了哪些事,那么插件的卸载就只需要把持久化和内存中的内容移除即可