深入剖析Android新特性
  • 推荐0
  • 收藏3
  • 浏览2.2K

深入剖析Android新特性

强波 (作者) 

  • 书  号:978-7-121-33933-2
  • 出版日期:2018-05-08
  • 页  数:444
  • 开  本:16(185*235)
  • 出版状态:上市销售
纸质版 ¥79.00
本书对最近几个版本(5.0 ~ 8.0)的主要新增功能进行整理和解析,本书的重点不仅仅是讲解这些新增功能特性的外部行为,而是在结合AOSP的源码基础上,解析这些功能特性的内部实现。
任何已有的功能都是固定的,随着行业的发展,Android系统在未来可能加入的功能是不确定的,只有掌握了阅读和分析AOSP源码的能力,才能应对不确定的变化,并具备今后能够自行研究Android系统的能力。
深入分析Android系统新特性,掌握独立阅读Android系统源码的能力
前言



本书介绍
本书的书名是《深入剖析Android新特性》。“新”和“旧”是相对的,这样的词是有时效性的,今天新的东西,很快就不新了,本书介绍的是Android系统5.0至8.0的新增特性。
Android作为一个跨越了多种设备的软件平台,由于各家厂商对于设备支持的速度不一,市场上的碎片化现象很严重。在Android 7.0、8.0推出的时候,很多用户可能还在使用4.4甚至更早的版本。而Android的新版本从推出到最终真正普及,需要一个较长的过渡时期。
这个现象对开发来说既有好处也有坏处。好处是开发者有足够多的时间为新版本的功能和特性做准备,坏处是开发者在开发应用时需要兼顾太多的版本。
本书在Android 8.0推出不久后上市,就是希望能给开发者们对近几年Android的新特性做一个梳理。因为笔者觉得,随着时间的推移,以及Android新版本的逐步普及,这些内容是开发者在最近几年正好需要的。
另外,这不是一本仅仅告诉读者Android SDK中的API如何使用的书。在本书中,我们会花更多的精力在这些特性的内部实现上,通过解析AOSP的源码,让读者不仅知其然,也知其所以然。
Android是一个开源的操作系统,任何人都可以获取和阅读其源码。笔者认为,阅读Android源码有如下好处:
? 加深对Android系统的理解;
? 对Android SDK提供的API有更深入的理解;
? 提升自己的设计和架构水平;
? 在应对一些Android定制版本上的特有问题时,能够明白背后可能发生了什么。
合适的读者
本书适合以下读者群:
? Android应用程序开发者;
? Android系统工程师;
? 对Android系统内部实现感兴趣的读者;
? 对Android系统最新功能感兴趣的读者。
本书会包含什么
本书会在AOSP源码的基础上讲解Android系统的新增特性,主要集中在5.0~8.0版本。本书首先会对Android系统做一个整体的介绍,并对最关键的知识做一些说明。之后,会将大部分精力集中在讲解Android系统5.0至8.0的新增特性上。
在讲解这些特性的时候,我们会结合AOSP的源码,尽可能深入到系统的内部实现中,让读者不仅知其然,也知其所以然。
任何一本书的内容都凝聚了很多人的经验,本书在写作过程中也参考了很多的资料,为了对这些资料的原作者表示尊重,也为了让读者可以在更大的范围内去进行探索和学习,在每个章节的结尾,都尽可能会包含“参考资料与推荐读物”,这些内容是笔者在写作过程中参考的资料,或者是笔者认为对读者有帮助的信息。
任何操作系统的实现都是一个极其庞大的工程,Android系统尤其如此。因此,任何一本书都不可能穷其所有细节,本书自然也不例外。就连5.0至8.0的新增功能中,我们也只能介绍其凤毛麟角。
但本书最大的目的在于:希望通过对新增功能的解析,让读者掌握Android的系统架构模型,以及阅读AOSP源码的能力,并最终具有能够自行研究Android系统的能力。
“授人以鱼不如授人以渔”,任何已有的功能都是固定的,随着行业的发展,Android系统在未来可能加入的功能是不确定的,只有掌握了自己阅读和分析Android源码的能力,才能应对不确定的变化。
本书不会包含什么
下面这些内容,由于它们本身都是非常大的话题,可以单独写成一本书(甚至几本书),因此这些内容在本书中不会讲解。
? 任何编程语言方面的知识;
? Linux/UNIX系统开发知识;
? Linux内核开发知识;
? 浏览器内核开发知识(Webkit、Chromium);
? Android App基础开发知识。
阅读本书,你不必懂Linux内核、浏览器的相关知识。但本书期待读者拥有C/C++、Java语言代码的阅读能力,熟悉Linux环境,并有基本的Android App开发知识。否则,你可能要选择其他书来做一些准备了。
为什么要写这本书
是的,市面上已经有太多的Android书籍了,为什么还需要这一本呢?在我决定写这本书之前,我也这样问自己。
本书的编辑陈晓猛先生最初与我联系的时候,是因为看到了我的个人博客。这是在我的博客上线仅仅三个月不到的时候。
说实话,因为我本身工作很忙,写博客都要使劲才能挤出时间,所以就更加没有时间去推广。我写博客的目的仅仅是为了自己积累一些东西。当然也希望我所记录下来的东西,能对别人有帮助。
在陈晓猛先生与我联系之前,我并没有想过自己会出一本书。但在看到他的留言之后,我便在想,如果我整理出来的知识能够让更多的人看到,能够对更多的人产生帮助,那不是很好吗?于是我便尝试给他回了邮件。
出于以下理由,让我决定写这本书:
? Android平台拥有非常多的开发者,开发者们需要更多的资料;
? AOSP的源码是完全开放的,但却缺少内部实现的设计文档和说明资料;
? 目前已有的书籍大部分是针对Android 4.4前后的版本,需要有一本书针对新版本做一些整理;
? 每个人看问题和分析问题的方式不一样,给更多的人分享自己的经验是很有意义的;
? 作为一个操作系统工程师,对于同行的分析和研究也是我的工作内容之一。
“术业有专攻,闻道有先后”,做技术的过程本身就是一个互相学习和互相交流的过程。
由于笔者水平有限,文中若有错漏之处,也希望读者不吝赐教。
我的邮箱:paulquei@gmail.com。
我的个人主页:http://qiangbo.space。
本书的主要结构
本书包含的章节及每一章的内容介绍如下。
? 第1章:介绍Android系统的整体架构,并讲解如何获取AOSP源码,以及自己动手编译出可以运行的Android系统。
? 第2章:讲解Android系统中的进程管理,包括进程的创建、优先级管理,以及系统对于内存的管理。
? 第3章:讲解Android系统中的虚拟机,包括Dalvik虚拟机、ART虚拟机。
? 第4章:讲解Android系统上用户界面的改进,包括多窗口功能和App Shortcts。
? 第5章:讲解Android系统上的SystemUI改进,包括System Bar、Notification,以及Quick Settings。
? 第6章:讲解Android系统上功耗方面的改进,包括Project Volta、Doze模式与App StandBy。
? 第7章:讲解Android系统上设备管理方面的改进,包括对于多用户的支持和面向企业环境的Android。
? 第8章:讲解Android系统安全方面的改进。
? 第9章:讲解Android系统在图形方面的改进,包括整个架构、主要组件,以及Project Butter等知识。
? 第10章:讲解Android O系统架构的改进—Project Treble。
致谢
这本书得以出版,我第一个要感谢的是南京富士通南大软件技术有限公司的朱清森部长。他曾是我的领导,正是他的引导,我才第一次尝试写作并投稿给IBM DeveloperWorks站点(https://www.ibm.com/developerworks/cn/java/j-lo-asm/),之后才有了我写的其他文章,以及我的个人博客,当然还有这本书。
第二个要感谢的是博文视点的编辑陈晓猛先生,是他的鼓励和辛苦编辑才使本书得以面世。最后要感谢的是我在AliOS的同事和领导,从这群优秀的工程师身上我学到太多太多。在我写作本书的期间内,也得到了他们的很多帮助。

强波
2018年3月于杭州


目录

第1章 预备知识 1
1.1 Android系统架构 1
1.2 关于AOSP 3
1.3 理解Android Binder机制 3
1.3.1 Binder机制简介 3
1.3.2 整体架构 4
1.3.3 驱动层 7
1.3.4 Binder Framework C++部分 26
1.3.5 Binder Framework Java部分 54
1.3.6 参考资料与推荐读物 70
第2章 Android系统中的进程管理 72
2.1 关于进程 72
2.2 系统进程与应用进程 73
2.2.1 init进程与init语言 75
2.2.2 Zygote进程 81
2.2.3 system_server进程 84
2.3 应用进程的创建 87
2.3.1 关于应用组件 87
2.3.2 进程与线程 88
2.3.3 ActivityManagerService 89
2.3.4 Activity与进程创建 92
2.3.5 Service与进程创建 94
2.3.6 ContentProvider与进程创建 96
2.3.7 BroadcastReceiver与进程创建 97
2.3.8 参考资料与推荐读物 99
2.4 进程的优先级管理 100
2.4.1 优先级的依据 100
2.4.2 优先级的基础 102
2.4.3 优先级的更新 105
2.4.4 优先级的算法 108
2.4.5 优先级的生效 119
2.4.6 结束语 119
2.4.7 参考资料与推荐读物 120
2.5 进程与内存的回收 120
2.5.1 开发者API 121
2.5.2 虚拟机的垃圾回收 122
2.5.3 开发者的内存回收 122
2.5.4 Linux OOM Killer 123
2.5.5 LowMemoryKiller 125
2.5.6 进程的死亡处理 126
2.5.7 参考资料与推荐读物 127
2.6 结束语 127
第3章 Android系统上的虚拟机 129
3.1 Java语言与Java虚拟机 130
3.1.1 Java语言 130
3.1.2 Java虚拟机 130
3.1.3 Java虚拟机实现架构 130
3.1.4 类加载器(Class loader) 132
3.1.5 垃圾回收 132
3.1.6 结束语 135
3.1.7 参考资料与推荐读物 135
3.2 Dalvik虚拟机 135
3.2.1 Stack-based VS. Register-based 136
3.2.2 Dalvik Executable(dex)文件 137
3.2.3 Dalvik指令 139
3.2.4 Dalvik启动过程 144
3.2.5 程序的执行:解释与编译 153
3.2.6 Dalvik上的垃圾回收 156
3.2.7 参考资料与推荐读物 159
3.3 Android Runtime(ART) 159
3.3.1 ART VS.Dalvik 159
3.3.2 OAT文件格式 162
3.3.3 boot.oat与boot.art 165
3.3.4 Dalvik到ART的切换 166
3.3.5 ART虚拟机的启动过程 169
3.3.6 内存分配 173
3.3.7 垃圾回收 178
3.3.8 JIT的回归 182
3.3.9 ART虚拟机的演进与配置 185
3.3.10 参考资料与推荐读物 186
第4章 用户界面改进 187
4.1 多窗口功能 187
4.1.1 概述 188
4.1.2 开发者相关 189
4.1.3 内部实现 191
4.1.4 参考资料与推荐读物 205
4.2 App Shortcuts 206
4.2.1 开发者API 206
4.2.2 内部实现 209
第5章 系统界面改进 215
5.1 SystemUI整体介绍 215
5.1.1 SystemUI简介 215
5.1.2 SystemUI的初始化 216
5.1.3 System Bar的初始化 221
5.1.4 参考资料与推荐读物 224
5.2 System Bar 224
5.3 Notification 234
5.3.1 开发者API 234
5.3.2 通知栏与通知窗口 240
5.3.3 Notification从发送到显示 243
5.4 Quick Settings 256
5.4.1 开发者API 256
5.4.2 系统实现 260
5.4.3 参考资料与推荐读物 265
第6章 功耗的改进 266
6.1 Project Volta 266
6.1.1 JobScheduler API 267
6.1.2 电量消耗分析工具 277
6.1.3 在虚拟机层面减少电池消耗 279
6.1.4 省电模式 280
6.1.5 结束语 281
6.1.6 参考资料与推荐读物 281
6.2 Doze模式与App StandBy 282
6.2.1 概述 282
6.2.2 了解Doze模式 282
6.2.3 了解App StandBy 284
6.2.4 对其他用例的支持 284
6.2.5 在Doze模式和App StandBy下进行测试 285
6.2.6 Doze模式的实现 287
6.2.7 App StandBy的实现 293
6.2.8 参考资料与推荐读物 297
6.3 Android 8.0上的后台限制 297
6.3.1 概览 298
6.3.2 后台服务限制 299
6.3.3 广播限制 300
6.3.4 系统实现 301
6.3.5 结束语 308
第7章 面向设备管理的改进 310
7.1 多用户的支持 310
7.1.1 术语 311
7.1.2 支持多用户 312
7.1.3 多用户的实现 313
7.1.4 参考资料与推荐读物 333
7.2 设备管理 334
7.2.1 Device Administration API介绍 334
7.2.2 开发设备管理程序 335
7.3 面向企业环境的Android 339
7.3.1 企业环境解决方案 340
7.3.2 受管理资料(Managed Profiles) 340
7.3.3 受管理资料的内部实现 342
7.3.4 参考资料与推荐读物 349
第8章 Android系统安全改进 350
8.1 Android系统安全概览 350
8.2 运行时权限 351
8.2.1 功能介绍 351
8.2.2 新增API 354
8.2.3 参考资料与推荐读物 370
第9章 图形系统改进 371
9.1 整体架构 371
9.1.1 Android图形组件 371
9.1.2 组件 373
9.1.3 Android如何绘制视图 374
9.1.4 关于硬件加速 376
9.1.5 参考资料与推荐读物 377
9.2 图形系统组件 377
9.2.1 Activity与Surface 377
9.2.2 Gralloc 379
9.2.3 BufferQueue 382
9.2.4 Surface 384
9.2.5 参考资料与推荐读物 388
9.3 Project Butter 388
9.3.1 FPS 389
9.3.2 VSYNC 391
9.3.3 Choreographer与VSYNC 392
9.3.4 Triple Buffer 398
9.3.5 参考资料与推荐读物 400
9.4 SurfaceFlinger 400
9.4.1 SurfaceFlinger 介绍 401
9.4.2 Hardware Composer 402
9.4.3 SurfaceFlinger的启动 403
9.4.4 SurfaceFlinger的对外接口 405
9.4.5 VSYNC的传递 407
9.4.6 SurfaceFlinger的事件 409
9.4.7 图层的合成 411
9.4.8 刷新 412
9.4.9 参考资料与推荐读物 413
9.5 Vulkan简介 414
9.5.1 Vulkan组件 414
9.5.2 修改的组件 415
9.5.3 Vulkan API 415
9.5.4 参考资料与推荐读物 415
第10章 系统架构改进 416
10.1 Project Treble整体介绍 417
10.2 HIDL 420
10.2.1 语法介绍 421
10.2.2 HIDL 与 Binder 422
10.3 ConfigStore HAL 423
10.3.1 概述 423
10.3.2 内部实现 424
10.4 Vendor Native Development Kit 426
10.5 Vendor Interface Object 427
10.5.1 概述 427
10.5.2 Manifest 429
10.5.3 内部实现 429

本书勘误

印次
  • 页码:92  •  行数:10  •  印次: 1

    在92页,中2.3.4 Activity与进程创建
    这里贴的代码有误,将startActivity贴成startService

    mike.xiao 提交于 2018/6/19 20:03:10
    陈晓猛 确认于 2018/7/2 9:15:14
  • 页码:96  •  行数:图2.5标题  •  印次: 1

    contenntProvider改为 ContentProvider

    c605838101 提交于 2019/3/28 15:10:52
    陈晓猛 确认于 2019/3/30 12:34:13

读者评论

图书类别

相关图书

Android进阶之光(第2版)

刘望舒 (作者)

本书是一本Android进阶类图书,书中各知识点由浅入深、环环相扣,最终这些知识点形成了一个体系结构。本书共分为11章。第1章介绍从Android 5.0到An...

 

Android音视频开发

何俊林 (作者)

近年来,直播、短视频行业的相关业务发展迅猛,本书主要介绍其中涉及的Android音视频开发相关技术。本书一共有11章,分别介绍了音视频基础知识、MediaPla...

¥69.00

Android进阶解密

刘望舒 (作者)

本书是一本Android进阶书籍,主要针对Android 8.0系统源码并结合应用开发相关知识进行介绍。本书共分为17章,从3个方面来组织内容。<br>第一方面...

¥69.00

Android自定义控件开发入门与实战

启舰 (作者)

在Android中,官方提供的控件是非常有限的,而我们所面临的需求却是多样的。大家在工作中难免会接触到自定义控件的需求,但系统讲解自定义控件知识的书籍却少之又少...

¥99.00

Android应用开发进阶

范磊 (作者)

本书为Android应用开发进阶的参考用书,旨在帮助Android开发者能够快速有效地掌握Andriod应用开发进阶相关的知识点。本书内容为Android应用开...

¥89.00

Android组件化架构

曾家乐 (作者)

本书首先介绍Android组件化开发的基础知识,剖析组件化的开发步骤和常见问题,探究组件化编译原理和编译优化措施。其次在项目架构上,介绍如何组织团队来使用组件化...

¥79.00