Android的设计与实现

出版社:机械工业出版社
出版日期:2013-5-1
ISBN:9787111417132
作者:杨云君
页数:419页

章节摘录

第一部分基础篇第1章 Android体系结构及源代码阅读环境搭建第2章 框架基础JNI第1章 Android体系结构及源代码阅读环境搭建Android是Google于2007年11月5日发布的基于Linux内核的开源移动设备软件平台,该平台由操作系统、虚拟机、运行库、框架、应用软件以及开发工具组成。1.1 Android发展过程Android自Android 1.5开始,以甜点作为平台版本代号,并且各代号首字母以C D E F G H I J顺序排列。Android自发布以来,经过数个版本的更新和完善,已成为最大的智能手机平台之一。Android的发展过程如表1-1所示。

前言

前言为什么要写本书Android从2007年问世至今,不仅在各个应用领域发展得如火如荼,其图书市场也是一片“兴旺”,各个层次、各种类型的Android图书的需求都比较旺盛。目前市场上已经有的图书主要分为以下三类:针对Android SDK API使用的描述针对Android系统架构各部分的描述针对Kernel移植的描述其中鲜有针对Android四层架构中某一层进行深入挖掘的图书,这让读者有一种只能窥其全貌,却不能独得一隅的遗憾。框架层是整个Android系统的灵魂,这一层起着承上启下的作用,是理解整个Android的关键,也是解决Android应用层Bug的关键。要开发一款精品手机,就必须深入理解这一层。国际知名的手机厂商对手机品质有着近乎苛刻的要求,手机必须在严格的测试环境下运行数百小时无问题方可上市销售。这期间出现的稳定性(ANR、Crash、Watchdog)、内存(OOM)、性能等问题都让人十分头痛。这些问题主要来自于应用程序、Framework、Dalvik虚拟机、Linux Kernel、Driver以及Modem,其中相当大一部分问题源自对Framework的错误理解和使用。举例如下:解决KeyDispatchTimeout类型的ANR,需要熟悉Activity Manager、Input消息处理系统的机制。解决应用程序IDLE状态时发生的ANR,需要熟悉Activity Manager、Binder的运行机制。解决框架层的Watchdog问题,需要熟悉Android启动阶段开启的系统服务和Watchdog的运行机制。解决应用程序的性能问题,同样需要理解框架层的运行和调度机制。上述问题只是冰山一角,仅仅停留在使用SDK API的层次是不可能解决上述问题的。因此,非常需要一本能深入挖掘框架层的专著。针对以上问题,编写“Android的设计与实现”系列丛书,对Android核心模块和主要问题进行深入分析。其中卷I的主题是启动和通信,主要分析Android运行环境、Package Manager、Activity Manager、Binder和消息机制等核心模块。卷Ⅱ的主题是资源和UI,主要分析Content Provider、Resource、View System、Window Manager、SurfaceFlinger等核心模块。读者对象本书主要分析了Android框架层主要部分的体系结构和实现原理,让读者对Framework有一个清晰的理解,并以此增强解决实际开发中遇到的Bug的能力。本书适合以下几类读者:中高级Android应用开发者Android系统开发者Android系统架构师负责Android调试与优化的工作者如何阅读本书本书分为六大部分:第一部分为基础篇(第1~2章),简要分析Android的体系结构、开发和调试环境、框架基础。第二部分为启动篇(第3~4章),着重分析Android启动过程的机制和实现,让读者对框架层系统服务的运行基础有一个全面的理解。第三部分为Binder篇(第5~6章),着重分析Binder在Native框架层和Java框架层的机制和实现,让读者掌握进程间通信模型。第四部分为消息通信篇(第7章),着重分析Android的消息驱动和异步处理机制,帮助读者掌握线程间通信模型。第五部分为Package Manager篇(第8~9章),着重分析Android应用程序的解析和安装流程。第六部分为Activity Manager篇(第10~12章),着重分析Activity Manager Service的运行机制、应用程序和进程的启动流程、进程管理机制。

名人推荐

