Android的移植开发
Android系统移植的目的: 只要是为了能在特定硬件平台上运行目标Android系统
主要的工作: 熟悉HAL layer的接口,集成和复用现有的驱动程序,主要工作几种在对HAL的实现中。因此,需要对HAL layer的调用情况有所了解
1. Linux驱动部分 2. HAL layer
Linux驱动工作在系统内核空间,Android HAL工作在用户空间。
HAL向下调用Linux中的驱动程序,向上提供API,供Android系统之外的其他部分调用
Android系统庞大,系统中包括了很多组件,并不是所有组件都需要移植。
对于一些纯软件的组件就没有必要一直,比如浏览器引擎。
Android的移植主要包括以下几种类型:
- 电源管理:非常重要的组件,和Android系统的各子系统都有关系
- 基本的图形用户界面(HMI):显示部分,用户输入部分
- 硬件加速部分(HW Accelerator):媒体编解码,OpenGL
- 音视频输入输出(Audio/Video Input/output):音频,视频输出,摄像头
- 连接(Connectivity):Wifi,BT,GPS,Phone
- 附属组件(Acc.):传感器,背光,振动器等
这么多组件,哪些需要根据实际系统的情况来实现,哪些是标准的呢?
对于大部分系统,HAL和驱动程序需要根据实际系统的情况实现。比如传感器,音频,视频,摄像头,电话等等
有一些组件的HAL层是标准的,因此,只需要实现Linux驱动即可。例如,用户输入,振动器,Wifi,BT等。这些HAL虽然是标准的,通常开发中也需要做一些配置。
Android系统开发
Android系统开发主要是中间件(Middleware)的开发。
Google提供了绝大部分的中间件,所以系统开发的主要工作是JNI库的开发。
JNI:Java应用程序访问其他语言,特别是中低级语言的接口。通过JNI,用户可以把对性能要求高的或者操作系统底层直接打交道的程序封装在一个库文件中,通过JNI机制调用。
Android应用开发
应用程序直接用户打交道。
不与硬件或操作系统直接沟通。应用程序只与Android系统中的JAVA类和JNI库沟通,因此移植性好。