Android的设计与实现

出版时间:2013-4  出版社:机械工业出版社  作者:杨云君  
Tag标签:无  

前言

前言为什么要写本书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的设计与实现:卷1》是Android应用开发工程师和Android系统工程师进阶修炼的必读之作。它由资深Android内核专家亲自执笔,从源代码角度,系统、深入、透彻剖析Android系统框架层(Framework)的设计思想和实现原理,为Android应用工程师和系统工程师解决实际工作中的各种难题提供了原理性的指导。为了降低读者的阅读成本,《Android的设计与实现:卷1》使用了大量简单的UML类图和序列图来展示类的层次结构和方法的调用流程,使读者能迅速读完《Android的设计与实现:卷1》并领会其精髓!
海报:

作者简介

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

书籍目录

前言第一部分 基础篇第1章 Android体系结构及源代码阅读环境搭建 21.1 Android发展过程 21.2 Android体系结构 31.2.1 静态视角的体系结构 31.2.2 动态视角的体系结构 71.3 Android源码下载和编译 71.3.1 搭建开发环境 81.3.2 下载Android上层系统源代码 91.3.3 下载指定模块源码 101.3.4 下载 Android Linux Kernel源码 111.3.5 编译Android上层系统源码 111.3.6 编译指定模块源码 121.4 Android源码结构 141.5 Android源码开发工具的配置和使用 151.5.1 配置Android SDK  151.5.2 用Eclipse开发和调试源代码 161.5.3 用Source Insight阅读源代码 191.6 NDK开发环境配置 201.7 本章小结 21第2章 框架基础JNI 222.1 JNI在Android系统中所处的位置 222.2 JNI框架层实例分析 232.2.1 Log系统Java层分析 242.2.2 Log系统的JNI层 242.2.3 Log系统的JNI方法注册 252.3 JNI总管:JNIEnv 272.4 在Java中调用JNI实现方法 292.4.1 Java数据类型与JNI数据类型转换 292.4.2 JNI方法命名规则 302.4.3 JNI方法签名规则 312.5 JNI操作Java对象 322.5.1 访问Java对象 322.5.2 操作成员变量(域)和方法 332.5.3 全局引用、弱全局引用和局部引用 342.6 JNI异常处理 362.7 JNI应用层实例分析 382.7.1 Java层分析 382.7.2 JNI层代码和异常处理 392.8 本章小结 42第二部分 启动篇第3章 Android启动过程的底层实现 443.1 Android正常模式启动流程 443.2 Kernel启动过程 443.2.1 内核引导阶段 453.2.2 内核启动阶段 463.3 init进程的执行过程 493.4 init.rc文件解析过程 533.4.1 Android初始化语言 533.4.2 init.rc的内容 563.4.3 解析配置文件 573.4.4 解析Service 603.4.5 解析Action 633.5 触发并启动Action和Service 653.5.1 触发Action 653.5.2 执行Action 663.5.3 启动Service 703.5.4 init对属性服务的处理 713.6 init循环监听处理事件 753.7 本章小结 77第4章 Android 启动过程的上层实现 784.1 第一个Dalvik虚拟机zygote 794.1.1 zygote的配置 794.1.2 如何执行zygote服务程序 804.2 ZygoteInit的启动过程 824.2.1 创建Dalvik虚拟机 834.2.2 注册JNI方法 854.2.3 开启Java世界 884.3 ZygoteInit开启Java世界的五部分工作 894.3.1 注册zygote的Socket 894.3.2 预加载Class资源和Resource资源 894.3.3 启动system_server进程 924.3.4 执行MethodAndArgsCalle的run方法 984.3.5 执行runSelectLoopMode方法 1024.4 zygote处理Home启动请求 1044.5 本章小结 112第三部分 Binder篇第5章  Binder在Native框架层的实现 1145.1 Binder与C/S体系结构概述 1145.2 servicemanager进程的启动过程 1155.2.1 初始化Binder通信环境 1165.2.2 注册上下文管理者 1185.2.3 等待接收并处理IPC通信请求 1205.3 Server的启动和Service的注册过程 1285.3.1 创建ProcessState对象 1295.3.2 获取servicemanager的代理对象 1315.3.3 注册Service 1395.3.4 Server进程开启线程池 1455.4 Client端使用服务代理对象 1465.5 服务代理与服务通信 1495.6 本章小结 152第6章 Binder在Java框架层的实现 1536.1 Java系统服务的创建过程 1536.1.1 创建JavaBBinderHolder对象 1556.1.2 JavaBBinder的作用 1566.1.3 gBinderOffsets结构体解析 1566.2 Java系统服务的注册过程 1596.2.1 调用BinderInternal.getContextObject方法 1606.2.2 调用ServiceManagerNative.asInterface方法 1656.2.3 调用ServiceManagerProxy.addService方法注册服务 1676.3 Client端获取服务代理 1696.3.1 获取服务的BinderProxy 1706.3.2 构造服务的Proxy对象 1726.3.3构造服务管理者对象 1736.4Client端调用Java系统服务的方法 1746.5统一的通信接口AIDL 1776.5.1AIDL实例 1776.5.2AIDL语法 1806.5.3处理自定义数据类型的传递 1816.6本章小结 182第四部分 消息通信篇第7章线程消息通信与异步处理 1847.1什么是Looper线程 1847.2第一步:Looper线程准备阶段 1857.2.1创建Java层的Looper对象 1867.2.2创建Java层的MessageQueue-对象 1867.2.3创建Native层的NativeMessageQueue和Looper对象 1877.2.4NativeMessageQueue关联到MessageQueue 1897.3第二步:创建消息处理器并发送消息 1907.3.1Handler的创建和初始化 1907.3.2Message的创建和初始化 1137.3.3消息的发送过程 1927.4第三步:Looper线程循环阶段 1987.4.1记录并获取当前线程身份信息 1987.4.2循环监听消息 1997.4.3分发消息到处理器 2057.4.4回收消息并更新消息池 2097.5异步任务类AsyncTask 2107.5.1AsyncTask的实现 2117.5.2AsyncTask的执行 2147.6本章小结 223第五部分 Package Manager篇第8章Package Manager 的机制与实现 2268.1  Package Manager体系结构 2278.1.1三层体系结构 2278.1.2三层之间的关系 2288.2PackageManagerService的启动过程 2318.2.1创建并初始化Settings对象 2328.2.2获取系统默认配置 2368.2.3启动PackageHandler 2378.2.4创建data目录并初始化UserManager 2398.2.5解析系统permission和feature信息 2428.2.6解析packages文件 2458.2.7dexopt优化判定 2478.2.8启动FileObserver监控APK文件的目录 2508.2.9调用scanDirLI方法扫描并安装APK包 2528.2.10更新packages文件 2538.3 PackageManagerService启动过程使用的核心组件 2548.3.1Java层的Installer 2558.3.2Installd中的命令 2578.4本章小结 260第9章 APK的安装过程 2619.1 通过scanDirLI方法安装APK 2619.1.1 创建PackageParser 2629.1.2 解析AndroidManifest.xml文件 2639.1.3 过滤PackageParser.Package类型的pkg对象 2709.1.4 解析和安装pkg 2749.2 使用adb命令安装应用程序 2829.2.1 通过消息机制安装指定的APK 2839.2.2 调用handleStartCopy方法处理安装操作 2869.2.3 调用handleReturnCode方法处理返回结果 2909.3  本章小结 293第六部分 Activity Manager篇第10章 Activity Manager的机制与实现 29610.1 Activity Manager概述 29610.2 ActivityManagerService在系统启动阶段的主要工作 29710.3 第一阶段:启动ActivityManagerService 29910.3.1 启动AThread线程 30010.3.2 创建ActivityThread对象 30210.3.3 创建ActivityStack类 30910.3.4 调用startRunning方法 31010.4 第二阶段:调用setSystemProcess方法 31010.4.1 查询并处理ApplicationInfo 31210.4.2 创建并初始化ProcessRecord 31310.5 第三阶段:调用install-SystemProviders方法 31510.5.1 查询Content Provider 31610.5.2 安装Content Provider 31710.6 第四阶段:调用systemReady方法 32310.6.1 发送ACTION_PRE_BOOT_COMPLETED广播 32310.6.2 清理预启动的非persistent进程 32510.6.3 读取Settings配置 32610.6.4 运行Runnable回调接口 32710.6.5 启动persistent应用程序和Home 32810.7 本章小结 329第11章 应用程序Activity的启动和调度 33011.1 启动应用程序Activity时在Client端的执行流程 33011.2 启动应用程序Activity时在Server端的执行流程 33411.2.1 预启动 33411.2.2 暂停 34811.2.3 启动应用程序进程 35611.2.4 加载应用程序Activity 36211.2.5 显示Activity 36911.2.6 Activity Idle状态的处理过程 37911.2.7 停止源Activity 38211.3 本章小结 387第12章 Activity Manager进程 管理 38812.1 LRU weight机制 38812.2 OOM adj机制 39112.2.1 更新OOM adj值 39212.2.2 OOM adj的计算过程 40312.3 Low Memory Killer机制 41412.3.1 OOM adj等级和最小内存阈值 41412.3.2 LM Killer机制的实现 41712.4 本章小结 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快速发展了五年多,势头依然强劲。为了开发更强大的APP,众多开发者迫切需要更深入了解Android框架的机制。云君这本书真可谓雪中送炭,揽卷读之,欲罢不能!——Lordhong资深移动开发工程师(目前在美国硅谷山景城)本书立足于对Android框架层技术的深入理解,融合了项目开发中积累的丰富实战经验,深入浅出,理解其“道”,习练其“术”,既可读其入门,亦可研习精深。——张帅中科院计算所本书通过分析源代码系统地剖析了Android框架层的核心技术,无论是Android开发的初学者,还是资深的程序员,都可以通过此书从一个全新的视角认识Android系统,并从中得到启发。——严林中科院计算所Android是当前移动开发领域的热点,云君这本书对Android系统框架层的设计思想和实现原理做了深入的分析和探讨,是Android开发工程师进阶修炼不可多得的参考资料。——高剑林腾讯感谢云君写的这本书,对于我这样一直研究Linux内核的人来说,真的能从Android系统的设计与实现中有所领悟。书中对Android框架层的剖析条理清晰,系统透彻,体现了云君的功力深厚,更体现了其确实在用心总结。——孙子荀腾讯有幸被邀请阅读本书初稿,本书作者对Android的通透理解令人震撼。国内解读Android系统原理的图书众多,本书却在深层次上独辟蹊径,实在难得。——张洪阿里巴巴

编辑推荐

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

名人推荐

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

图书封面

图书标签Tags

评论、评分、阅读与下载


    Android的设计与实现 PDF格式下载


用户评论 (总计17条)

 
 

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

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7