Android快速发展了五年多,势头依然强劲。为了开发更强大的APP,众多开发者迫切需要更深入了解Android框架的机制。云君这本书真可谓雪中送炭,揽卷读之,欲罢不能!——Lordhong 资深移动开发工程师(目前在美国硅谷山景城)本书立足于对Android框架层技术的深入理解,融合了项目开发中积累的丰富实战经验,深入浅出,理解其“道”,习练其“术”,既可读其入门,亦可研习精深。——张帅 中科院计算所本书通过分析源代码系统地剖析了Android框架层的核心技术,无论是Android开发的初学者,还是资深的程序员,都可以通过此书从一个全新的视角认识Android系统,并从中得到启发。——严林 中科院计算所Android是当前移动开发领域的热点,云君这本书对Android系统框架层的设计思想和实现原理做了深入的分析和探讨,是Android开发工程师进阶修炼不可多得的参考资料。——高剑林 腾讯感谢云君写的这本书,对于我这样一直研究Linux内核的人来说,真的能从Android系统的设计与实现中有所领悟。书中对Android框架层的剖析条理清晰,系统透彻,体现了云君的功力深厚,更体现了其确实在用心总结。——孙子荀 腾讯有幸被邀请阅读本书初稿,本书作者对Android的通透理解令人震撼。国内解读Android系统原理的图书众多,本书却在深层次上独辟蹊径,实在难得。——张洪 阿里巴巴

媒体关注与评论

Android快速发展了五年多,势头依然强劲。为了开发更强大的APP,众多开发者迫切需要更深入了解Android框架的机制。云君这本书真可谓雪中送炭,揽卷读之,欲罢不能!——Lordhong资深移动开发工程师(目前在美国硅谷山景城)本书立足于对Android框架层技术的深入理解,融合了项目开发中积累的丰富实战经验,深入浅出,理解其“道”,习练其“术”,既可读其入门,亦可研习精深。——张帅中科院计算所本书通过分析源代码系统地剖析了Android框架层的核心技术,无论是Android开发的初学者,还是资深的程序员,都可以通过此书从一个全新的视角认识Android系统,并从中得到启发。——严林中科院计算所Android是当前移动开发领域的热点,云君这本书对Android系统框架层的设计思想和实现原理做了深入的分析和探讨,是Android开发工程师进阶修炼不可多得的参考资料。——高剑林腾讯感谢云君写的这本书,对于我这样一直研究Linux内核的人来说,真的能从Android系统的设计与实现中有所领悟。书中对Android框架层的剖析条理清晰,系统透彻,体现了云君的功力深厚,更体现了其确实在用心总结。——孙子荀腾讯有幸被邀请阅读本书初稿,本书作者对Android的通透理解令人震撼。国内解读Android系统原理的图书众多,本书却在深层次上独辟蹊径,实在难得。——张洪阿里巴巴

内容概要

杨云君 资深Android系统专家,不仅在Android应用开发方面积累了丰富的经验,而且精通Android系统级开发和性能优化,对整个Android系统的架构设计与实现原理有十分深入的研究和透彻的认识。就职于国际领先的跨国移动通信公司,作为主任工程师专门从事Android手机的定制和开发,研究Android系统是他的主要工作之一,曾负责了多个手机品牌的多款机型的系统开发和升级工作,经验十分丰富。

书籍目录

