作品简介

Android是一款服务于智能手机和平板电脑等设备的操作系统,截止作者撰写此书时为止,Android在智能手机操作系统市场中已经占有75%的份额。为了让广大读者充分了解这款神奇的操作系统的架构原理,本书循序渐进地分析了Android系统核心源码的基本知识。

李忠良,编著

作品目录

  • 前言
  • 第1章 走进Android世界
  • 1.1 Android系统的优势
  • 1.1.1 开源
  • 1.1.2 强大的开发团队的支持
  • 1.1.3 开发人员的支持
  • 1.2 Android系统架构介绍
  • 1.2.1 底层操作系统层(Linux内核层)
  • 1.2.2 库(Libraries)和运行环境(Runtime)
  • 1.2.3 应用程序框架(Application Framework)
  • 1.2.4 顶层应用程序(Application)
  • 1.3 核心组件
  • 1.3.1 Activity的界面表现
  • 1.3.2 Intent和IntentFilters界面切换
  • 1.3.3 Service服务
  • 1.3.4 用Broadcast IntentReceiver广播
  • 1.3.5 用Content Provider存储
  • 1.4 进程和线程
  • 1.4.1 什么是进程
  • 1.4.2 什么是线程
  • 1.5 获取Android 4.3源码
  • 1.5.1 在Linux系统中获取Android源码
  • 1.5.2 在Windows平台上获取Android源码
  • 1.6 Android源码结构分析
  • 1.6.1 Android源码的目录结构
  • 1.6.2 应用程序
  • 1.6.3 应用程序框架
  • 1.6.4 系统服务
  • 1.6.5 系统程序库
  • 1.6.6 系统运行库
  • 1.6.7 硬件抽象层
  • 1.7 编译Android源码
  • 1.7.1 搭建编译环境
  • 1.7.2 开始编译
  • 1.7.3 在模拟器中运行
  • 1.7.4 编译源码生成SDK
  • 第2章 硬件抽象层详解
  • 2.1 什么是HAL层
  • 2.1.1 为什么把对硬件的支持划分为两层来实现
  • 2.1.2 HAL层的位置结构
  • 2.2 分析HAL Module架构
  • 2.2.1 hw_module_t
  • 2.2.2 hw_module_methods_t
  • 2.2.3 hw_device_t
  • 2.3 分析文件hardware.c
  • 2.3.1 函数hw_get_module
  • 2.3.2 数组variant_keys
  • 2.3.3 载入相应的库
  • 2.3.4 打开相应库并获得hw_module_t结构体
  • 2.4 分析硬件抽象层的加载过程
  • 2.5 分析硬件访问服务
  • 2.5.1 定义硬件访问服务接口
  • 2.5.2 实现硬件访问服务
  • 2.6 分析mokoid工程
  • 2.6.1 直接调用Service方法实现
  • 2.6.2 通过Manager调用Service实现
  • 2.7 分析HAL层的具体实现(以Sensor系统为例)
  • 2.7.1 传感器系统的基础知识
  • 2.7.2 HAL层的Sensor代码
  • 2.7.3 Sensor编程的流程
  • 第3章 分析JNI(Java本地接口)层
  • 3.1 JNI基础
  • 3.1.1 JNI的层次结构
  • 3.1.2 JNI的本质
  • 3.1.3 与JNI相关的文件
  • 3.2 分析Java层
  • 3.2.1 加载JNI库
  • 3.2.2 实现扫描工作
  • 3.2.3 读取并保存信息
  • 3.2.4 删除不是SD卡中的文件信息
  • 3.2.5 直接转向JNI
  • 3.2.6 扫描函数scanFile
  • 3.2.7 异常处理
  • 3.3 分析MediaScanner的JNI层
  • 3.3.1 将Native对象的指针保存到Java对象
  • 3.3.2 创建Native层的MediaScanner对象
  • 3.4 分析MediaScanner的Native层
  • 3.4.1 注册JNI函数
  • 3.4.2 完成注册工作
  • 3.4.3 动态注册
  • 3.4.4 处理路径参数
  • 3.4.5 扫描文件
  • 3.4.6 添加TAG信息
  • 3.4.7 JNIEnv接口
  • 3.4.8 JNI中的环境变量
  • 3.5 JNI实例分析(基于Camera系统)
  • 3.5.1 Java层预览接口
  • 3.5.2 注册预览的JNI函数
  • 3.5.3 C/C++层的预览函数
  • 第4章 Android内存系统分析
  • 4.1 Android的进程通信机制
  • 4.1.1 Android的进程间通信(IPC)机制Binder
  • 4.1.2 Service Manager是Binder机制的上下文管理者
  • 4.2 分析Ashmem驱动程序
  • 4.2.1 基础数据结构
  • 4.2.2 初始化处理
  • 4.2.3 打开匿名共享内存设备文件
  • 4.2.4 内存映射
  • 4.2.5 读写操作
  • 4.2.6 锁定和解锁
  • 4.2.7 回收内存块
  • 4.3 分析C++访问接口层
  • 4.3.1 接口MemoryHeapBase
  • 4.3.2 接口MemoryBase
  • 4.4 分析Java访问接口层
  • 4.5 内存优化机制
  • 4.5.1 sp和wp简析
  • 4.5.2 详解智能指针
  • 4.5.3 轻量级指针
  • 4.5.4 强指针
  • 4.5.5 弱指针
  • 第5章 Android虚拟机系统详解
  • 5.1 Android虚拟机基础
  • 5.1.1 Android虚拟机源码目录
  • 5.1.2 Dalvik的架构
  • 5.1.3 Dalvik虚拟机的主要特征
  • 5.1.4 Dalvik的进程管理
  • 5.1.5 Android的初始化流程
  • 5.2 分析Dalvik的运作流程
  • 5.2.1 Dalvik虚拟机相关的可执行程序
  • 5.2.2 初始化Dalvik虚拟机
  • 5.2.3 启动Zygote
  • 5.2.4 启动SystemServer进程
  • 5.2.5 加载class类文件
  • 5.3 Dalvik VM的内存系统
  • 5.3.1 如何分配内存
  • 5.3.2 分析内存管理机制的源码
  • 5.4 分析Dalvik VM的启动过程
  • 5.4.1 创建一个Dalvik VM实例
  • 5.4.2 指定控制选项
  • 5.4.3 创建并初始化Dalvik VM实例
  • 5.4.4 创建JNIEnvExt对象
  • 5.4.5 设置当前进程
  • 5.4.6 注册Android核心类的JNI方法
  • 5.4.7 使用线程创建javaCreateThreadEtc钩子
  • 5.5 创建Dalvik VM进程
  • 5.5.1 分析底层启动过程
  • 5.5.2 创建Dalvik VM进程
  • 5.5.3 初始化运行的Dalvik VM
  • 第6章 IPC通信机制详解
  • 6.1 Binder机制概述
  • 6.2 分析Binder驱动程序
  • 6.2.1 分析数据结构
  • 6.2.2 分析设备初始化
  • 6.2.3 打开Binder设备文件
  • 6.2.4 内存映射
  • 6.2.5 释放物理页面
  • 6.2.6 分配内核缓冲区
  • 6.2.7 释放内核缓冲区
  • 6.2.8 查询内核缓冲区
  • 6.3 Binder封装库
  • 6.3.1 Binder库的实现层次
  • 6.3.2 类BBinder
  • 6.3.3 类BpRefBase
  • 6.3.4 类IPCThreadState
  • 6.4 初始化Java层Binder框架
  • 第7章 Zygote进程、System进程和应用程序进程
  • 7.1 Zygote(孕育)进程详解
  • 7.1.1 Zygote基础
  • 7.1.2 分析Zygote的启动过程
  • 7.2 System进程详解
  • 7.2.1 启动System进程前的准备工作
  • 7.2.2 分析SystemServer
  • 7.2.3 分析EntropyService
  • 7.2.4 分析DropBoxManagerService
  • 7.2.5 分析DiskStatsService
  • 7.2.6 分析DeviceStorageManagerService
  • 7.2.7 分析SamplingProfilerService
  • 7.3 应用程序进程详解
  • 7.3.1 创建应用程序
  • 7.3.2 启动线程池
  • 7.3.3 创建信息循环
  • 第8章 分析Activity组件
  • 8.1 Activity基础
  • 8.1.1 Activity的状态
  • 8.1.2 Activity的主要函数
  • 8.2 启动Activity
  • 8.2.1 Launcher启动应用程序
  • 8.2.2 返回ActivityManagerService的远程接口
  • 8.2.3 解析intent的内容
  • 8.2.4 分析检查机制
  • 8.2.5 执行Activity组件的操作
  • 8.2.6 将Launcher推入Paused状态
  • 8.2.7 处理消息
  • 8.2.8 报告暂停
  • 8.2.9 建立双向连接
  • 8.2.10 启动新的Activity
  • 8.2.11 发送通知信息
  • 第9章 Content Provider数据存储
  • 9.1 Content Provider基础
  • 9.1.1 Content Provider在应用程序中的架构
  • 9.1.2 Content Provider的常用接口
  • 9.2 启动Content Provider
  • 9.2.1 获得对象接口
  • 9.2.2 存在校验
  • 9.2.3 启动Android应用程序
  • 9.2.4 根据进程启动Content Provider
  • 9.2.5 处理消息
  • 9.2.6 具体启动
  • 9.3 Content Provider数据共享
  • 9.3.1 获取接口
  • 9.3.2 创建CursorWindow对象
  • 9.3.3 数据传递
  • 9.3.4 处理进程通信的请求
  • 9.3.5 数据操作
  • 第10章 Broadcast(广播)系统详解
  • 10.1 Broadcast基础
  • 10.2 发送广播信息
  • 10.2.1 intent描述指示
  • 10.2.2 传递广播信息
  • 10.2.3 封装传递
  • 10.2.4 处理发送请求
  • 10.2.5 查找广播接收者
  • 10.2.6 处理广播信息
  • 10.2.7 检查权限
  • 10.2.8 处理的进程通信请求
  • 10.3 分析BroadcastReceiver
  • 10.3.1 MainActivity的调用
  • 10.3.2 注册广播接收者
  • 10.3.3 获取接口对象
  • 10.3.4 处理进程间的通信请求
  • 第11章 多媒体系统详解
  • 11.1 Android多媒体系统介绍
  • 11.2 OpenMAX框架详解
  • 11.2.1 分析OpenMAX框架构成
  • 11.2.2 实现OpenMAX IL层接口
  • 11.3 分析OpenCore框架
  • 11.3.1 OpenCore的层次结构
  • 11.3.2 OpenCore的代码结构
  • 11.3.3 OpenCore的编译结构
  • 11.3.4 操作系统兼容库
  • 11.3.5 实现OpenCore中的OpenMAX部分
  • 11.3.6 OpenCore扩展详解
  • 11.4 Stagefright框架详解
  • 11.4.1 Stagefright代码结构
  • 11.4.2 Stagefright实现OpenMAX接口
  • 11.4.3 分析Video Buffer的传输流程
  • 第12章 电源管理系统详解
  • 12.1 Android Power Management基础
  • 12.2 分析Framework层
  • 12.2.1 文件PowerManager.java
  • 12.2.2 文件PowerManagerService.java
  • 12.3 分析JNI层
  • 12.3.1 文件android_os_Power.cpp
  • 12.3.2 文件power.c
  • 12.4 分析Kernel(内核)层
  • 12.4.1 文件power.c
  • 12.4.2 文件earlysuspend.c
  • 12.4.3 文件wakelock.c
  • 12.4.4 文件resume.c
  • 12.4.5 文件suspend.c
  • 12.4.6 文件main.c
  • 12.4.7 proc文件
  • 12.5 wakelock和early_suspend
  • 12.5.1 wakelock的原理
  • 12.5.2 early_suspend的原理
  • 12.5.3 Android休眠
  • 12.5.4 Android唤醒
  • 第13章 输入系统驱动应用
  • 13.1 输入系统介绍
  • 13.2 分析Input(输入)系统驱动
  • 13.2.1 分析头文件
  • 13.2.2 分析核心文件input.c
  • 13.2.3 分析event机制
  • 13.3 分析硬件抽象层
  • 13.3.1 分析文件KeycodeLabels.h
  • 13.3.2 分析文件KeyCharacterMap.h
  • 13.3.3 分析Kl格式的文件
  • 13.3.4 分析kcm格式文件
  • 13.3.5 分析文件EventHub.cpp
  • 13.4 分析驱动的具体实现
  • 13.4.1 分析内置模拟器中的输入驱动实现
  • 13.4.2 MSM高通处理器中的输入驱动实现
  • 13.4.3 OMAP高通处理器中的输入驱动实现
  • 第14章 蓝牙系统详解
  • 14.1 Android系统中的蓝牙模块
  • 14.2 分析蓝牙模块的源码
  • 14.2.1 初始化蓝牙芯片
  • 14.2.2 蓝牙服务
  • 14.2.3 管理蓝牙电源
  • 14.3 与蓝牙相关的类
  • 14.3.1 BluetoothSocket类
  • 14.3.2 BluetoothServerSocket类
  • 14.3.3 BluetoothAdapter类
  • 14.3.4 BluetoothClass.Service类
  • 14.3.5 BluetoothClass.Device类
  • 14.4 低功耗蓝牙协议栈详解
  • 14.4.1 低功耗蓝牙协议栈基础
  • 14.4.2 低功耗蓝牙API详解
  • 14.5 Android中的BlueDroid
  • 14.5.1 Android系统中BlueDroid的架构
  • 14.5.2 Application Framework层分析
  • 14.5.3 分析Bluetooth System Service层
  • 14.5.4 分析JNI层
  • 14.5.5 分析HAL层
  • 14.6 Android蓝牙模块的运作流程
  • 14.6.1 打开蓝牙设备
  • 14.6.2 搜索蓝牙
  • 14.6.3 传输OPP文件
  • 第15章 网络系统详解
  • 15.1 使用WebKit浏览网页
  • 15.1.1 WebKit的Java层框架
  • 15.1.2 C/C++层框架
  • 15.1.3 分析WebKit的操作过程
  • 15.1.4 WebView详解
  • 15.1.5 WebViewCore详解
  • 15.2 Wi-Fi系统应用
  • 15.2.1 Wi-Fi概述
  • 15.2.2 Wi-Fi系统的层次结构
  • 15.2.3 与Linux的差异
  • 15.2.4 分析本地部分的源码
  • 15.2.5 分析JNI部分的源码
  • 15.2.6 分析Java Framework部分的源码
  • 15.2.7 分析Setting中的设置部分的源码
展开全部