Android内核剖析
Android内核剖析和 Mac OS X,因此,该部分介绍 Linux的一些基础知识,以及在 Linux上管理源码的T具git第2部分,内核篇。 Android内核的核心就是一套GU系统。该部分主要包含视图的内部工作机制及视图管理器( Window Manager Service)和 Activity管理器( Activity Manager Service)的内部工作机制第3部分,系统篇。内核不等于操作系统, Android是-个操作系统,因此,除了内核之外,还必须定义一套系统架构,比如应用程序的格式定义,以及应用程序如何被安装和卸载、输入法框架等,有时候这部分内容也叫做外壳(Shel)。第4部分,编译篇。 Android相关的源码据说超过1000万行,这套源码由众多的子项冒组成,因此,联合编译这些子项日就是一个复杂的问题。 Android源码中定义了一套编泽框架,该框架可以方便地编译不同类型的子项目,比如一个动态链接库项目、Jar包项目等。了解该套编译架构后就可以自由地在源码中添加需要的了项目,并控制系统中已有子项目的编译过程。第5部分,硬件驱动篇。 Android目前最成功的产品当然就是智能手机,但同时由于 Android开源的特点,也就可以应用于其他一些特定的产品,比如玩具、学习机、税控机、门禁系统等,因此,该部分介绍了一款硬件开源的 Android开发板卡。本来,该部分内容还包括 Openg框架、多媒体框架及 Android硬件抽象层(HAL)三方面内容,但由于出版时间原因,暂未包含,本书下版将包含这些内容。读者对象本书适合于五类读者。第类,开发过 Android应用程序的工程师。如果你刚丌始接触 Android,那么这本书可能会很难理解,建议去 Android官方网站用两周的时间学习基本的 Android应用程序开发,或者去看本人早期创作的《 Android程序设计》一书,但要带着怀疑的态度去读第二类, Android技术相关的产品经理。对于产品经理而言,了解项目的技术难度及技术可行性,将有助于制定产品开发时间表。虽然产品经理不需要详细了解技术如何实现,但起码应该知道产品技术的复杂度。第三类,有扎实的开发经验,却末曾接触过 Android的开发人员。系统框架的表面尽管各有千秋,但其内涵却不会差别太大,对于有扎实开发经验的朋友而言,只需要重新了解一下 Android中的新概念,就能快速地将这些新概念与已有的知识融合起来,这样,使可以节省大量的时间第四类,正在基于iOS开发的工程师。本人最近正在研究iOS的开发,令人惊讶的是i0s和Android开发框架是如此相似。 Object-C语言和Java语言的语法量然差别较大,但其思想却很相似,包括单继承、动态性、内存回收机制等。S和 Android的 Framework也惊人相似,比如都使用 sqlite进行数据存储,也使用 Preference进行参数存储;视图系统的AP接冂也类似的地方,都可以使用Openg(L进行界面绘制。当然,OS和 Android视图系统还是有一定的差别,比如s中每一个iew对象都有两个 Layer,从而可以方便地使用 OpenGL绘制任何一个vew对象,而 Android却只有个,所以 Android的动画效果没有iOS那样灵活。遗憾的是iOs不是开源的,因此,我们没有机会去了解OS内部的详细机制,不过既然OS和 Android有这么多相似的地方,那么就可以通过了解Android的内核机制去思考iOs的一些特性。第五爻,想要编写一个GUI子系统的学生。 Android虽然更多地用于手机产品,但其内部的GUl子系统的实现却是一种通用的思路,因此,可以完全抛开 Android的系统特性,而仅仅去研究其GUl子系统的实现思路,有了这种思路就可以使用各种语言设计自己想要的GUI子系统欢迎朋友们与我进行进一步的交流,我的E-mail是yuandanke@gmail.com。作者VIn20|CONTENTS目录第1部分基础篇第1章 Linux基础1.1 Linux文件系统概述B+t+.12 Linux启动过程………1.3常用 Linux命令…14Shel脚本备忘…14.1获取输入1014.2变量定义………………………1014.3条件判断………………14.4 while0.do.done语句……1214.5for循坏……1346函数14147常用内置符号常量151.5Make脚本备忘………151.5.1一个简单的 Makefile文件16152变量的定义与赋信185.3条件控制语句……1.54宏(函数)定义………191.5.5内置符号和变量……1.5.6模板日标( Pattern target)…………15.7目标特定的变量赋值( Target-specific variable)15.8常用选项第2章Java基础………262.1类装载器 DexClassLoader……262.1.1 Dex Classloader的调用方法21.2基于类装载器设计一种“插件”架构22JNI调用机制322.1Java访问C3322.2C访问Java5223在C中使用持久对象2.3异步消息处理线程……23.1实现异步线程的一般思路…………23.2 Android中异步线程的实现方法第3章 Android源码下载及开发环境配置…3.1Mac系统的配置……………44硬盘格式的配置3.1.2 port的用法福日32在 Linux中配USB连接4633在 Eclipse中调试 Framework…3.1一段防止下载异常的脚本43.3.2调试 Framework中的代码第4章使用gt5141安装git524.2gt仓库管理4.2.1仓库的组成4.2.2创建仓库…………544,2.3分支管埋43 git merge用法44 git rebase用法845 git cherry-pick用法…61git reset用法………4.7恢复到无引用提交48 git remote用法…49git配置……………49.1基本信息配置…49.21nrge、diff工具置…684.9.3 gitignore配置……410同时使用git和svn71411其他gt常用命令示例VI.第7章理解 Context7.1 Context是什么……72一个应用程序中包含多少个 Context对象……73 Context相关类的继承关系……………997.4创建 Context10074.1 Application对应的 Context…74.2 Activity对应的 Context…………………102743 Service对应的 Context103744 Context之间的关系………104第8章创建窗口的过程………1068.1窗口的类型…1068.2 token变量的含义108821 Activity中的 mOken108822 Window中的 mApp Token………109823 Window Manager: LayoutParams中的 token…语由1098.2.4Vew中的token11083创建应用窗口84创建子窗口………1218.4.1 Dialog的创建84.2 Popup Window的创建1268.4.3 Contextmenu的创建……1284.4 OptionMenu的创建……………………13285系统窗口 Toast的创建1368.5.1 Toast调用流稈……137852 Toast添加窗口…………………………86创建窗口示例139第9章 Framework的启动过程…………14291 Framework运行环境综述14292 Dalvik虚拟机相关的可执行程序1439.2.1 dalvik92.2d92.3 app process……14593 zygote的启动……14731在 init.rc中配置 zygote启动参数147gl2 git check4.1.3 git log…4.11.4 git commid4. 11.5 git cherry-pick sha-14.11.6 git merge-base744.1.7 git diff master.dev…………744.11.8git754.11.9 git diff.……754.1.10gitm…54.111 git tag…第2部分内核篇第5章 Binder…785.1 Binder框架52设计 Servier端8053 Binder客户端设计8154使用 Service类8254.1获取 Binder对象………82542保证包裹内参数顺序ad工具的使用5.5系统服务中的 Binder对象885.5. Service Manager管理的服务552理解 Manager第6章 Framework概述………926.1 Framework框架6.1.1服务端……12客户端6.1.3 Linux驱动…………………62APK程序的运行过程……9463客户端中的线程…9464几个常见问题9564. Acitivity之间如何传递消息(数据)…642窗口相关的概念IX932启动 Socket服务端口………1489.33加载 preload-asss于41519.34加域 preload- resources…15293.5使用folk启动新的进程4 System Server进程的启动………………………155941启动各种系统服务线程…………………………156942启动第一个 Activity…158第10章AmS内部原理16010. Activity调度机制…………………………………………………16010.1.1几个重要概念……1611(.1.2AmS中的一些重要调度相关变量16310.1.3 startActivityO的流程10.14 slopAclivily Locked停上 Activity18310.1.5按“Home”键回到桌面的过程10.1.6按“Back”键回到上一个 Activity……18710.1.7长按“Home”键………1018 Activity生命期的代码含义……19010.2内存管理19210.2.1关闭而不退出………19210.2.2 Android与 Linux的配合申中果…19410.23各种关闭程序的过程19610.24释放内存详解……19710.3对AmS中数据对象的理解…………………21110.3.1常见的对象操作…21210.3.2理解 Activit21303.3 Android多进程吗,是同时在运行多个应用程序吗21310.4 Activity Group的内部机制21410.4.1 TabActivity使用时的类关系结构0.42 LocalActivityManager的内部机刮21710.4.3 Activity Group内部的 Activity生命期控制220第11章从输入设备中获取消息221111 Android消息获取过程概述…2111.2与消息处理相关的源码文件分布………22313创建 InputDispatcher线程………226.XI.114把窗口信息传递给 InputDispatcher线程227115创建 Inputchannel…………………2291.6在WmS中注册 InputChannel23211.7在客户进程中注册 InputChannel………118WmS中处理消息的时机234119客户窗凵获取消息的时机…………………235第12章屏幕绘图基础23712.1绘制屏幕的软件架构237122Java客户端绘制调用过程239123C客户端绘制过程24L124Jaa客户端绘制相关类的关系着4●垂音244第13章VeW工作原理24713.1导论………247132用户消息类型………13.2.1按键消息…1322触摸消息25013.3按键消息派发过程……25213.3.1 Key Event Dispatcher State中的长按监测25213.32按键消息总体派发过程254133.3根视图内部派发过程……+2563.4 Activity内部派发过程133.5vew类内部的 onKeyDown和 onKeyUpO……………2601336 Activity中的 onKey Downo和 onKeyUp()……1337 Phone window内部消息派发过程262134按键消息在WmS中的派发过程13.5触摸消息派发过程13.5.1触摸消息总体派发过稈…26613.52根视图内部消息派发过程2671353 View Group内部消息派发过程13.54各种消息监测的基本实现方法27113.55ew内默认消息派发过程……27213.6导致View树重新遍历的时机27413.6.1状态的分类………13.6.2导致Ⅴiew树重新遍历的总体诱因图…………5XII
下载地址
用户评论