深入剖析Android Framework:源码分析与实战指南

需积分: 0 0 下载量 186 浏览量 更新于2024-07-21 收藏 2.79MB PDF 举报
"深入理解Android 卷I 样章,作者邓凡平,主要探讨Android Framework层、Native层和Application层的源代码分析,针对实际应用开发需求,覆盖了Android开发者需要掌握的关键知识点。" 深入理解Android系统是每个专业开发者的重要任务,这本书的卷I旨在通过情景分析的方式,让读者对Android的内部运作有更深入的了解。书中涉及的内容丰富多样,不仅限于某一特定领域,而是涵盖了从系统启动到多媒体处理的多个核心环节。 首先,第1章的准备工作至关重要,它引导读者理解Android系统架构,介绍如何有效地阅读和理解源代码,这对于后续的分析工作至关重要。了解系统架构有助于开发者把握整个Android系统的脉络。 第2章深入到JNI(Java Native Interface)技术,通过分析MediaScanner的实现,展示了如何在Java和C/C++之间进行交互,这对于开发涉及底层性能优化的应用至关重要。 第3章剖析了init进程和init.rc文件,揭示了Android系统启动过程中Zygote和属性服务的启动原理,这部分内容对于理解系统初始化过程及其优化非常关键。 第4章详细探讨了Zygote、SystemServer以及虚拟机HeapSize的管理,还涉及Watchdog的工作机制,这些都是优化系统性能和解决内存问题时需要理解的基础。 第5章则关注常用类和同步机制,如sp、wp、RefBase、Thread、同步类、Handler和Looper,这些都是Android多线程编程的核心工具,对于编写高效、稳定的代码至关重要。 第6章深入Binder机制,Binder是Android进程间通信(IPC)的基础,通过分析MediaServer,读者可以理解其在系统中的重要作用。 第7章聚焦音频系统,特别是AudioTrack、AudioFlinger和AudioPolicyService,这些组件构成了Android音频处理的基石,对于开发音视频应用开发者来说极具价值。 第8章讲解Surface系统,包括Surface与Activity、SurfaceFlinger的关系,以及帧数据传输和LayerBuffer的工作流程,对于理解和优化图形渲染效率极其重要。 第9章深入Vold和Rild,这两个组件涉及存储管理和网络通信,同时也探讨了Phone设计的优化,对于系统级开发者来说是不可或缺的知识。 最后,第10章再次回到MediaScanner,进一步分析其工作原理,为多媒体内容管理提供了深入洞察。 这本书适合已有一定基础的Android应用开发工程师和系统工程师,通过学习,读者可以提升对Android系统深层次的理解,解决实际开发中的复杂问题。
2014-04-30 上传
第1章 阅读前的准备工作 1.1 系统架构 1.1.1 Android系统架构 1.1.2 本书的架构 1.2 搭建开发环境 1.2.1 下载源码 1.2.2 编译源码 1.3 工具介绍 1.3.1 Source Insight介绍 1.3.3 Busybox的使用 1.4 本章小结 第2章 深入理解JNI 2.1 JNI概述 2.2 学习JNI的实例:MediaScanner 2.3 Java层的MediaScanner分析 2.3.1 加载JNI库 2.3.2 Java的native函数和总结 2.4 JNI层MediaScanner的分析 2.4.1 注册JNI函数 2.4.2 数据类型转换 2.4.3 JNIEnv介绍 2.4.4 通过JNIEnv操作jobject 2.4.5 jstring介绍 2.4.6 JNI类型签名介绍 2.4.7 垃圾回收 2.4.8 JNI中的异常处理 2.5 本章小结 第3章 深入理解init 3.1 概述 3.2 init分析 3.2.1 解析配置文件 3.2.2 解析service 3.2.3 init控制service 3.2.4 属性服务 3.3 本章小结 第4章 深入理解zygote 4.1 概述 4.2 zygote分析 4.2.1 AppRuntime分析 4.2.2 Welcome to Java World 4.2.3 关于zygote的总结 4.3 SystemServer分析 4.3.1 SystemServer的诞生 4.3.2 SystemServer的重要使命 4.3.3 关于 SystemServer的总结 4.4 zygote的分裂 4.4.1 ActivityManagerService发送请求 4.4.2 有求必应之响应请求 4.4.3 关于zygote分裂的总结 4.5 拓展思考 4.5.1 虚拟机heapsize的限制 4.5.2 开机速度优化 4.5.3 Watchdog分析 4.6 本章小结 第5章 深入理解常见类 5.1 概述 5.2 以“三板斧”揭秘RefBase、sp和wp 5.2.1 第一板斧--初识影子对象 5.2.2 第二板斧--由弱生强 5.2.3 第三板斧--破解生死魔咒 5.2.4 轻量级的引用计数控制类LightRefBase 5.2.5 题外话-三板斧的来历 5.3 Thread类及常用同步类分析 5.3.1 一个变量引发的思考 5.3.2 常用同步类 5.4 Looper和Handler类分析 5.4.1 Looper类分析 5.4.2 Handler分析 5.4.3 Looper和Handler的同步关系 5.4.4 HandlerThread介绍 5.5 本章小结 第6章 深入理解Binder 6.1 概述 6.2 庖丁解MediaServer 6.2.1 MediaServer的入口函数 6.2.2 独一无二的ProcessState 6.2.3 时空穿越魔术-defaultServiceManager 6.2.4 注册MediaPlayerService 6.2.5 秋风扫落叶-StartThread Pool和join Thread Pool分析 6.2.6 你彻底明白了吗 6.3 服务总管ServiceManager 6.3.1 ServiceManager的原理 6.3.2 服务的注册 6.3.3 ServiceManager存在的意义 6.4 MediaPlayerService和它的Client 6.4.1 查询ServiceManager 6.4.2 子承父业 6.5 拓展思考 6.5.1 Binder和线程的关系 6.5.2 有人情味的讣告 6.5.3 匿名Service 6.6 学以致用 6.6.1 纯Native的Service 6.6.2 扶得起的“阿斗”(aidl) 6.7 本章小结 第7章 深入理解Audio系统 7.1 概述 7.2 AudioTrack的破解 7.2.1 用例介绍 7.2.2 AudioTrack(Java空间)分析 7.2.3 AudioTrack(Native空间)分析 7.2.4 关于AudioTrack的总结 7.3 AudioFlinger的破解 7.3.1 AudioFlinger的诞生 7.3.2 通过流程分析AudioFlinger 7.3.3 audio_track_cblk_t分析 7.3.4 关于AudioFlinger的总结 7.4 AudioPolicyService的破解 7.4.1 AudioPolicyService的创建 7.4.2 重回AudioTrack 7.4.3 声音路由切换实例分析 7.4.4 关于AudioPol