“新”和“旧”是相对的,本书会介绍Android系统5.0至8.0的新增特性。
在这些特性中,有的是Android系统针对旧版本存在问题的改进,例如,针对功耗问题改进的Project Volta和Doze模式,针对权限问题的Runtime Permission;有的是对系统功能的增强,例如,多窗口模式;有的是应对未来行业趋势的发展,例如,对于VR的支持。
Android作为一个跨越了多种设备的软件平台,由于各家厂商对于设备的支持速度不一,在市场上的碎片化现象很严重。在Android 7.0、8.0推出的时候,很多用户可能还在使用4.4甚至更早的版本。而从Android的新版本推出,到最终真正普及,需要一个较长的过渡时期。
这个现象对开发来说既有好处也有坏处。好处是开发者有足够多的时间为新版本的功能和特性做准备,坏处是开发者在开发应用时需要兼顾太多的版本。
本书希望能给开发者们对近几年Android的新特性做一个梳理。随着时间的推移,随着Android新版本的逐步普及,这些内容是开发者在最近几年正好需要的。
另外,这不是一本仅仅告诉读者Android SDK中的API如何使用的书。在本书主要分析这些特性的内部实现上,通过解析AOSP的源码,让读者不仅知其然,也知其所以然。
Android系统发布于2008年,到2018年已经有十年的时间。经过十年的发展,Android已经成为全球大操作系统。目前,Android拥有几十亿用户,几百万的应用程序,更有无数的开发者。在过去的十年里,Android一直没有停止更新的步伐,最近几年,Android以每年一个大版本的速度向前演进。并且,在一年内还会有若干的小版本发布。很自然,开发者需要不断地了解这些新增的功能和特性。
《深入剖析Android新特性》对最近几个版本(5.0~8.0)的主要新增功能进行了整理和解析,《深入剖析Android新特性》的重点不仅仅是讲解这些新增功能特性的外部行为,而是在结合AOSP的源码基础上,解析这些功能特性的内部实现。任何已有的功能都是固定的,随着行业的发展,Android系统在未来可能加入的功能是不确定的,只有掌握了阅读和分析AOSP源码的能力,才能应对不确定的变化,并具备今后能够自行研究Android系统的能力。
强波,江苏南京人,现居住在浙江杭州。就职于阿里巴巴集团-OS事业部-核心系统部门。在阿里,我的花名叫做”未悔“,花名取自《离骚》。多年智能操作系统开发经验,热爱钻研技术,也热爱分享技术。现在负责AliOS运行时环境的研究与开发,参与过手机、汽车、平板电脑、TV等多种智能设备的研发工作。个人博客:http://qiangbo.space。
第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
本书介绍
本书的书名是《深入剖析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月于杭州
我之前尝试阅读过几本关于Android新特性的书籍,但都因为各种原因放弃了,直到我遇到了《深入剖析Android新特性》。这本书真正做到了“深入”和“剖析”。作者并没有仅仅停留在罗列新API的层面,而是通过大量的案例分析和源码解析,将新特性的“前世今生”以及“未来发展”都讲透了。我尤其喜欢他对“后台处理”和“任务调度”这块的深入讲解。在Android 10(或其他新版本)引入了更严格的后台限制后,很多开发者都感到迷茫,而这本书则非常细致地解释了新的后台服务、WorkManager的改进,以及如何在高效率和用户体验之间取得平衡。作者甚至还探讨了针对不同设备形态(如折叠屏手机)的特殊适配和优化策略,这对我这种需要开发适配多种设备的应用程序的开发者来说,价值连城。而且,书中关于“可伸缩性”(Scalability)和“可维护性”(Maintainability)的设计原则,也贯穿始终。作者通过对新特性的讲解,引导我们思考如何构建更健壮、更易于维护的Android应用程序。这不仅仅是学习技术,更是在提升设计能力。我非常欣赏作者在书中分享的一些“经验之谈”,这些都是在日常开发中难以获得的宝贵财富。这本书不仅仅是一本技术参考书,更像是一位经验丰富的老友在耐心指导你如何成为一名更优秀的Android开发者。
评分《深入剖析Android新特性》这本书,与其说是一本技术书籍,不如说是一次对Android最新技术浪潮的全面扫描和深度解读。作者的文字功底和技术深度都令人赞叹。他以一种非常“接地气”的方式,将那些可能让普通开发者望而却步的新概念,化繁为简。我印象深刻的是关于“跨设备协同”部分的讲解。在过去,我们可能只停留在简单的Activity跳转或者文件传输,但书中详细介绍了Android 14(或其他新版本)在多设备联动方面的最新进展,例如更强大的Binder机制在跨进程通信中的应用,以及新的Intent解析机制如何实现更流畅的应用间交互。作者甚至还探讨了与Wear OS、Android TV等设备协同开发的细节,并提供了相应的实战代码示例。这对于我这种正在探索跨平台开发的用户来说,简直是雪中送炭。此外,书中对人工智能在Android系统中的应用也有独到的见解。无论是AI模型在设备端的推理优化,还是与云端AI服务的无缝集成,作者都给出了非常清晰的指导。他没有停留在概念层面,而是通过具体的API和代码,展示了如何在应用中利用这些AI能力。这本书的排版也很舒适,图文并茂,阅读起来不觉得枯燥。每章末尾的总结和思考题,也帮助我巩固了知识,并激发了更多的联想。
评分这本《深入剖析Android新特性》真是令人惊喜!我一直以来都对Android的底层原理和新功能更新充满好奇,但市面上很多书籍要么过于浅显,点到为止,要么就是过于晦涩难懂,让初学者望而却步。然而,这本书的出现,恰好填补了这一空白。作者从宏观视角出发,将Android 12(或其他新版本)引入的那些看似零散的新特性,巧妙地编织成一张完整的技术图谱。我尤其喜欢他对“Material You”设计语言的剖析,不再是简单的罗列UI元素的改变,而是深入讲解了它背后的设计哲学、颜色自适应的实现机制,以及如何在应用中优雅地集成。这种由表及里、由浅入深讲解的方式,让我不仅知其然,更知其所以然。书中关于隐私控制的章节也让我茅塞顿开,那些新的权限管理API,如“近似位置访问”和“近期使用过的应用访问”,以前总感觉云里雾里,通过作者细致的图文并茂的讲解,我才真正理解了它们在实际开发中的应用场景和最佳实践。而且,作者在讲解过程中,大量引用了Android开源项目的代码片段,这对于我这种喜欢动手实践的读者来说,简直是福音。每当遇到一个新特性,他都会迅速将我们引向相关的源码,让我们看到最原始、最核心的实现。这不仅仅是学习,更像是一次与Android核心开发团队的“面对面”交流。书中的示例代码清晰明了,逻辑性强,即便是相对复杂的概念,也能通过这些生动的代码示例变得易于理解。我迫不及待地想将书中学到的知识应用到我的实际项目中,相信这本书一定会成为我未来Android开发道路上的重要参考。
评分这本书,简直是为我量身定做的!《深入剖析Android新特性》的内容组织非常有条理,作者的讲解风格深入浅出,让我这种已经有一定Android开发经验,但又想紧跟技术步伐的开发者,找到了学习的“钥匙”。特别是在“安全与隐私”这个章节,以前总觉得Android的权限管理已经很复杂了,但这本书让我看到了新的维度。比如,对于“照片和视频访问”的新权限模型,作者不仅解释了它的引入背景,更详细剖析了它对用户隐私保护带来的巨大提升,并指导我们如何在代码中正确处理这种精细化的权限授予。此外,书中对Jetpack Compose在UI开发中的新特性也有很深入的分析,比如新的布局API、动画效果的实现,以及如何利用Compose构建更具响应性和可访问性的用户界面。作者并没有止步于Compose的基础使用,而是深入探讨了Compose在性能优化、状态管理以及与传统View混合使用的最佳实践。我还喜欢书中对“开发者工具”的介绍,特别是对Android Studio新版本中那些鲜为人知但功能强大的调试和分析工具的挖掘,让我感到自己的开发效率可以得到质的飞跃。作者的专业度和对细节的把控都令人钦佩,他能够在众多纷繁的新特性中,精准地抓住最核心、最值得学习的部分,并以最有效的方式呈现出来。
评分读完《深入剖析Android新特性》后,我最大的感受是,作者是一位真正懂Android的开发者,而且是一位极富教学热情的技术布道者。他没有选择堆砌枯燥的API文档,而是围绕“新特性”这个核心,构建了一个个引人入胜的知识体系。比如,在讲解性能优化方面,他没有停留在“避免内存泄漏”这种老生常谈的话题上,而是深入探讨了Android 13(或其他新版本)引入的新的调度机制、后台执行策略,以及如何利用新的 Profiling 工具来精确定位性能瓶颈。我特别欣赏他对“可观测性”(Observability)这个概念的引入,通过讲解新的日志API、Tracing工具,以及如何在应用中集成这些工具,来帮助开发者更好地理解和调试复杂应用。这本书最大的亮点之一,在于它能够引导读者进行“思考式”学习。作者在讲解每个新特性时,不仅仅是告诉你“怎么做”,更重要的是“为什么这么做”,以及“在什么场景下最适合使用”。例如,当他讲解到新的网络连接API时,他会详细分析旧API的局限性,以及新API在效率、功耗和稳定性方面的改进。书中还提供了一些“陷阱”提示,提醒开发者在实践中可能遇到的坑,以及如何规避。这种“防患于未然”的写作风格,极大地降低了开发者的试错成本。我强烈推荐给所有希望在Android技术前沿保持敏锐嗅觉的开发者。
评分啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯
评分安卓新特性好好阅读学习
评分希望对自己有帮助,目录挺不错。
评分啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯啦咯
评分此用户未填写评价内容
评分书看着不错,希望有所提升!好好学习天天向上
评分618买的,正好有活动,感觉买的很划算,希望以后这样的活动多多
评分618买的,正好有活动,感觉买的很划算,希望以后这样的活动多多
评分此用户未填写评价内容
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.teaonline.club All Rights Reserved. 图书大百科 版权所有