Android系统开发全攻略(一)
现方面是Android系统中的硬件抽象层(Hardware Abstract Layer),硬件抽象层对下调用Linux中的驱动程序,对上提供接口,以供Android系统的其他部分(通常为Android本地框架层)调用。
提示:Android硬件抽象层的接口是本地移植层的接口,不属于标准API,不具有向前或者向后兼容性。
在Android系统需要移植的内容,主要包含了以下的各个部分:
显示部分(Display)
包括framebuffer驱动+Gralloc模块(可选择是否实现)
用户输入部分(Input)
包括Event驱动+EventHub(Android标准内容)
多媒体编解码(Codec)
包括硬件Codec驱动+Codec插件(如OpenMax)
3D加速器部分(3D Accelerator)
包括硬件OpenGL驱动+OpenGL插件
音频部分(Audio)
包括Audio驱动+Audio硬件抽象层
视频输出部分(Video Out)
包括视频显示驱动+Overlay硬件抽象层
摄像头部分(Camera)
包括Camera驱动(通常是v4l2)+Camera硬件抽象层
电话部分(Phone)
Modem驱动程序+RIL库
全球定位系统部分(GPS)
包括GPS驱动(通常为串口)+GPS硬件抽象层
无线局域网部分(WIFI)
包括Wlan驱动和协议+WIFI的适配层(Android标准内容)
蓝牙部分(Blue Tooth)
包括BT驱动和协议+BT的适配层(Android标准内容)
传感器部分(Sensor)
包括Sensor驱动+Sensor硬件抽象层
震动器部分(Vibrator)
包括Vibrator驱动+Vibrator硬件抽象层(Android标准内容)
背光部分(Light)
包括Light驱动+ Light硬件抽象层
警告器部分(Alarm)
包括Alarm驱动和RTC系统+用户空间调用(Android标准内容)
电池部分(Battery)
包括电池部分驱动+电池的硬件抽象层(Android标准内容)
Android中具有很多组件,但并不是每一个部件都需要移植,对于一些纯软的组件,就没有移植的必要。对于一些部件,例如浏览器引擎,虽然需要下层网络的支持,但是并非直接为其移植网络接口,而是通过无线局域网或者电话系统数据连接来完成标准的网络接口。
Android的移植主要可以分成几个类型:基本图形用户界面(GUI)部分,包括显示部分和用户输入部分;和硬件相关的加速部分,包括媒体编解码和OpenGL;音视频输入输出环节,包括音频,视频输出和摄像头部分;连接部分,包括无线局域网,蓝牙,GPS;电话部分;附属部件包括传感器、背光、振动器等。
除了以上的移植方面,电源管理也是非常重要的一个方面,它和Android的各个子系统都有关系。
Android系统主要需要移植部件如图2所示。
![](../img/eep/emb/emb-26469orwqvigitha.jpg)
图2 Android系统主要需要移植部件
对于大部分子系统,硬件抽象层和驱动程序都需要根据实际系统的情况实现,例如:传感器部分、音频部分、视频部分、摄像头部分、电话部分。也有一些子系统,硬件抽象层是标准的,只需要实现Linux内核中的驱动程序即可,例如:输入部分、振动器部分、无线局域网部分、蓝牙部分等。对于有标准的硬件抽象层的系统,有的时候通常也需要做一些配置工作。
三、给Android开发者的十个建议
现在Android智能手机和平板电脑的运行速率越来越快,但开发者仍需牢记,应用的运行环境仍受到电池和处理器等诸多资源的限制。以下是如何为应用“瘦身”的十条建议,以便能在当前和以后的所有Android设备都能运行出最佳效果。
1)首先要有良好的编码习惯
一个优秀的开发者应该善于运用常识、完善的算法和标准设计模式。要有资源意识,打开了就要记得关闭,尽量做到晚获取,早释放。这些由来已久的编码准则同样适用Android应用开发,尤其是使用基础设备服务时。
2)让阻塞操作远离主UI线程
通过使用AsyncTask、线程、IntentService和自定义后台服务,保证应用的灵活性。使用加载工具简化游标等长时间加载数据的状态管理。当有其他程序运行时,不能让你的应用滞后或中止。
如果一个操作需要消耗较多时间和资源时,取消该操作,换成异步处理,这样应用就能保持响应,用户可以继续各种操作。该方法适用磁盘读写、访问内容提供方、数据库和互联网,以及解析和其他需要花费较长时间的任务。
3)使用最新的Android SDK版本和API
使用Android平台的最新产品,保证你的应用紧跟Android的更新步伐。随着Android平台的不断发展,部分功能可能被弃用或被更好的功能 取代,核心API接收了bug修复和性能改进,新API有助于开发者编写出更稳定的应用。要明白最佳的做法总是随着时间的推移而变,聪明的开发者应该总是 站在整个平台的最前沿。
4)考虑使用StrictMode
从Android 2.3开始提供了一个新的类StrictMode,该类可以用于捕捉发生在应用程序主线程中耗时的磁盘、网络访问或函数调用,可以帮助开发者改进程序,使主线程处理UI和动画在磁盘读写和网络操作时变得更平滑,避免主线程
- 单片机C语言知识点全攻略(一)(08-17)
- Android系统开发全攻略(二)(06-08)
- AVR芯片的ISP全攻略(04-27)
- 嵌入式软件设计中查找缺陷的几个技巧(03-06)
- 基于算法的DSP硬件结构分析(04-02)
- Windows CE下驱动程序开发基础(04-10)