前言
第一部分 基础篇
第1章 Android体系结构及源代码阅读环境搭建 / 2
1.1 Android发展过程 / 2
1.2 Android体系结构 / 3
1.2.1 静态视角的体系结构 / 3
1.2.2 动态视角的体系结构 / 7
1.3 Android源码下载和编译 / 8
1.3.1 搭建开发环境 / 8
1.3.2 下载Android上层系统源代码 / 9
1.3.3 下载指定模块源码 / 10
1.3.4 下载 Android Linux Kernel源码 / 11
1.3.5 编译Android上层系统源码 / 12
1.3.6 编译指定模块源码 / 12
1.4 Android源码结构 / 14
1.5 Android源码开发工具的配置和使用 / 15
1.5.1 配置Android SDK / 15
1.5.2 用Eclipse开发和调试源代码 / 16
1.5.3 用Source Insight阅读源代码 / 19
1.6 NDK开发环境配置 / 20
1.7 本章小结 / 21
第2章 框架基础JNI / 22
2.1 JNI在Android系统中所处的位置 / 22
2.2 JNI框架层实例分析 / 23
2.2.1 Log系统Java层分析 / 24
2.2.2 Log系统的JNI层 / 24
2.2.3 Log系统的JNI方法注册 / 25
2.3 JNI总管:JNIEnv / 27
2.4 在Java中调用JNI实现方法 / 29
2.4.1 Java数据类型与JNI数据类型转换 / 29
2.4.2 JNI方法命名规则 / 30
2.4.3 JNI方法签名规则 / 31
2.5 JNI操作Java对象 / 32
2.5.1 访问Java对象 / 32
2.5.2 操作成员变量(域)和方法 / 33
2.5.3 全局引用、弱全局引用和局部引用 / 34
2.6 JNI异常处理 / 36
2.7 JNI应用层实例分析 / 38
2.7.1 Java层分析 / 38
2.7.2 JNI层代码和异常处理 / 39
2.8 本章小结 / 42
第二部分 启动篇
第3章 Android启动过程的底层实现 / 44
3.1 Android正常模式启动流程 / 44
3.2 Kernel启动过程 / 44
3.2.1 内核引导阶段 / 45
3.2.2 内核启动阶段 / 46
3.3 init进程的执行过程 / 49
3.4 init.rc文件解析过程 / 53
3.4.1 Android初始化语言 / 53
3.4.2 init.rc的内容 / 56
3.4.3 解析配置文件 / 57
3.4.4 解析Service / 60
3.4.5 解析Action / 63
3.5 触发并启动Action和Service / 65
3.5.1 触发Action / 65
3.5.2 执行Action / 66
3.5.3 启动Service / 70
3.5.4 init对属性服务的处理 / 71
3.6 init循环监听处理事件 / 75
3.7 本章小结 / 77
第4章 Android 启动过程的上层实现 / 78
4.1 第一个Dalvik虚拟机zygote / 79
4.1.1 zygote的配置 / 79
4.1.2 如何执行zygote服务程序 / 80
4.2 ZygoteInit的启动过程 / 82
4.2.1 创建Dalvik虚拟机 / 83
4.2.2 注册JNI方法 / 85
4.2.3 开启Java世界 / 88
4.3 ZygoteInit开启Java世界的五部分工作 / 89
4.3.1 注册zygote的Socket / 89
4.3.2 预加载Class资源和Resource资源 / 89
4.3.3 启动system_server进程 / 92
4.3.4 执行MethodAndArgsCaller的run方法 / 98
4.3.5 执行runSelectLoopMode方法 / 102
4.4 zygote处理Home启动请求 / 104
4.5 本章小结 / 112
第三部分 Binder篇
第5章  Binder在Native框架层的实现 / 114
5.1 Binder与C/S体系结构概述 / 114
5.2 servicemanager进程的启动过程 / 115
5.2.1 初始化Binder通信环境 / 116
5.2.2 注册上下文管理者 / 118
5.2.3 等待接收并处理IPC通信请求 / 120
5.3 Server的启动和Service的注册过程 / 128
5.3.1 创建ProcessState对象 / 129
5.3.2 获取servicemanager的代理对象 / 131
5.3.3 注册Service / 139
5.3.4 Server进程开启线程池 / 145
5.4 Client端使用服务代理对象 / 146
5.5 服务代理与服务通信 / 149
5.6 本章小结 / 152
第6章 Binder在Java框架层的实现 / 153
6.1 Java系统服务的创建过程 / 153
6.1.1 创建JavaBBinderHolder对象 / 155
6.1.2 JavaBBinder的作用 / 156
6.1.3 gBinderOffsets结构体解析 / 156
6.2 Java系统服务的注册过程 / 159
6.2.1 调用BinderInternal.getContextObject方法 / 160
6.2.2 调用ServiceManagerNative.asInterface方法 / 165
6.2.3 调用ServiceManagerProxy. addService方法注册服务 / 167
6.3 Client端获取服务代理 / 169
6.3.1 获取服务的BinderProxy / 170
6.3.2 构造服务的Proxy对象 / 172
6.3.3 构造服务管理者对象 / 173
6.4 Client端调用Java系统服务的方法 / 174
6.5 统一的通信接口AIDL / 177
6.5.1 AIDL实例 / 177
6.5.2 AIDL语法 / 180
6.5.3 处理自定义数据类型的传递 / 181
6.6 本章小结 / 182
第四部分 消息通信篇
第7章 线程消息通信与异步处理 / 184
7.1 什么是Looper线程 / 184
7.2 第一步:Looper线程准备阶段 / 185
7.2.1 创建Java层的Looper对象 / 186
7.2.2 创建Java层的MessageQueue对象 / 186
7.2.3 创建Native层的NativeMessage-Queue和Looper对象 / 187
7.2.4 NativeMessageQueue关联到MessageQueue / 189
7.3 第二步:创建消息处理器并发送消息 / 190
7.3.1 Handler的创建和初始化 / 190
7.3.2 Message的创建和初始化 / 191
7.3.3 消息的发送过程 / 192
7.4 第三步:Looper线程循环阶段 / 198
7.4.1 记录并获取当前线程身份信息 / 198
7.4.2 循环监听消息 / 199
7.4.3 分发消息到处理器 / 205
7.4.4 回收消息并更新消息池 / 209
7.5 异步任务类AsyncTask / 210
7.5.1 AsyncTask的实现 / 211
7.5.2 AsyncTask的执行 / 214
7.6 本章小结 / 223
第五部分 Package Manager篇
第8章 Package Manager 的机制与实现 / 226
8.1  Package Manager体系结构 / 227
8.1.1 三层体系结构 / 227
8.1.2 三层之间的关系 / 228
8.2 PackageManagerService的启动过程 / 231
8.2.1 创建并初始化Settings对象 / 232
8.2.2 获取系统默认配置 / 236
8.2.3 启动PackageHandler / 237
8.2.4 创建data目录并初始化UserManager / 239
8.2.5 解析系统permission和feature信息 / 242
8.2.6 解析packages文件 / 245
8.2.7 dexopt优化判定 / 247
8.2.8 启动FileObserver监控APK文件的目录 / 250
8.2.9 调用scanDirLI方法扫描并安装APK包 / 252
8.2.10 更新packages文件 / 253
8.3 PackageManagerService启动过程使用的核心组件 / 254
8.3.1 Java层的Installer / 255
8.3.2 Installd中的命令 / 258
8.4 本章小结 / 260
第9章 APK的安装过程 / 261
9.1 通过scanDirLI方法安装APK / 261
9.1.1 创建PackageParser / 262
9.1.2 解析AndroidManifest.xml文件 / 263
9.1.3 过滤PackageParser.Package类型的pkg对象 / 270
9.1.4 解析和安装pkg / 274
9.2 使用adb命令安装应用程序 / 282
9.2.1 通过消息机制安装指定的APK / 283
9.2.2 调用handleStartCopy方法处理安装操作 / 286
9.2.3 调用handleReturnCode方法处理返回结果 / 290
9.3  本章小结 / 293
第六部分 Activity Manager篇
第10章 Activity Manager的机制与实现 / 296
10.1 Activity Manager概述 / 296
10.2 ActivityManagerService在系统启动阶段的主要工作 / 297
10.3 第一阶段:启动ActivityManagerService / 299
10.3.1 启动AThread线程 / 300
10.3.2 创建ActivityThread对象 / 302
10.3.3 创建ActivityStack类 / 309
10.3.4 调用startRunning方法 / 310
10.4 第二阶段:调用setSystemProcess方法 / 310
10.4.1 查询并处理ApplicationInfo / 312
10.4.2 创建并初始化ProcessRecord / 313
10.5 第三阶段:调用install-SystemProviders方法 / 315
10.5.1 查询Content Provider / 316
10.5.2 安装Content Provider / 317
10.6 第四阶段:调用systemReady方法 / 323
10.6.1 发送ACTION_PRE_BOOT_COMPLETED广播 / 323
10.6.2 清理预启动的非persistent进程 / 325
10.6.3 读取Settings配置 / 326
10.6.4 运行Runnable回调接口 / 327
10.6.5 启动persistent应用程序和Home / 328
10.7 本章小结 / 329
第11章 应用程序Activity的启动和调度 / 330
11.1 启动应用程序Activity时在Client端的执行流程 / 330
11.2 启动应用程序Activity时在Server端的执行流程 / 334
11.2.1 预启动 / 334
11.2.2 暂停 / 348
11.2.3 启动应用程序进程 / 356
11.2.4 加载应用程序Activity / 362
11.2.5 显示Activity / 369
11.2.6 Activity Idle状态的处理过程 / 379
11.2.7 停止源Activity / 382
11.3 本章小结 / 387
第12章 Activity Manager进程管理 / 388
12.1 LRU weight机制 / 388
12.2 OOM adj机制 / 391
12.2.1 更新OOM adj值 / 392
12.2.2 OOM adj的计算过程 / 403
12.3 Low Memory Killer机制 / 414
12.3.1 OOM adj等级和最小内存阈值 / 414
12.3.2 LM Killer机制的实现 / 417
12.4 本章小结 / 419

