Android的GUI系统韩超@Android技术Android的GUI系统第一部分AndroidGUI系统综述第二部分GUI框架libui库及相关第三部分Surface系统第四部分2D图形系统第五部分3D图形系统第六部分窗口和视图结构第一部分AndroidGUI系统综述libpixelflingerSurfaceFlingerlibuiSurfaceOverlayCameraEglWindowsformatKey/EventSkia图形引擎OpenGL3D引擎android.graphics.Canvasandroid.view.SurfaceGraphicJNISurfaceJNIandroid.view.ViewGLSurfaceViewjavax.microedition.khronos.opengles各种GUI元素OpenGLJNIcom.google.android.gles_jniFrameBuffer驱动C框架层JAVA框架Event输入驱动第一部分AndroidGUI系统综述Android的GUI系统由C语言的框架和JAVA语言的框架组成。GUI系统的C语言部分包括:PixelFlingerlibui(框架库)SurfaceFlinger(Surface的管理)Skia图形图像引擎OpenGL3D引擎各种JNI(向JAVA提供接口)第一部分AndroidGUI系统综述GUI系统JAVA语言的核心包括:android.graphics(对应Skia底层库)android.view.Surface(构建显示介面)android.view.View及其继承者(用于构建UI元素)OpenGL的功能类javax.microedition.khronos.opengles(由com.google.android.gles_jni实现)第二部分GUI框架libui库及相关2.1pixelflinger2.2libui2.1pixelflingerlibpixelflingner.so是一个下层的工具性的类,这个类对外的主要内容是GGLContext结构,以及初始化和卸载的函数。system/core/include/pixelflinger/system/core/libpixelflinger/ssize_tgglInit(GGLContext**context);ssize_tgglUninit(GGLContext*context);libpixelflingner.so这个库对其他的库没有依赖,也并不提供实际的功能,类似一个用于管理工具的库。2.2libuilibui是一个框架性质的集成库,它不仅是显示的中枢,也是整个GUI系统的中枢。UIlib(libui→libpixelflinger),这个的相关内容在以下的路径中:frameworks/base/include/ui/frameworks/base/libs/ui/libui包含了颜色格式,用于实际显示的Egl窗口,按键及事件处理,Suface界面,Overlay,Camera等几个方面的接口。2.2libuiformat部分:这个部分本身定义颜色空间的枚举和数据结构,它需要充用pixelflinger中的一些关于数据格式定义。EglWindows部分:包含了EGL头文件构建的egl_native_window_t,是整个系统显示的基础。Key/Event部分:这是Android系统输入的基础,其中定义按键的映射,通过操作event事件设备来实现获取系统的输入的。2.2libuiSurface:Surface相关的头文件和实现为SurfaceFlinger定义接口和框架。头文件:include/surface/Overlay:定义视频输出的接口。Camera:定义摄像头的框架和接口。头文件:include/camera/第三部分Surface系统3.1Surface系统的结构3.2SurfaceFlinger本地代码3.3Surface的Java和Jni代码3.1Surface系统结构Surface系统的结构:libui.so(或libsurfacefilnger_client.so)提供Surface部分的本地接口。libsurfacefilnger.so提供实现。Java框架主要调用Surface向UI提供接口。Navtive部分主要使用ISurface。3.1Surface系统的结构+registerBuffers()+postBuffer()+unregisterBuffers()ISurfaceBnSurface+ID()+setLayer()+setPosition()+setSize()+setAlpha()+getIdentity()+dirtyRegion()+setDirtyRegion()-mClient-mSurfaceSurface+createSurface()+destroySurface()ISurfaceFlingerClientBnSurfaceFlingerClient+createConnection()+freezeDisplay()+unfreezeDisplay()+setOrientation()+bootFinished()+requestGPU()+revokeGPU()ISurfaceComposerBnSurfaceComposer+createSurface()-ISurfaceFlingerClientSurfaceComposerClientSurface系统的接口3.1Surface系统的结构Surface系统的头文件(路径:frameworks/base/include/ui/或include/surfaceflinger/):ISurface.hISurfaceComposer.hISurfaceFlingerClient.hSurface.hSurfaceComposerClient.h3.1Surface系统的结构Surface系统的源代码文件(路径:frameworks/base/libs/surfaceflinger_client/)ISurfaceComposer.cppLayerState.cppSurfaceComposerClient.cppISurfaceComposerClient.cppISurface.cppSharedBufferStack.cppSurface.cpp3.1Surface系统的结构Surfaceflinger的实现者(路径:frameworks/base/services/surfaceflinger/)SurfaceFlinger类继承了ISurfaceComposer,是一个核心的实现。Layer,LayerBuffer,LayerDim和LayerBlur是不同层的实现。3.1Surface系统的结构classSurfaceControl:publicRefBase{public://......省略部分内容uint32_tgetFlags()const{returnmFlags;}uint32_tgetIdentity()const{returnmIdentity;}voidclear();status_tsetLayer(int32_tlayer);status_tsetPosition(int32_tx,int32_ty);status_tsetSize(uint32_tw,uint32_th);status_thide();status_tshow(int32_tlayer=-1);status_tfreeze();status_tunfreeze();status_tsetFlags(uint32_tflags,uint32_tmask);status_tsetTransparentRegionHint(constRegion&transparent);status_tsetAlpha(floatalpha=1.0f);spSurfacegetSurface()const;//......省略部分内容}Surface.h中的SurfaceControl类:3.1Surface系统的结构classISurface:publicIInterface{classBufferHeap{};virtualstatus_tregisterBuffers(constBufferHeap&buffers)=0;virtualvoidpostBuffer(ssize_toffset)=0;//one-wayvirtualvoidunregisterBuffers()=0;virtualspOverlayRefcreateOverlay(uint32_tw,uint32_th,int32_tformat,int32_torientation)=0;};ISurface.h中的ISurface类,这个类主要被本地的代码所调用。3.1Surface系统的结构+createSurface()+destroySurface()-mId-mFlingerBClient+createConnection()+freezeDisplay()+unfreezeDisplay()+setOrientation()+bootFinished()+requestGPU()+revokeGPU()SurfaceFlinger+setPosition()+setLayer()+setSize()+setAlpha()+getTypeID()+getTypeInfo()LayerBase+getSurface()-client-clientIndex-getIdentityLayerBaseClient+getSurfaceData()+registerBuffers()+postBuffer()+unregisterBuffers()LayerBaseClient::SurfaceLayerBuffer+getSurfaceData()+registerBuffers()+postBuffer()+unregisterBuffers()LayerBuffer::SurfaceBufferLayerBlur+getLayerUser()+getLayers()+getSurfaceHeapManager()Client+registerBuffers()+postBuffer()+unregisterBuffers()ISurfaceBnSurface+ID()+setLayer()+setPosition()+setSize()+setAlpha()+getIdentity()+dirtyRegion()+setDirtyRegion()-mClient-mSurfaceSurface+createSurface()+destroySurface()ISurfaceFlingerClientBnSurfaceFlingerClient+createConnection()+freezeDisplay()+unfreezeDisplay()+setOrientation()+bootFinished()+requestGPU()+revokeGPU()ISurfaceComposerBnSurfaceComposer+createSurface()-ISurfaceFlingerClientSurfaceComposerClientLayerDimLayer接口层SurfaceFlinger实现层3.1Surface系统的结构classISurfaceComposer:publicIInterface{public:enum{//(keepinsyncwithSurface.java)eHidden=0x0000