新書推薦:
《
控制权视角下的家族企业管理与传承
》
售價:HK$
89.7
《
冯友兰和青年谈心系列
》
售價:HK$
171.8
《
利他主义的生意:偏爱“非理性”的市场(英国《金融时报》推荐读物!)
》
售價:HK$
79.4
《
认知行为疗法:心理咨询的顶层设计
》
售價:HK$
102.4
《
FANUC工业机器人装调与维修
》
售價:HK$
102.4
《
吕著中国通史
》
售價:HK$
64.4
《
爱琴海的光芒 : 千年古希腊文明
》
售價:HK$
204.7
《
不被他人左右:基于阿德勒心理学的无压力工作法
》
售價:HK$
67.9
|
編輯推薦: |
本书作者以研究操作系统并从事相关培训工作为生,是业内著名的操作系统专家、极客、果粉著有多本操作系统的畅销书。本书是他针对Android系统写的*本书。根据以往读者的反馈,在本书的内容上摒弃了以源代码讲解的方式,而改用实验的方法,直接拉低了学习的门槛读者无须费力也可根据实验轻松地理解掌握Android内部技术的精髓!如业内众大咖所说:本书是目前了流的Android书,也是学习Android内部技术的不二之选!
本书被美国中情局,国内部分手机厂商作为内部员工学习教材。
写作特色
抛弃传统以源代码讲解的形式,直接从实验入手,读者无须了解代码也能深入掌握Android技术精髓
各章节相对独立,可以跳跃式阅读
大量使用图表、图片,直观易懂
作者有多年培训经验,针对读者的痛点下工夫,思路清晰、表述到位
|
內容簡介: |
《*强Android书:架构大剖析》通过实验而不是源码,将Android 系统层层拆解,令读者深刻透彻地掌握Android 系统的内部技术:以init 进程为切入点详细阐述了Android 的启动过程和关键服务;从Android 作为资源协调者和服务提供者的角度,重点分析了servicemanager 和system_server 这两个进程。同时,作者比较了Linux 与Android 系统的区别,并对Android 系统的安全性做了深入的阐述。
《*强Android书:架构大剖析》采用了大量的图表示例和实验,表达新颖清晰,让读者能直观地掌握Android 的技术精髓。
《*强Android书:架构大剖析》适合广大移动开发者及对Android 系统感兴趣的人员阅读。
|
關於作者: |
JonathanLevin是一位经验丰富的技术培训师和咨询师,他的关注点是"三大系统"Windows、Linux和MacOS以及它们的移动版本Android和iOS原理。15年来,Jonathan坚持传播内核工程和修改技术的真知灼见,在DefCON会议上发表了很多技术演讲。他是Technologeeks.com公司的创始人和首席技术官(CTO)这是由一些志趣相投的专家合伙创办的公司,致力于通过技术培训传播知识,通过咨询解决棘手的技术难题。他们的专业领域覆盖软件架构中的实时及其他关键部分、系统核级编程、调试、逆向工程以及性能优化。
译者简介
崔孝晨,教师,专注于信息安全领域,研究深入。翻译出版了多部著作,包括《黑客大追踪》、《Android安全攻防实战》,并致力于推动安全技术的发展。
|
目錄:
|
关于本书 XIV
第1 章 Android 体系结构的变革之路 1
1.1 Android 系统版本的历史变迁 2
Froyo(冻酸奶) 3
Gingerbread(姜饼人) 3
Honeycomb(蜂巢) 4
Ice Cream Sandwich(冰激凌三明治) 5
JellyBean(果冻豆) 5
KitKat(奇巧) 6
Lollipop(棒棒糖) 7
Marshmallow(棉花糖) 8
Nougat(牛轧糖) 9
1.2 Android 与Linux 11
并非另一个Linux 发布版本 11
然后Android 就登场了 12
与Linux 的异同 13
Android 的框架 15
Dalvik 虚拟机 18
JNI 19
原生二进制可执行文件 20
Bionic 22
Android 的原生库 25
源自其他项目的原生库 27
硬件抽象层 28
Linux 内核 29
1.3 Android 的衍生产品 30
谷歌官方的衍生产品 30
非谷歌官方的衍生品 33
1.4 对前方道路的思考 36
兼容64 位 36
ART(Android 运行时) 37
多画面 38
把Android 用作台式机操作系统 38
Android 和ARA 项目 39
Brillo 40
本章小结 40
参考文献 41
第2 章 Android 的分区和文件系统 43
2.1 分区架构 43
需要许多单独分区的原因 44
GUID 分区表 45
闪存(Flash Storage)系统 46
文件系统 46
Android 设备中的分区 49
2.2 Android 文件系统中存储的内容 53
root 文件系统 53
system 分区 54
data 分区 65
cache 分区 71
vendor 目录 72
SD 卡 73
2.3 受保护的文件系统 74
OBB:Opaque Binary Blobs 74
ASec:Android 安全存储(Android Secure Storage) 76
2.4 Linux 伪文件系统 78
cgroupfs 78
debugfs 79
functionfsdevusb-ffsadb 80
procfsproc 81
pstoresysfspstore 81
selinuxfssysfsselinux 82
sysfssys 83
本章小结 84
参考文献 84
第3 章 Android 的启动、备份和重置 86
3.1 Android 系统镜像 87
Boot Loader 89
Boot 镜像 93
内核 95
RAM disk 97
System 和Data 分区镜像 99
3.2 启动过程 101
固件启动过程 101
内核启动过程 105
3.3 关机和重启 109
3.4 应用的备份和恢复 112
命令行工具 113
本地备份 114
监视备份操作 117
3.5 系统重置(recovery)和升级 119
OTA(Over-The-Air)升级包 121
制作你自己的ROM 124
制作ROM 时可用的网上资源 128
本章小结 130
参考文献 130
第4 章 init 132
4.1 init 的角色和任务 132
系统属性 134
.rc 文件 140
总结:init 的执行流程 146
4.2 init 和USB 150
4.3 init 的其他角色 152
ueventd 153
watchdogd 154
本章小结 154
XIV ┃ 最强Android 书:架构大剖析
本章讨论所涉及的文件 155
第5 章 Android 的守护进程 156
5.1 core 类中的服务 156
adbd 156
servicemanager 160
healthd 161
lmkd(Android L) 165
logd(Android L) 168
vold 173
5.2 网络相关服务 182
netd 182
mdnsd 187
mtpd 187
racoon 188
rild 189
5.3 图形及多媒体服务 190
surfaceflinger 190
bootanimation 192
mediaserver 194
drmserver 196
5.4 其他服务 197
installd 197
keystore 200
debuggerd[64] 204
gatekeeper(Android M) 207
sdcard 208
Zygote[64] 211
本章小结 214
本章讨论涉及的文件 214
参考文献 215
第6 章 框架服务的架构 216
6.1 再探servicemanager 217
6.2 服务调用的模式 222
优点和缺点 224
序列化和Android 接口定义语言(AIDL) 225
6.3 Binder 228
简明历史 228
那么,Binder 究竟是什么 229
使用Binder 230
分析Binder 的当前使用情况 231
6.4 system_server 232
启动及执行流程 232
修改启动时的行为 234
本章小结 237
本章讨论涉及的文件 237
参考文献 237
第7章 从Linux 角度看Android 238
7.1 重温proc 239
符号链接:cwd、exe 和root 240
fd 243
fdinfo 245
status 247
7.2 用户模式内存管理 254
虚拟内存的分类和生命周期 254
内存的相关术语 258
内存不足时的应对方案 266
7.3 跟踪系统调用 269
toolbox ps 工具 269
wchan 和syscall 文件 270
strace 工具 271
本章小结 272
参考文献 272
第8 章 Android 安全性 274
8.1 移动安全威胁建模 275
攻击向量 275
攻击之道 278
8.2 Linux 层上的安全措施 281
Android 使用Linux 权限的方式 281
Linux 权能 289
SELinux 294
其他值得注意的特性 301
8.3 Dalvik 层上的安全措施 305
Dalvik 层上的权限 305
Dalvik 代码签名 310
8.4 用户层上的安全措施 312
锁屏机制 312
支持多用户 316
密钥管理 318
证书管理 318
密钥和私钥管理 322
8.5 存储安全 323
加密data 分区 323
基于文件的加密(Nougat 7.1) 326
Direct Boot (Nougat 的新特性) 326
启动过程中加强验证 327
8.6 Root Android 设备 328
在设备启动环节中root 329
利用安全漏洞root 331
Root 对安全的影响 332
本章小结 334
参考文献 334
|
內容試閱:
|
译者序
市面上关于Android 的书籍可谓汗牛充栋,我甚至都不敢把书名Android Internals 按照惯例译为《深入理解Android 系统》重名的书太多了。那么为什么还要把这本书介绍给国内的读者呢?因为市面上绝大多数的Android 书籍都是从程序员的视角展开的,入门的门槛相对比较高。尽管开发Android App 的程序员们自然应该对Android 系统有一个深入的理解,但这并不意味着其他人并不需要理解Android 系统。比如,电子取证人员,他们需要对Android 中的文件系统及数据存放位置有一个清晰的认识,以便从中提取相关数据;喜欢折腾的技术发烧友,root 掉系统之后一般都喜欢自己修改一下系统,比如禁用一些开机启动项之类的。如果无需依赖额外的App,只需一个文本编辑器就能完成相关修改,甚至给系统换上自己的开机动画岂不是很酷诸如此类。但这些人中只有很少的一部分接受过正规的编程训练,因此市面上大部分的书籍对他们来说难度就太大了。
本书的作者Jonathan Levin,也是畅销书Mac OS X and iOS Internals: To the Apple''s Core(中文版为《深入解析Mac OS X & iOS 操作系统》)一书的作者。按Jonathan 自己的说法,Mac OSX and iOS Internals: To the Apple''s Core 一书的读者反馈中,反映最激烈的问题是:太技术化了!许多读者读起来感到头大!所以在这本后继的Android Internals 中,他把不需要代码就能表达清晰以及与开发人员关系不太紧密的部分放在这一本书中,而把剩下的、与开发紧密相关的部分放在了另一本书中。这一点从本书英文版的副标题for Power User就可以看出来。那么什么是Power User呢?如果一定要和传统的桌面系统的用户相对应,这个Power User就相当于系统管理员(administrator)的角色。相对于普通用户,他需要对系统有更加深入的理解,能对系统进行更加详细的配置,因而也被认为可以拥有较高的权限(比如root)本书的部分实验确实需要拥有root 权限,且第8 章中也专用了一个小节讨论root 这一主题。
有人问,既然是讲系统内部实现,不讲编程又是如何把它讲清楚的呢?答案是使用实验。本书的内容是根据作者多年讲课的讲义,整理、精选1而来,通过在ADB(Android 调试桥)中执行各种命令的方式(相对于阅读代码),比较直观地向读者揭示Android 内部的工作原理。效果如何呢?别看广告,看疗效。上次曝出的CIA Value7 的相关内容显示,这本书已经被CIA 私下盗版,用于CIA 特工的内部培训了。而可怜的Jonathan Levin 既不敢告CIA 侵权,又不能告WikiLeaks,只好在本书官网上提供了已经被泄密的2015 年6 月版的英文版的免费下载链接与其去WikiLeaks 下载,不如上官网下载。不过读者也不必沮丧,自我2015 年10 月开始本书的翻译以来,几乎每个季度都会收到Jonathan Levin 发来的大量更新其中包括历次Android 系统更新的新内容,以及书中已经发现的一部分错误的更新(包括一些我发现的错误:),搞的我也不得不多次将译稿做一些必要的返工,目前出版的中文译本是以2016 年11 月底的最新版本为准(更新至Android Marshmallow PR1 版)的,您大可不必担心白花银子。
在本书的翻译过程中,我们力求将原文准确、清晰地翻译成中文。有模糊不清之处,我们尽量通过与作者沟通、阅读源码和实验的方式搞清楚。但各类缩写还是本着忠实原文的原则,沿用原文的写法。如在本书中,Android JellyBean 版会被缩写成J 版或JB 版,Android Lollipop版会被缩写成L 版,Android Marshmallow 版会被缩写成M 版等。
本书由上海公安学院的教师教官完成翻译,第一章由殷方老师翻译,第二章由王宏老师翻译,其余章节由我翻译,全书由我统一校对,并经本书作者Jonathan Levin 及其国内合作培训公司的同志审校。
最后感谢电子工业出版社刘皎老师在本书翻译过程中给予我们的有力帮助,感谢腾讯公司科恩实验室吴石、陈良、赵泽光等老师给本书初稿提出的宝贵意见。
囿于译者水平有限,书中必然存在疏漏之处,敬请读者不吝指正。
崔孝晨
2018 年6 月
前言
关于本书
概览
购买了本书的朋友,毫无疑问你已经意识到了Android 的重要性。这个启动于2003 年的操作系统,在被谷歌收购之后,现在已经成为谷歌最得力的产品。它迎头赶上了苹果公司的iOS操作系统(也有人说是很接近了),不仅取得了移动操作系统领域内的绝对优势(截至本书付印时,它的市场占有率已经达到了令人惊异的82%了),而且还渗透到了其他平台上,成为可穿戴设备、TV 和嵌入式设备上的操作系统。
Android 是开源的,而且是可以免费获得的,这也就意味着任何人都能获得它,并对它进行修改,使之能够运行在任何一种平台上事实上,这也是它能够力压群雄,占据市场主流的原因。不过,令人吃惊的是,尽管已被广为接受,但是至今仍然没有一本书来完成探究其内部工作原理并将其文档化的任务。前几年有一本名叫《构建嵌入式Android 系统:移植、扩展和定制》1的书,作者是Karim Yaghmour这本书给出了大量关于该操作系统通用结构的细节信息,但是其着眼点在于如何创建和修改源码,使之能运行在各种新的平台上,而没能给出操作系统本身的结构。事实上,在此书内部结构入门一节中,Yaghmour 声称要想完全理解Android 系统服务的内部结构,无异于蛇吞象。
我认为这还算是一种保守的说法,这也就是为什么本书需要由好几本书组成而不是只有一本的原因。第1 本(也就是你现在正在读的这本书)主要是从高级用户或者管理员的角度讨论Android。在这一本中,我试图从各种不同的角度,如Android 的设计、文件系统结构、启动顺序、原生服务再加上Linux 基底以及Linux 基底对操作的影响来讨论这一操作系统。这一切都不涉及代码,只是试图尽可能地给你一个大致的概念和鸟瞰图。从某种程度上说,本书可以算作Yaghmour 那本著作的后续之作,Yaghmour 的那本书本身也是极好的资料来源,我强烈建议你找一本来读。
本系列的第2 本(将于不久后出版)将会对Android 讨论得更深,而且会把视线转向Android框架服务(framework)的结构这显然对开发者更有吸引力:通过使用Java 层上各种丰富的框架,开发者可以拥有把输入设备、传感器、图形图像之类的东西抽象化的强大能力。当然这一抽象化的能力也并非是没有代价的复杂性隐藏在水面之下,只是大多数开发者对此安之若素(更有甚者还满足于这一状态)罢了。不过知识是力量的源泉,深入熟悉各类框架(及其底层实现机制)对于任何想要进行底层开发或者在性能调优、支持更多的硬件、安全研究等方面有所建树的人士都是至关重要的。
Android 是一个不断飞速更新的系统。在本书开始编写时,最新版的Android 系统还是KitKat,然后(尽管中间有过几次跳票)最新版就变成Lollipop 了。而且这一趋势还在不断加快由于Lollipop 版被发现有不少Bug,谷歌又宣布将要推出Android Marshmallow 版。不过,截至本书付梓时,Lollipop 版显示出了它稳定的一面所以我也可以骄傲地说,这本书已经反映了最新版好吧,是截至出版之日。幸运的是,借本书自媒体出版的东风,我可以不断地紧跟Android 系统的更新而修订本书的内容,读者现在看到的这一版已经更新到MarshmallowPreview Release 1 版(2015 年6 月)了。
我还试图从我的上一本书Mac OS X and iOS Internals 中吸取一点经验教训。我收到的读者对那本书的主要批评之一是:那本书太技术化了,充斥着大量源码,非开发人员身份的读者读起来实在是太累了。我个人的信条是读一下源码吧,淡定些!因为源码不像自然语言,(几乎)是不会有歧义的,因此也是用来描述系统的正确方式。虽然我还是坚持我的想法不动摇,但在这本书中,我还是在不牺牲细节信息的前提下,尽可能多地改用图表的形式来表达意思。[我把这一做法也用在了Mac OS X and iOS Internals 一书的第2 版上(这一版将于2016 年下半年出版)这倒也不完全是因为我想通了,心甘情愿地这么做,还有一个重要因素也在促使我这么做,那就是在那本书里更加深入地探讨了Mac OS X 和iOS 系统更底层、更隐秘的部分这些东西可是没有源码的]
本书也十分强调动手实践,我从我们的Android 培训课程里抽取了一些动手练习,并把它们改编成了书中的实验。如果你想要对相关章节讨论的主题有深入了解的话,这些实验对你来说无疑是极为重要的。Android 是UNIX(实际上是Linux)的一种衍生品,而学习UNIX 的唯一正确方式是用我们的手指,而不是用我们的眼睛或耳朵。在这些实验里演示了Android 命令行接口(CLI,command-line-interface)中的一些非常有用的命令,以及深入了解操作系统内部结构的技术。更进一步说,有些实验在不同的Android 环境下会产生不同的输出结果这也使它们非常值得你在自己的手机平板电脑上亲手做一遍,以体验不同厂商或操作系统版本在架构和实现上的不同之处。
全书内容鸟瞰
本书的内容编排,既可以让你能按部就班地逐页阅读,也能让你随便翻开一页就能读下去。书中的每一章都是独立成章的,在你阅读本书的电子版时,文中所提及的相关主题都是以超链接的形式给出的直接点击它,你就可以跳转到相关章节进一步阅读,但是对于纸质版的读者,我就只能给出相应的章节编号(引用书中的内容时)或者URL(引用其他资料时)了。我也会在相应的地方附上所引用的AOSP 文件的路径(尽管为了节省空间,是以缩略的形式给出的),要不然本书的主要用途就变成防身了
第1 章介绍了Android 操作系统:介绍了它各个不同版本的演化史(从Froyo 版开始,这是你目前在市场上能找到的最老版本的Android 系统了,一直到Lollipop 版1)。同时,在这一章里(从较高的视角)也通过逐一比较Android 软件栈中的各个层(layout),阐述了Android 的体系架构以及它的Linux 基础。紧接其后,这一章还介绍了Android 的衍生产品既包括谷歌自己的,也包括其他厂商的(比如亚马逊的FireOS)。最后,这一章将对Android 未来发展方向的设想和思考作为整章的小结。
从第2 章开始,我们开始深入探索各种技术细节第2 章的主题是Android 的分区和文件系统。我们先讨论Android 使用的分区架构(不幸的是,各家厂商远远没有对此达成一致),以及文件系统EXT4 和F2FS。然后,我们将探究文件系统中存放的内容如果你想要知道某个特定的系统目录或文件中存放的是什么数据,这将是非常有用的。此外,本章还会涉及一些内置应用的数据存放目录,如果你对电子取证感兴趣,这些内容无疑也是非常重要的。在这一章中还会讨论Android 受保护的文件系统(OBB 和ASEC)尽管在系统被root 之后,这些保护措施就会失效。最后,我们还会阐述Linux 伪文件系统(cgroupfs, debugfs, procfs, sysfs等)在系统中扮演的角色。
第3 章是在前一章的基础上展开讨论的因为涉及分区。它解释了在Android 系统启动过程中,各个分区所起的作用。我们先会讨论Android 的启动镜像(尽管有时会有些不正确地把它称为ROM),以及怎样把它刷到设备的各个启动分区里去。Android 默认使用的Boot Loader也会予以阐述(本书官网上还有一篇从更加技术的角度开展讨论的进阶阅读文章),以及启动镜像的其他一些组件[内核(kernel)、设备树(device tree)和initramfs]也会被详细讨论。本章中的相关实验还演示了如何把这些组件从启动镜像中解出来,修改其中的内容,然后再把它们重新打包回去制作一个你自己的刷机包(当然安装这种刷机包的前提是:在你的移动设备上Boot Loader 已经解锁了)。此外,在这一章中还讨论了通过无线网络发送更新镜像进行(OTA)升级,以及设备备份、重置和关机的操作过程。
第4 章专门讨论一个进程init。这个进程和它在UNIX 系统中的同名进程一样,是负责在用户态中启动系统的。我们会详细解释启动的过程,并解释init.rc 文件中使用的语法。init 的其他一些作用,比如维护系统属性和监视硬件改变(以ueventd 进程的身份),也会详细地加以讨论。
在第5 章中讨论的是原生服务,也就是列在init.rc 文件中的,由init 进程启动的Linux 二进制可执行文件(与之相对应的是Dalvik 级的框架服务,这些服务是以system_server 进程中的线程的形式被加载起来的,我们会在第2 本中讨论这些框架服务)。在这一章中逐个详细介绍了你可以在自己的移动设备上找到的每一个守护进程说实话,还真不少。
在第6 章中简略介绍了Android 框架服务的大致架构,解释了servicemanager 和system_server 进程在其中所扮演的角色这两个进程共同构成了其余所有构建在其上的Android 框架服务的基石。Binder 也是这一章里的重头戏,我们会简略地对它进行一番描述,是大部分细节信息还是要留待第2 本讨论补充。我希望这一解释足以让你能更深一步地理解Android 进程间通信和远程过程调用的内部工作机制。
第7 章以Linux 的视角来看待Android,也就是通过proc 伪文件系统以及使用Linux 系统中的工具,观察Android 系统中的进程及应用。这一章还有一个一箭双雕的作用你可以把这一章讨论的绝大多数工具,用在你自己的Linux 系统原生代码的调试工作中。
作为本卷的最后一章,第8 章是专门用来讨论安全的。这一章在本书的官网上有预览版(只不过在预览版中的编号中,它是第21 章当时我曾经天真地认为可以在一本书中把所有的问题都讲清楚),在这一章里将逐一详细讨论Android 的所有安全特性既包括Linux 层上的,也包括Dalvik 虚拟机层上的。同时,在这一章中还有一个小节专门来讲述Android 设备的root问题既讨论了被厂商认可的在设备启动时root 的方式,也讨论了那些通过安全漏洞root设备的方法。
本书使用的排版约定
本书采用如下排版约定:
? 以filename 这种格式表示文件名。
? 命令、系统调用名称以及框架类名都是以command1、systemCall2以及classes 这种格式表示的。命令和系统调用名称后面跟的数字是指:在使用Linux 的man 命令打开的手册中,该命令或系统调用所在的章节编号。
此外,本书还有许多插图、代码清单和输出结果。插图是由系统组件或消息传递流程组成的图片,相对于输出结果,代码清单中给出的一般是内容固定的文件中的内容,而输出结果中给出的则是一连串命令的执行结果它通常是某个实验的一部分。我制作输出结果的目的是:
显示各条命令的执行顺序及其用法,所以输出结果中一般都是带注释的(如输出结果0-1 所示)。
请注意上面这个输出结果中的细节用户名(上面这个输出结果中的user)(以及命令行提示符是$还是#)能够告诉你,这条命令是在shell 中就能执行,还是必须要有root 权限才能执行。主机名(上面这个输出结果中的hostname)则可以告诉你这条命令是在哪台设备上执行的如果它是generic,表示是在一台模拟器中;如果是flounder,表示是在一台Nexus 9L中;如果是其他移动设备的名称(s3、s4、kindle 或Nexus 5 之类的),则表示是在一台对应的移动设备中;如果它是Forge,则表示是在作者自己的Linux 计算机上运行的。我尽量避免在书中出现大段的代码(至少在本书中是这样的),在迫不得已的情况下,我也尽量只给出最关键的代码,此外,我也会在代码中加上帮助你理解代码的注释。代码的字体颜色也调整为能够同时兼顾彩色(如果你读的是PDF 版)和黑白(如果你阅读的是纸质版)两种打印方式的颜色。
最后
本书绝对是个大工程,我像在大海里捞针那样把最重要的代码从Android 源码里挑了出来。但即便是这样,肯定还有人想要亲自查看相关源码。所以,我在每次讨论中都会给出相关的源文件,并且是以超链接的方式给出的(纸质书的读者就只好抱歉了,我会把它们统一放在一个表格里供你们查阅)。有兴趣的读者也可以去谷歌的Android 源码网站, 或者去http:source.android.com用git 或者repo 命令下载最新版的Android 源码。
这本书是我一个人的战争除了封面设计(封面设计是Dino Tsiopanos 送给我的礼物,Dino 不仅是个很棒的工程师,还是个很棒的画家)。书中的所有内容,包括文字、图片、排版和编辑都是我一个人完成的。幸亏我还可以向我的两位审校Moshe Kravchi 和 Arie Haenel寻求帮助,我真的非常感谢你们二位!Nikolay Elenkov(那本棒极了的Android Security Internals:An In-Depth Guide to Android''s Security Architecture1一书的作者)也对本书提出了宝贵的意见和建议。Aviv Greenberg 在出版前的最后一段时间里以最快的速度通览了全书,给了我非常重要的评论。我还要感谢Eddie Cornejo,你不光挑出了很多错别字,还让我有底气说:我(在书中)对所有操作系统的评价都是公正的。最后,我还要感谢Nikola Veljkovic,感谢你帮我修正了书中的许多打字错误。
此外,我还要特别感谢Yoav Chernitz。事实上,我在所有书中都应该感谢你因为正是在你的鼓励下,我才会走上写书这条道路。或许对于我来说,这一切都是不言自明的,但我还是要把这件事告诉本书的读者,补上在本书的第1 版(更新至Android Marshmallow 版之前的那一版)中,没有对你表示特别感谢的缺憾。出于同样的理由,我还要特别感谢Yobo,因为是你引领我走上了Android 研究之路,是你告诉我Technologeeks 有Linux to Android 和Android Internals 这两门课的培训需求它们现在已经是最热门的两门课程了,而且也构成了这套书(共两本)的基础。另外,如果不是Ronnie Federbush,我也不会考虑像现在这样,尝试自媒体出版,而且本书的第2 本(即将出版)和Mac OS X and iOS Internals 第2 版也将以这一形式出版。
这里还要特别说一句,我个人最诚挚的感谢要送给Amy,我俩在一起世界才完美,从我上一本书开始(实际上是在所有的事上)你一直给予我无限的支持和鼓励。这是我永远要唠叨,永远不会忘记的感谢!
本书是我用vim 编辑器以符合HTML5 的格式要求全手工输入的(对,我保证,我确实就是这么干的!不过这次也是够了,我想下次我再也不会这么干了),所有的图片全是用SVG(又让我幼小的心灵受到了一次严重的创伤!)或PowerPoint 画的,这也就能够解释为什么这本书花了这么长的时间才面世。不过好消息是本书的第2 本(大概比这一卷厚一倍!)应该也会在不久出版。在书中做索引也是一件极其令人痛苦的事,所以我决定:在更新内容时,就不再做索引了(你只要直接在PDF 里搜索相关内容就行了)。如果你在书中发现了任何格式错误或者技术错误,也请体谅一下我这些辛苦的工作!不过对于技术错误,我提供专门的奖励每发现一个,就会有一定的奖励进入你的腰包。
我还维护了本书的官方网站,在这个站点上还有更多的进阶阅读材料和一些专门定制开发的工具,网址是:http:NewAndroidBook.com。本书的勘误表包括错别字和错误修订(我希望不会有),也会放在这个网站上。
如果你想要在推特上找我,请关注我公司的官推@Technologeeks,那里经常会推送一些我的书的更新以及扩展阅读材料。Technologeeks 公司也提供关于Android、OS X、iOS、Linux 及其他操作系统的专业咨询和培训服务, 所以我也建议你关注一下我公司的网站http:Technologeeks.com。特别要说一句的是:在我公司提供的培训服务中,关于Android 和OS XiOS 的培训都是基于我这两本书的。我公司在领英里还有一个Android Kernel Developers群如果你有兴趣的话,也可以加入这个群,来打个招呼(或是提些问题)。
我衷心希望你能觉得这本书的内容既有意思,又吸引人(好吧,我想应该是在技术书籍中比较吸引人)。在本书的官网上我搭建了一个论坛,恭候您的批评和建议。
现在就让我们正式开始吧!
|
|