This is a spec which introduce the android system for graphic. it's useful for the graphic engineers.
### 关于Android图形系统的关键知识点
#### 一、Android图形系统的概述
在“Android Graphics System”这份文档中,我们能够了解到Android系统对于图形处理的基本架构和技术实现方式。这对于图形工程师来说是一个非常有价值的参考资料,它详细介绍了Android系统如何管理和优化图形性能。
#### 二、Android 2.2 Froyo中的图形组件
文档中提到了几个关键的图形组件,包括`SurfaceFlinger`、`Libagl`(OpenGLES 1.1)、`pixelflinger`、`Copybit`、`2D gfx Engine`等。这些组件在Android 2.2 Froyo版本中的功能如下:
- **SurfaceFlinger**:负责窗口和用户界面的绘制与管理。在2.2版本中,它通过OpenGLES 1.1来实现3D图形引擎的功能。
- **Libagl (OpenGLES 1.1)**:提供了一个软件实现的3D渲染管道,支持OpenGLES 1.1标准。
- **pixelflinger**:由JIT代码生成加速的库,支持2D图形复制加速。
- **Copybit**:定义在`hardware/libhardware/include/hardware/copybit.h`中,用于执行矩形位图复制操作。支持常见的32/16位RGB和YCbCr颜色格式,并可以进行翻转、旋转等变换操作。
- **2D gfx Engine**:基于CPU/SIMD加速的2D矢量图形库,用于2D形状、图像和字体的渲染。
#### 三、Skia与Libagl的角色
- **Skia**:这是一个纯软件实现的2D矢量图形库,不支持3D引擎或OpenGLES加速。它被广泛应用于2D图形的绘制,包括形状、图像和字体的渲染。
- **Libagl**:理论上可以完全被OEM厂商的驱动堆栈替换,但实际上这个替换是否可行取决于具体硬件的支持情况。
#### 四、Android 2.1优化
文档提到,在Android 2.1版本中进行了以下优化:
- **JIT for JVM/Dalvik**:为Java虚拟机和Dalvik虚拟机提供了即时编译器。
- **Hardware Accelerate Copybit**:通过硬件加速Copybit操作。
- **JIT for pixelflinger**:对pixelflinger进行了即时编译优化。
- **SIMD for Skia**:利用SIMD指令集对Skia进行了加速。
#### 五、性能表现
根据文档提供的数据,Android 2.1版本在720p分辨率下能够达到60fps的流畅度,适用于大多数应用和浏览器,但对于游戏来说可能细节不够丰富。
#### 六、Android 4.0的变化
- **Copybit in libagl**:自2010年7月30日起,Android 4.0不再支持libagl中的Copybit功能。
- **OpenGLES 2.0 Support**:增加了对OpenGLES 2.0的支持。
- **High-level Render Scripts Support**:基于LLVM提供高级的Render Scripts支持,支持3D渲染和计算任务。
- **Skia with GPU Backend**:Skia现在也有了GPU后端支持。
#### 七、Android 4.0 Graphics API
- **Canvas and Drawables**:通过Skia提供的Canvas和Drawables支持。
- **Hardware Acceleration**:只针对2D图形加速。
- **OpenGL ES**:支持ES 1.1和ES 2.0,可以通过Java封装或者NDK使用原生代码调用。
- **Animation**:虽然文档中没有明确提到动画支持的具体细节,但考虑到其他更新,可以推测Android 4.0在动画方面也有一定的提升。
这份文档为我们展示了Android图形系统从2.2到4.0版本的发展历程,以及各个版本中图形处理的关键技术和优化方法。这对于理解Android图形系统的架构和演变过程具有重要的参考价值。