编辑推荐

《Android的设计与实现:卷1》编辑推荐:从源代码角度,系统、深入、透彻剖析Android系统框架层(Framework)的设计思想和实现原理,为Android应用工程师和系统工程师解决各种难题提供了原理性的指导!资深Android内核专家亲自执笔,Lordhong等数位资深专家和安卓巴士等专业社区联袂推荐。

作者简介

本书是Android应用开发工程师和Android系统工程师进阶修炼的必读之作。它由资深Android内核专家亲自执笔,从源代码角度,系统、深入、透彻剖析Android系统框架层(Framework)的设计思想和实现原理,为Android应用工程师和系统工程师解决实际工作中的各种难题提供了原理性的指导。为了降低读者的阅读成本,本书使用了大量简单的UML类图和序列图来展示类的层次结构和方法的调用流程,使读者能迅速读完本书并领会其精髓!
“Android的设计与实现”系列丛书主要围绕Android系统的四层结构展开,通过源代码来分析各层的设计思想与实现原理,卷I则主要是针对Framework(框架层)的。全书共12章,分为六个部分:基础篇(第1~2章)详细讲解了Android的体系结构、源代码阅读和调试环境的搭建,以及整个框架的基础;启动篇(第3~4章)深入分析了Android启动过程的机制和实现原理,能帮助读者全面理解框架层系统服务的运行基础;Binder篇(第5~6章)着重分析了Binder在Native框架层和Java框架层的机制和实现,能让读者深入理解进程间的通信模型;消息通信篇(第7章)重点分析了Android的消息驱动和异步处理机制,能让读者深入理解线程间的通信模型;Package Manager篇(第8~9章)主要讲解了Package Manager的机制与实现,以及APK的安装方法与过程;Activity Manager篇(第10~12章)深入阐述了ActivityManagerService的运行机制、应用程序和进程的启动流程,以及进程管理机制。
本书适合中高级的Android应用开发工程师、Android系统开发工程师、Android系统架构师,以及负责对Android系统进行调试和优化的工程师们阅读。


 Android的设计与实现下载 更多精彩书评



