Android系统源代码分析
第1章 Android系统介绍
1.1 来到智能手机世界
1.1.1 何谓智能手机
1.1.2 百家争鸣
1.2 Android的优势
1.2.1 优点一——系出名门
1.2.2 优点二——强大的开发团队
1.2.3 优点三——诱人的奖励机制
1.2.4 优点四——开源
1.3 剖析Android系统架构
查看完整
1.1 来到智能手机世界
1.1.1 何谓智能手机
1.1.2 百家争鸣
1.2 Android的优势
1.2.1 优点一——系出名门
1.2.2 优点二——强大的开发团队
1.2.3 优点三——诱人的奖励机制
1.2.4 优点四——开源
1.3 剖析Android系统架构
查看完整
李俊,清华大学电子信息工程专业学士。较早进入Android开发领域。有多年的Android开发经验,熟练使用Java和C/C++进行软件开发。熟悉Android层次结构和Linux驱动层的结构及其上的开发,有着丰富的Android底层和驱动层的优化、移植经验,擅长利用JNI技术开发Android上的应用程序。曾带领团队利用NDK技术成功开发过具有库仑计电池芯片的电池管理软件,以及在Android上成功移植人脸识别程序,目前在凹凸电子担任Android架构师。陈小玉,硕士,南阳理工学院计算机与信息工程学院讲师,软件设计师。主要从事Arldroid应用及游戏开发和教学工作,熟练使用Java语言。具有多年的Android和IOS系统手机客户端软件设计经验,具备扎实的手机,桌面/Web UI设计开发基础,熟悉Android系统的UI design Guideline,熟悉人机交互、机器学习和人工智能算法,擅长利用智能算法改进Android上的应用程序。使其更…
查看完整
查看完整
Android从诞生到现在仅有短短几年的时间,它凭借其开源开放性、优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率位居的智能手机操作系统。本书主要讲解Android系统源代码的结构和工作机制,完全基于Android主流版本的源代码结构来编写全书。本书内容言简意赅、通俗易懂、讲解详细。本书的内容涉及如何获取源码、源码的结构分析、init解析、应用层结构分析、JNI的机制分析、Android中的系统服务和内存管理、硬件抽象层、Binder机制、多媒体框架、音频系统、视频系统和传感器系统。在编写的过程中,书中的所有概念和模块实例完全根据原生态的源码来编写。本书定位于有一定基础的Android程序开发人员,旨在帮助其通过细致分析Android系统源代码和工作机制,透彻理解Android系统架构,向Android系统开发殿堂及高手迈进。
第1章 Android系统介绍
1.1 来到智能手机世界
1.1.1 何谓智能手机
1.1.2 百家争鸣
1.2 Android的优势
1.2.1 优点一——系出名门
1.2.2 优点二——强大的开发团队
1.2.3 优点三——诱人的奖励机制
1.2.4 优点四——开源
1.3 剖析Android系统架构
1.4 五大组件
1.4.1 用Activity来表现界面
1.4.2 用Intent和Intent Filters实现切换
1.4.3 Service服务
1.4.4 用Broadcast Intent Receiver发送广播
1.4.5 用Content Provider存储数据
1.5 进程和线程
1.5.1 先看进程
1.5.2 再看线程
1.6 获取Android源码
1.6.1 在Linux平台获取Android源码
1.6.2 在Windows平台获取Android源码
1.7 分析Android源码结构
1.8 编译源码
1.8.1 Ubuntu系统编译源码
1.8.2 常见错误
1.8.3 运行Android源码
1.9 编译Android Kernel
1.9.1 获取Goldfish内核代码
1.9.2 获取MSM内核代码
1.9.3 获取OMAP内核代码
1.9.4 编译Android的Linux内核
1.10 Android模拟器(AVD)
1. 10.1 在Linux环境下运行模拟器
1. 10.2 模拟器辅助工具——adb
1. 10.3 在Windows中创建Android模拟器
1.10.4 在模拟器上运行Android系统
第2章 源码结构和SDK解析
2.1 Android源码的目录结构
2.2 目录结构在系统中的体现
2.2.1 应用程序
2.2.2 应用程序框架
2.2.3 系统服务
2.2.4 系统程序库
2.2.5 系统运行库
2.2.6 硬件抽象层
2.3 编译源码生成SDK
2.4 源码中提供的接口
2.4.1 暴露的接口和隐藏的接口
2.4.2 开发中如何调用隐藏接口
第3章 分析JNI和Media
3.1 JNI基础
3.2 分析Java层的MediaScanner
3.2.1 加载JNI库
3.2.2 实现扫描工作
3.2.3 读取并保存信息
3.2.4 删除不是SD卡中的文件信息
3.2.5 processDirectory
3.2.6 扫描函数scanFile
3.2.7 JNI中的异常处理
3.3 分析JNI层的MediaScanner
3.3.1 将Native对象的指针保存到Java对象
3.3.2 创建Native层的MediaScanner对象
3.4 Native层的MediaScanner
3.4.1 JNI函数的注册
3.4.2 完成注册工作
3.4.3 动态注册
3.4.4 processDirectory
3.4.5 client.scanFile
3.4.6 添加TAG信息
3.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用途
3.4.8 Java与JNI基本数据类型转换
3.4.9 JNIEnv接口
3.4.10 JNI中的环境变量
3.5 解析android.process.media
3.5.1 MediaScannerReceiver
3.5.2 MediaScannerService
3.5.3 MediaProvider
3.6 MediaScanner中的重要函数
3.6.1 seekTo
3.6.2 doProcessDirectory
3.6.3 doScanFile
3.6.4 android_media_MediaScanner_processFile
3.6.5 processFile
3.6.6 endFile
3.6.7 handleStringTag
3.6.8 fileMatchesExtension
3.7 Camera模块JNI实例分析
3.7.1 Java层预览接口
3.7.2 注册预览的JNI函数
3.7.3 C/C++层的预览函数
第4章 分析init进程
4.1 init基础
4.2 分析入口函数
4.3 分析配置文件
4.3.1 init.rc简介
4.3.2 分析init.rc的过程
4.4 解析Service
4.4.1 zygote对应的service action
4.4.2 init组织Service
4.4.3 解析Service用到的函数
4.5 解析on
4.5.1 zygote对应的on action
4.5.2 init组织on
4.5.3 解析on用到的函数
4.6 init控制Service
4.6.1 启动zygote
4.6.2 启动Service
4.6.3 总结四种启动Service的方式
4.7 控制属性服务
4.7.1 引入属性
4.7.2 初始化属性服务
4.7.3 启动属性服务
4.7.4 处理设置属性的请求
第5章 深入分析HAL层
5.1 初识HAL层
5.1.1 HAL层简介
5.1.2 HAL_legacy和HAL的对比
5.2 分析HAL层源码
5.2.1 分析HAL module
5.2.2 文件hardware.h
5.2.3 文件hardware.c
5.3 分析硬件抽象层的加载过程
5.4 分析硬件访问服务
5.4.1 定义硬件访问服务接口
5.4.2 实现硬件访问服务
5.5 分析mokoid工程
5.5.1 直接调用service方法的实现代码
5.5.2 通过Manager调用service的实现代码
5.6 举例说明Sensor(传感器)在HAL层的表现
5.6.1 HAL层的Sensor代码
5.6.2 Sensor编程的流程
5.7 HAL和系统移植
5.7.1 移植各个Android部件的方式
5.7.2 辅助工作
第6章 分析Android的内存机制
6.1 内存和进程的关系
6.1.1 进程管理工具的纷争
6.1.2 Android系统内存设计
6.2 分析Android的进程通信机制
6.2.1 Android的进程间通信(IPC)机制Binder
6.2.2 Service Manager是Binder机制的上下文管理者
6.2.3 分析Server和Client获得Service Manager的过程
6.3 分析Android系统匿名共享内存C++调用接口
6.3.1 Java程序
6.3.2 相关程序
6.4 内存优化
6.4.1 sp和wp简析
6.4.2 详解智能指针(android refbase类(sp和wp))
第7章 分析ActivityManagerService
7.1 AMS基础
7.1.1 进程数据类ProcessRecord
7.1.2 数据类HistoryRecord
7.1.3 类TaskRecord
7.1.4 AMS中的一些重要调度相关变量
7.2 Activity的调度
7.2.1 startActivity()的启动流程
7.2.2 stopActivityLocked()停止Activity
第8章 分析Binder和MessageQueue
8.1 分析Binder
8.1.1 Client、Server和ServiceManager
8.1.2 MediaServer
8.1.3 ServiceManager
8.1.4 分析MediaPlayerService和Client
8.2 初始化Java层Binder框架
8.2.1 Binder类的初始化
8.2.2 addService实例分析
8.3 分析MessageQueue
8.3.1 创建MessageQueue
8.3.2 提取消息
8.3.3 分析函数nativePollOnce
第9章 分析SystemServer
9.1 分析SystemServer
9.1.1 分析主函数main
9.1.2 分析函数init2
9.2 分析EntropyService
9.3 分析DropBoxManagerService
9.3.1 分析DBMS构造函数
9.3.2 添加dropbox日志文件
9.3.3 DBMS和Settings数据库
9.4 分析DiskStatsService
9.5 分析DeviceStorageManagerService
9.6 分析SamplingProfilerService
9.6.1 分析SamplingProfilerService构造函数
9.6.2 分析SamplingProfilerIntegration
9.7 分析ClipboardService
9.7.1 复制数据到剪贴板
9.7.2 从剪贴板粘贴数据
9.7.3 CBS中的权限管理
第10章 分析WindowManagerService
10.1 WindowManagerService概述
10.2 分析计算Activity窗口大小的过程
10.2.1 概览
10.2.2 分析Activity计算窗口大小的过程
10.3 分析WindowManagerService对窗口的组织方式
10.3.1 概述
10.3.2 分析操作源码
第11章 分析安装应用程序的过程
11.1 WindowManagerService概述
11.2 分析安装过程
11.2.1 主函数main
11.2.2 初始化函数
11.2.3 初始化服务
11.2.4 调用静态成员函数
11.2.5 创建了ServerThread线程
11.2.6 启动服务
11.2.7 创建PackageManagerService服务实例
11.2.8 扫描函数scanDirLI
11.2.9 归档处理
11.2.10 解析application标签
11.2.11 保存解析后的程序信息
第12章 分析核心框架系统
12.1 分析音频系统
12.1.1 Audio系统的层次介绍
12.1.2 Media库中的Audio框架
12.1.3 本地代码
12.1.4 JNI代码
12.1.5 Java代码
12.2 视频输出系统
12.2.1 Overlay系统的基本层次结构
12.2.2 Overlay系统硬件抽象层的接口
12.2.3 实现硬件抽象层
12.2.4 实现接口
12.3 分析OpenMax多媒体框架
12.3.1 分析OpenMax IL层的接口
12.3.2 OpenMax适配层
12.4 分析多媒体插件框架
12.4.1 基本层次结构
12.4.2 分析库libopencorecommon.so的结构
12.4.3 分析库libopencoreplayer.so的结构
12.4.4 分析库libopencoreauthor.so的结构
12.4.5 其他的库
12.4.6 OpenCore OSCL
12.4.7 实现OpenCore中的OpenMax部分
12.5 分析Camera照相机系统
12.5.1 基本层次结构
12.5.2 分析V4L2驱动程序
12.5.3 硬件抽象层
12.5.4 实现Camera系统的硬件抽象层
12.6 分析传感器系统
12.6.1 基本层次结构
12.6.2 分析硬件抽象层
12.6.3 实现上层部分
^ 收 起
1.1 来到智能手机世界
1.1.1 何谓智能手机
1.1.2 百家争鸣
1.2 Android的优势
1.2.1 优点一——系出名门
1.2.2 优点二——强大的开发团队
1.2.3 优点三——诱人的奖励机制
1.2.4 优点四——开源
1.3 剖析Android系统架构
1.4 五大组件
1.4.1 用Activity来表现界面
1.4.2 用Intent和Intent Filters实现切换
1.4.3 Service服务
1.4.4 用Broadcast Intent Receiver发送广播
1.4.5 用Content Provider存储数据
1.5 进程和线程
1.5.1 先看进程
1.5.2 再看线程
1.6 获取Android源码
1.6.1 在Linux平台获取Android源码
1.6.2 在Windows平台获取Android源码
1.7 分析Android源码结构
1.8 编译源码
1.8.1 Ubuntu系统编译源码
1.8.2 常见错误
1.8.3 运行Android源码
1.9 编译Android Kernel
1.9.1 获取Goldfish内核代码
1.9.2 获取MSM内核代码
1.9.3 获取OMAP内核代码
1.9.4 编译Android的Linux内核
1.10 Android模拟器(AVD)
1. 10.1 在Linux环境下运行模拟器
1. 10.2 模拟器辅助工具——adb
1. 10.3 在Windows中创建Android模拟器
1.10.4 在模拟器上运行Android系统
第2章 源码结构和SDK解析
2.1 Android源码的目录结构
2.2 目录结构在系统中的体现
2.2.1 应用程序
2.2.2 应用程序框架
2.2.3 系统服务
2.2.4 系统程序库
2.2.5 系统运行库
2.2.6 硬件抽象层
2.3 编译源码生成SDK
2.4 源码中提供的接口
2.4.1 暴露的接口和隐藏的接口
2.4.2 开发中如何调用隐藏接口
第3章 分析JNI和Media
3.1 JNI基础
3.2 分析Java层的MediaScanner
3.2.1 加载JNI库
3.2.2 实现扫描工作
3.2.3 读取并保存信息
3.2.4 删除不是SD卡中的文件信息
3.2.5 processDirectory
3.2.6 扫描函数scanFile
3.2.7 JNI中的异常处理
3.3 分析JNI层的MediaScanner
3.3.1 将Native对象的指针保存到Java对象
3.3.2 创建Native层的MediaScanner对象
3.4 Native层的MediaScanner
3.4.1 JNI函数的注册
3.4.2 完成注册工作
3.4.3 动态注册
3.4.4 processDirectory
3.4.5 client.scanFile
3.4.6 添加TAG信息
3.4.7 总结函数JNI_OnLoad()与函数JNI_OnUnload()的用途
3.4.8 Java与JNI基本数据类型转换
3.4.9 JNIEnv接口
3.4.10 JNI中的环境变量
3.5 解析android.process.media
3.5.1 MediaScannerReceiver
3.5.2 MediaScannerService
3.5.3 MediaProvider
3.6 MediaScanner中的重要函数
3.6.1 seekTo
3.6.2 doProcessDirectory
3.6.3 doScanFile
3.6.4 android_media_MediaScanner_processFile
3.6.5 processFile
3.6.6 endFile
3.6.7 handleStringTag
3.6.8 fileMatchesExtension
3.7 Camera模块JNI实例分析
3.7.1 Java层预览接口
3.7.2 注册预览的JNI函数
3.7.3 C/C++层的预览函数
第4章 分析init进程
4.1 init基础
4.2 分析入口函数
4.3 分析配置文件
4.3.1 init.rc简介
4.3.2 分析init.rc的过程
4.4 解析Service
4.4.1 zygote对应的service action
4.4.2 init组织Service
4.4.3 解析Service用到的函数
4.5 解析on
4.5.1 zygote对应的on action
4.5.2 init组织on
4.5.3 解析on用到的函数
4.6 init控制Service
4.6.1 启动zygote
4.6.2 启动Service
4.6.3 总结四种启动Service的方式
4.7 控制属性服务
4.7.1 引入属性
4.7.2 初始化属性服务
4.7.3 启动属性服务
4.7.4 处理设置属性的请求
第5章 深入分析HAL层
5.1 初识HAL层
5.1.1 HAL层简介
5.1.2 HAL_legacy和HAL的对比
5.2 分析HAL层源码
5.2.1 分析HAL module
5.2.2 文件hardware.h
5.2.3 文件hardware.c
5.3 分析硬件抽象层的加载过程
5.4 分析硬件访问服务
5.4.1 定义硬件访问服务接口
5.4.2 实现硬件访问服务
5.5 分析mokoid工程
5.5.1 直接调用service方法的实现代码
5.5.2 通过Manager调用service的实现代码
5.6 举例说明Sensor(传感器)在HAL层的表现
5.6.1 HAL层的Sensor代码
5.6.2 Sensor编程的流程
5.7 HAL和系统移植
5.7.1 移植各个Android部件的方式
5.7.2 辅助工作
第6章 分析Android的内存机制
6.1 内存和进程的关系
6.1.1 进程管理工具的纷争
6.1.2 Android系统内存设计
6.2 分析Android的进程通信机制
6.2.1 Android的进程间通信(IPC)机制Binder
6.2.2 Service Manager是Binder机制的上下文管理者
6.2.3 分析Server和Client获得Service Manager的过程
6.3 分析Android系统匿名共享内存C++调用接口
6.3.1 Java程序
6.3.2 相关程序
6.4 内存优化
6.4.1 sp和wp简析
6.4.2 详解智能指针(android refbase类(sp和wp))
第7章 分析ActivityManagerService
7.1 AMS基础
7.1.1 进程数据类ProcessRecord
7.1.2 数据类HistoryRecord
7.1.3 类TaskRecord
7.1.4 AMS中的一些重要调度相关变量
7.2 Activity的调度
7.2.1 startActivity()的启动流程
7.2.2 stopActivityLocked()停止Activity
第8章 分析Binder和MessageQueue
8.1 分析Binder
8.1.1 Client、Server和ServiceManager
8.1.2 MediaServer
8.1.3 ServiceManager
8.1.4 分析MediaPlayerService和Client
8.2 初始化Java层Binder框架
8.2.1 Binder类的初始化
8.2.2 addService实例分析
8.3 分析MessageQueue
8.3.1 创建MessageQueue
8.3.2 提取消息
8.3.3 分析函数nativePollOnce
第9章 分析SystemServer
9.1 分析SystemServer
9.1.1 分析主函数main
9.1.2 分析函数init2
9.2 分析EntropyService
9.3 分析DropBoxManagerService
9.3.1 分析DBMS构造函数
9.3.2 添加dropbox日志文件
9.3.3 DBMS和Settings数据库
9.4 分析DiskStatsService
9.5 分析DeviceStorageManagerService
9.6 分析SamplingProfilerService
9.6.1 分析SamplingProfilerService构造函数
9.6.2 分析SamplingProfilerIntegration
9.7 分析ClipboardService
9.7.1 复制数据到剪贴板
9.7.2 从剪贴板粘贴数据
9.7.3 CBS中的权限管理
第10章 分析WindowManagerService
10.1 WindowManagerService概述
10.2 分析计算Activity窗口大小的过程
10.2.1 概览
10.2.2 分析Activity计算窗口大小的过程
10.3 分析WindowManagerService对窗口的组织方式
10.3.1 概述
10.3.2 分析操作源码
第11章 分析安装应用程序的过程
11.1 WindowManagerService概述
11.2 分析安装过程
11.2.1 主函数main
11.2.2 初始化函数
11.2.3 初始化服务
11.2.4 调用静态成员函数
11.2.5 创建了ServerThread线程
11.2.6 启动服务
11.2.7 创建PackageManagerService服务实例
11.2.8 扫描函数scanDirLI
11.2.9 归档处理
11.2.10 解析application标签
11.2.11 保存解析后的程序信息
第12章 分析核心框架系统
12.1 分析音频系统
12.1.1 Audio系统的层次介绍
12.1.2 Media库中的Audio框架
12.1.3 本地代码
12.1.4 JNI代码
12.1.5 Java代码
12.2 视频输出系统
12.2.1 Overlay系统的基本层次结构
12.2.2 Overlay系统硬件抽象层的接口
12.2.3 实现硬件抽象层
12.2.4 实现接口
12.3 分析OpenMax多媒体框架
12.3.1 分析OpenMax IL层的接口
12.3.2 OpenMax适配层
12.4 分析多媒体插件框架
12.4.1 基本层次结构
12.4.2 分析库libopencorecommon.so的结构
12.4.3 分析库libopencoreplayer.so的结构
12.4.4 分析库libopencoreauthor.so的结构
12.4.5 其他的库
12.4.6 OpenCore OSCL
12.4.7 实现OpenCore中的OpenMax部分
12.5 分析Camera照相机系统
12.5.1 基本层次结构
12.5.2 分析V4L2驱动程序
12.5.3 硬件抽象层
12.5.4 实现Camera系统的硬件抽象层
12.6 分析传感器系统
12.6.1 基本层次结构
12.6.2 分析硬件抽象层
12.6.3 实现上层部分
^ 收 起
李俊,清华大学电子信息工程专业学士。较早进入Android开发领域。有多年的Android开发经验,熟练使用Java和C/C++进行软件开发。熟悉Android层次结构和Linux驱动层的结构及其上的开发,有着丰富的Android底层和驱动层的优化、移植经验,擅长利用JNI技术开发Android上的应用程序。曾带领团队利用NDK技术成功开发过具有库仑计电池芯片的电池管理软件,以及在Android上成功移植人脸识别程序,目前在凹凸电子担任Android架构师。陈小玉,硕士,南阳理工学院计算机与信息工程学院讲师,软件设计师。主要从事Arldroid应用及游戏开发和教学工作,熟练使用Java语言。具有多年的Android和IOS系统手机客户端软件设计经验,具备扎实的手机,桌面/Web UI设计开发基础,熟悉Android系统的UI design Guideline,熟悉人机交互、机器学习和人工智能算法,擅长利用智能算法改进Android上的应用程序。使其更具有智能性。
^ 收 起
^ 收 起
Android从诞生到现在仅有短短几年的时间,它凭借其开源开放性、优异的用户体验和极为方便的开发方式,赢得了广大用户和开发者的青睐,目前已经发展成为市场占有率位居的智能手机操作系统。本书主要讲解Android系统源代码的结构和工作机制,完全基于Android主流版本的源代码结构来编写全书。本书内容言简意赅、通俗易懂、讲解详细。本书的内容涉及如何获取源码、源码的结构分析、init解析、应用层结构分析、JNI的机制分析、Android中的系统服务和内存管理、硬件抽象层、Binder机制、多媒体框架、音频系统、视频系统和传感器系统。在编写的过程中,书中的所有概念和模块实例完全根据原生态的源码来编写。本书定位于有一定基础的Android程序开发人员,旨在帮助其通过细致分析Android系统源代码和工作机制,透彻理解Android系统架构,向Android系统开发殿堂及高手迈进。
比价列表
1人想要1人拥有
公众号、微信群
缺书网
微信公众号
微信公众号
扫码进群
实时获取购书优惠
实时获取购书优惠