android驱动开发和移植详解
本文出处:《Android 底层开发技术实战详解——内核、移植和驱动》
安卓程序开发用什么软件我们开发的 Android 驱动程序是基于 Linux 内核的,本文首先介绍移植 Android 系统的基本知识和基本原理,
这也是为驱动开发打下坚实基础,知其然也知其所以然;最后我们将通过深入浅出的案例学习驱动开发过程。
1.1 驱动开发需要做的工作
Android 作为当前最流行的手机操作系统之一,受到了广大开发人员和商家的青睐。Android
正在逐渐形成一个蓬勃发展的产业,带来了无限商机。既然 Android 这么火爆,我们程序员可以
学习它的哪一方面的内容呢?本书的驱动开发又属于哪一领域呢?接下来将为读者奉上这两个
问题的答案。
Android 是一个开放的系统,这个系统的体积非常庞大,开发人员无须掌握整个 Android
系中的开发知识,只需熟悉其中某一个部分即可收获自己的未来。
从具体功能上划分,Android 开发主要分为如下三个领域。
1. 移植开发移动电话系统
移植开发的目的是构建硬件系统,并且移植 Android 的软件系统,最终形成手机产品。
2. Android 应用程序开发
应用程序开发的目的是开发出各种 Android 应用程序,然后将这些应用程序投入 Android
场,进行交易。
Android 的应用程序开发是 Android 开发的另一个方面。从开发的角度来看,这种形式的开
发可以基于某个硬件系统,在没有硬件系统的情况下也可以基于 Linux 或者 Windows 下的 Android
模拟器来开发。这种类型的开发工作在 Android 系统的上层。
事实上,在 Android 软件系统中,第 3 个层次(Java 框架)和第 4 个层次(Java 应用)之间
的接口也就是 Android 的系统接口(系统 API)。这个层次是标准的接口,所有的 Android 应用
程序都是基于这个层次的接口开发出来的。Android 系统的第 4 个层次就是一组内置的 Android
应用程序。
Android 应用程序开发者开发的应用程序和 Android 系统的第 4 个层次的应用程序其实是一
个层次的内容。例如,Android 系统提供了基本的桌面程序,开发者可以根据 Android 的系统接
口,实现另外一个桌面程序,提供给用户安装使用。根据 Android 系统的接口开发游戏,也

Android 底层开发技术实战详解——内核、移植和驱动
Android 应用程序开发的一个重要方向。
    上述两种类型的开发结构如图 3-1 所示。
主屏幕
联系人
电话
浏览器
„„
应用程序
活动管理器
窗口管理器
内容提供器
视图系统
通知管理器
应用程序
框架
应用
程序
开发
包管理器
电话管理器
资源管理器
本地管理器
XMPP服务
接口管理器
包管理器
包管理器
持久层库
Android
运行
环境
Dalvik虚拟
  机器
包管理器
位图及矢量
浏览器引擎
2D图形引
 
中间协议
libc函数库
显示驱动
相机驱动
蓝牙驱动
Flash内存驱
   
Binder IPC
  驱动
Linux
内核层
能源管理
USB驱动
键盘驱动
WiFi驱动
音频驱动
移植
开发
各种硬件
3-1 Android 开发的领域
3. Android 系统开发
系统开发的目的是升级或改造 Android 中已经存在的应用和架构,开发出有自己特的手机
系统。例如联想手机乐 Phone 就是在 Android 基础上打造的一款适合国人使用习惯的手机系统,
如图 3-2 所示。
58

3-2
Phone
    Android 系统开发的一个比较典型的示例就是当系统需要某种功能时,为了给 Java 层次的应
用程序提供调用的接口,需要从底层到上层的整体开发,具体步骤如下所示。
        增加 C 或者 C++和本地库。
        定义 Java 层所需要的类(系统 API)。
        将所需要的代码封装成 JNI
        结合 Java 类和 JNI
        应用程序调用 Java 类。
    一定要慎重对待对 Android 系统 API 的改动工作,因为系统 API 的稍微变动就可能会涉及
Android 应用程序的兼容问题。
Android 系统本身的功能也处于增加和完善的过程中,因此 Android 系统的开发也是一个重
要的方面。这种类型的开发涉及 Android 软件系统的各个层次。在更多的时候,Android 系统开
发只是在不改变系统 API 的情况下修正系统的缺陷,增加系统的稳定性。
从商业模式的角度来看,第一种类型的开发和第二种类型的开发是 Android 开发的主流。事
实上,移动电话的制造者主要进行第一种类型的开发,产品是 Android 实体手机;公司、个人和
团体都可以进行第二种类型的开发,其产品是不同的 Android 应用程序。
Android 的开发过程中,每一种类型的开发都只涉及整个 Android 系统的一个子集。在
Android 系统中有着众多开发点,这些开发点相互独立,又有内在联系。在开发的过程中,需要
重点掌握目前开发点涉及的部分。
背景说明:Android API 的接口是用 Java 语言编写的,通常更改接口函数的格式(参数、返回值)、
常量的值等内容就相当于更改系统 API
Android 是一个开放的系统,适用于从最低端直到最高端的智能手机。核心的 Android
API 在每部手机上都可使用,但仍然有一些 API 接口有一些特别的适用范围:这就是
所谓的“可选 API”
在为某手机编写 Android 应用程序时,需要多少地对 Android API 进行修改,然后实现
我们需要的功能。例如使用 Android API 添加蓝牙程序和 Wi-Fi 程序。在更改 Android
API 时,通常更改其接口函数的格式(参数、返回值)和常量值等内容。但是 Android
API 毕竟是谷歌推出的一系列标准,为了方便以后系统的升级,建议大家不改变
Android API 的格式,而是只改变 Android API 的具体行为,也就是说为这些固定的
Android API 编写各种各样的应用程序。
1.2 Android 移植
    本书讲解的是 Android 驱动方面的开发知识,由图 3-1 可知,驱动开发是底层的应用,属于
Linux 内核层的工作。因为驱动是系统和硬件之间的载体,涉及不同硬件的应用问题,所以需要
做系统移植工作。本节将简要介绍系统移植方面的有关问题。
59