发布书评

 
 


精彩书评 (总计9条)

  •     Android开发者进阶必备之书, 从应用层窥视框架层, 而后从框架层回视应用, 应用层的难点便一目了然。站在应用框架的角度,用比较浅显易懂的语句来引导应用开发者去观测框架层,可能前期读起来会比较有挑战性, 但随后带来的是醍醐灌顶的透彻,原来Android远不止是调几次api。
  •     这本书写的很详细,不但适合搞framework的,也适合做app的了解api调用流程!它还教我们怎样去学习框架,对于kernel要了解框架层的也是不二的选择!想要了解android框架的话一定要看看这本书,会受益匪浅!
  •     这本书写的很详细,不但适合搞framework的,也适合做app的了解api调用流程!它还教我们怎样去学习框架,对于kernel要了解框架层的也是不二的选择!想要了解android框架的话一定要看看这本书,会受益匪浅!

精彩短评 (总计24条)

  •     感觉像旧的。。。。。
  •     对框架层几个核心模块解释的挺清楚,能看出作者是下了一番功夫的。
  •     书刚到吐槽下,卖家发货速度比较慢,用的汇通快递太垃圾了,书内容还没有看,但是书的质量有点次,刚到就掉页了
  •     建议处于进阶阶段的开发者买,没一定基础的,这本有点像是“天书”。
  •     书内容不错,但是电子书排版超烂代码缩进一塌糊涂代码空格有许多错误其他懒得喷了,亚马逊要是就这样做IT电子书,不如干脆放PDF吧
  •     作为一名android framework工程师,这本书真的要好好读一下。拿到书有几天了,工作之余读了JNI和AMS部分,写的很好,也很实用。为什么说实用呢?前一段时间,帮客户解决应用经常被kill掉的问题。以前没接触过性能优化和AMS的进程管理部分,很久没有头绪。翻了好多书,网上搜了好多技术文章,都只是讲到activity启动流程什么的,对于AMS的讲解并不全面,很少涉及到进程管理的功能讲解。这本书讲解AMS,是从整体到细节,到工作中的实际使用,都做了详细的讲解。可能这本书里的目录内容,市面上有很多书都已经写过,但是这本是最实用的,是最实惠的。很多地方写的很细致,并不是单单的罗列代码讲流程。不但解释了很多“这是怎么做的”,也解释了很多“为什么是这么做的”。最近的工作围绕在PackageManager,这本书中也有详细的讲解,最近的一段时间仔细读一读。现在开始期待作者的第二本书了,呵呵,希望写的更好。
  •     这书了看了几章,JNI的分析,Android系统启动过程,还有Binder的实现。感觉有点儿照着代码宣科,一上来就是对着代码讲,一般人立马就晕菜了,如果在讲解代码前先对整个系统做一次介绍,包括架构设计以及内部的运行原理和流程结构,那样会更好。目前的这种方式,只是算一本好书,但不见得有多么的好。尤其是Binder那一章节(后面的还没看,读到这里了,所以来写点儿感... 阅读更多
  •     挺清晰的是正品!书的质量也不错
  •       从我已经看完的书中部分内容来说,用词严谨、语风活泼,插图大部分是重新绘制的,代码简洁关键,注释明晰易懂,整个风格给我一种值得信任的感觉,并且看起来不枯燥。  从整体上看,感觉跟其他源码分析的书不太一样,这本书不是以源码为主线进行的分析,似乎作者是以讲解清楚原理为目标而进行写作,侧重点在于“为什么和如何做”,而不仅仅介绍“是什么”,再看看书名,还算名副其实。  个人认为不仅仅适用于framework开发、android调试与优化的开发者,对于有一两年应用层开发经验、在技术突破上处于瓶颈期的人也很有好处。    由于写书时间稍微落后一点,最近才上市,书中采用的android版本也更新至4.1,可以认为是最新的。    虽然还没有完全读完,但是从已读的篇章来看,这是一本很有诚意的书,不废话,不含糊,让整本书读下来很舒服、很畅快。
  •     不过对我这个没有基础的,跟着代码追踪就比较痛苦了。相信有基础的看起来会觉得帮助很大!
  •     书的内容很严谨,分析的很详细。
  •     学习Android底层的好教材
  •     只是将官网上的教程翻译成中文。。。
  •     大概浏览了一遍,未深读,但解决了自己对android系统的一些疑惑。不敢做评价,待深读后。
  •     这本书不太适合新手,有基础的人看还是有点用的
  •     外表看着不错,纸质也很好,很喜欢,给5颗星!
  •     浏览过了一遍。没有能够消化掉,我就是浏览一下,和那些概念混个脸熟。然后再找更新版本的仔细研读。
  •     jni是个好东东
  •     对90%Android的书只能一声叹息,是我太笨了吗?
  •     对于刚开始接触Android的我,确实是一本好书。
  •     这本书对我们了解android的设计原理很有帮助
  •     非常好的适合android 中级开发者的书,讲的有深度也有光度。
  •     建议有一定android经验的开发人员,特别是喜欢接触底层
  •     这本书 感觉买早了 应该等基础再好一点来看的
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024