- 浏览: 87535 次
文章分类
最新评论
Android博客文章整理
整理的内容并不是简单地复制了博客上的文章。博客文章由于发表得比较匆忙,不到六个月的时间,一共发表了50篇原创文章,平均每周发表两篇,而且都是利用工作之余时间来发表,因此,很多内容都不够全面、深入和细致。例如,在分析Binder进程间通信机制的一系列博客文章中,并没有提及到Binder对象的引用计数技术、死亡通知机制等重要内容,对Binder驱动中的内存管理也分析得不够系统;又如,在分析Android应用程序的安装过程时,没有提及到系统是如何为应用程序分配Linux用户ID以及Linux用户组ID。整理的内容对博客文章中不够全面、学入和细致的地方进行了相应的补充。此外,博客文章也会出现一些错误。例如,在《Android应用程序键盘(Keyboard)消息处理机制分析》这篇博客文章中,网友@foresee321指出了注册系统当前激活窗口的过程有误。整理的内容也对这些错误作出了修正。博客文章不够全面、深入、细致以及有误的地方不能一一而足,不过它们在重新整理的内容中都得到了解决。
整理的内容从初学者的角度来组织,由浅入深、自下而上地对Android系统的源代码进行了分析,目录结构如下所示:
- 第一篇初识Android系统...........................................6
- 第一章准备知识..............................................7
- 1.1准备Linux内核基础知识................................7
- 1.2准备Android应用程序基础知识..........................8
- 1.3下载、编译和运行Android源代码........................8
- 1.3.1安装Git工具....................................9
- 1.3.2安装JavaSDK...................................9
- 1.3.3安装其它工具包.................................9
- 1.3.4安装repo工具...................................9
- 1.3.5下载Android源代码..............................9
- 1.3.6编译Android源代码..............................10
- 1.3.7运行Android模拟器..............................11
- 1.4下载、编译和运行Android内核源代码....................12
- 1.4.1下载Android内核源代码..........................12
- 1.4.2修改Makefile文件...............................13
- 1.4.3编译Android内核源代码..........................13
- 1.4.4运行Android模拟器..............................14
- 1.5开发第一个Android应用程序............................14
- 1.6编译和打包单个Android应用程序模块....................17
- 1.6.1导入编译单个模块的mmm命令......................17
- 1.6.2编译单个Android应用程序模块....................18
- 1.6.3重新打包Android系统镜像文件....................18
- 第二章硬件抽象层............................................19
- 2.1开发Android硬件驱动程序..............................20
- 2.1.1实现内核驱动程序模块...........................21
- 2.1.2修改内核Kconfig文件............................27
- 2.1.3修改内核Makefile文件...........................28
- 2.1.4编译内核驱动程序模块...........................28
- 2.1.5验证内核驱动程序模块...........................29
- 2.2开发C可执行程序验证Android硬件驱动程序...............30
- 2.3开发Android硬件抽象层模块............................32
- 2.3.1硬件抽象层编写规范.............................32
- 2.3.1.1模块文件的命令规范.......................32
- 2.3.1.2结构体定义规范...........................33
- 2.3.2实现硬件抽象层访问接口.........................35
- 2.3.3硬件抽象层模块加载过程分析.....................39
- 2.3.4处理硬件设备访问权限问题.......................42
- 2.4开发Android硬件访问服务..............................44
- 2.4.1定义硬件访问服务接口...........................44
- 2.4.2实现硬件访问服务...............................45
- 2.4.3实现硬件访问服务的Java本地接口方法............46
- 2.4.4启动硬件访问服务...............................49
- 2.5开发Android应用程序来调用硬件访问服务................50
- 第三章智能指针..............................................55
- 3.1轻量级指针...........................................57
- 3.1.1实现原理分析...................................57
- 3.1.2使用实例分析...................................59
- 3.2强指针和弱指针.......................................61
- 3.2.1强指针的实现原理分析...........................61
- 3.2.2弱指针的实现原理分析...........................68
- 3.2.3强指针和弱指针的使用实例分析...................74
- 第二篇Android专用驱动系统.......................................79
- 第四章Logger日志系统........................................80
- 4.1Logger驱动程序.......................................83
- 4.1.1相关数据结构...................................83
- 4.1.2设备初始化过程.................................85
- 4.1.3设备文件打开过程...............................90
- 4.1.4日志读取过程...................................91
- 4.1.5日志写入过程...................................95
- 4.2运行时日志库写入接口.................................100
- 4.3C/C++日志写入接口....................................106
- 4.4Java日志写入接口.....................................110
- 4.5Logcat工具分析.......................................116
- 4.5.1相关数据结构...................................117
- 4.5.2初始化过程.....................................121
- 4.5.3日志读取过程...................................133
- 4.5.4日志输出过程...................................137
- 第五章Binder进程间通信系统..................................149
- 5.1Binder驱动程序.......................................151
- 5.1.1相关数据结构...................................152
- 5.1.2设备初始化过程.................................172
- 5.1.3设备文件打开过程...............................173
- 5.1.4设备文件内存映射过程...........................174
- 5.1.5内核缓冲区管理.................................181
- 5.1.5.1分配内核缓冲区...........................181
- 5.1.5.2释放内核缓冲区...........................187
- 5.1.5.3查询内核缓冲区...........................192
- 5.2Binder进程间通信库...................................193
- 5.3Binder进程间通信应用实例.............................197
- 5.4Binder对象引用计数技术...............................205
- 5.4.1Binder本地对象的生命周期.......................206
- 5.4.2Binder实体对象的生命周期.......................210
- 5.4.3Binder引用对象的生命周期.......................213
- 5.4.4Binder代理对象的生命周期.......................218
- 5.5Binder对象死亡通知机制...............................221
- 5.5.1注册死亡接收通知...............................221
- 5.5.2发送死亡接收通知...............................225
- 5.5.3注销死亡接收通知...............................229
- 5.6ServiceManager的启动过程............................232
- 5.6.1打开和映射Binder设备文件.......................234
- 5.6.2注册成为Binder上下文管理者.....................235
- 5.6.3循环等待Client进程请求.........................239
- 5.7ServiceManager代理对象接口的获取过程................245
- 5.8Service的启动过程....................................252
- 5.8.1注册Service组件................................253
- 5.8.1.1封装通信数据为Parcel对象.................254
- 5.8.1.2发送和处理BC_TRANSACTION命令协议.........257
- 5.8.1.3发送和处理BR_TRANSACTION返回协议.........270
- 5.8.1.4发送和处理BC_REPLY命令协议...............282
- 5.8.1.5发送和处理BR_REPLY返回协议...............288
- 5.8.2循环等待Client进程请求.........................291
- 5.9Service代理对象接口的获取过程........................294
- 5.10Binder进程间通信机制的Java实现接口..................302
- 5.10.1获取ServiceManager的Java代理对象接口.........303
- 5.10.2AIDL服务接口解析..............................312
- 5.10.3Java服务的启动过程............................315
- 5.10.4获取Java服务的代理对象接口....................321
- 5.10.5Java服务的调用过程............................324
- 第六章Ashmem匿名共享内存系统................................329
- 6.1Ashmem驱动程序.......................................330
- 6.1.1相关数据结构...................................330
- 6.1.2设备初始化过程.................................332
- 6.1.3设备文件打开过程...............................334
- 6.1.4设备文件内存映射过程...........................336
- 6.1.5内存块的锁定和解锁过程.........................338
- 6.1.6解锁状态内存块的回收过程.......................345
- 6.2运行时库cutils的匿名共享内存接口.....................346
- 6.3匿名共享内存的C++访问接口............................349
- 6.3.1MemoryHeapBase.................................349
- 6.3.1.1Server端的实现...........................349
- 6.3.1.2Client端的实现...........................353
- 6.3.2MemoryBase.....................................359
- 6.3.2.1Server端的实现...........................360
- 6.3.2.2Client端的实现...........................362
- 6.3.3应用实例.......................................364
- 6.4匿名共享内存的Java访问接口...........................370
- 6.4.1MemoryFile.....................................370
- 6.4.2应用实例.......................................375
- 6.5匿名共享内存的共享原理分析...........................386
- 第三篇Android应用程序框架篇.....................................390
- 第七章Activity组件的启动过程................................391
- 7.1Activity组件应用实例.................................391
- 7.2根Activity的启动过程.................................397
- 7.3Activity在进程内的启动过程...........................429
- 7.4Activity在新进程中的启动过程.........................438
- 第八章Service组件的启动过程.................................441
- 8.1Service组件应用实例..................................441
- 8.2Service在新进程中的启动过程..........................448
- 8.3Service在进程内的绑定过程............................460
- 第九章Android系统广播机制...................................483
- 9.1广播应用实例.........................................484
- 9.2广播接收者的注册过程.................................491
- 9.3广播的发送过程.......................................499
- 第十章ContentProvider组件的实现原理........................521
- 10.1ContentProvider组件应用实例........................522
- 10.1.1ArticlesProvider..............................523
- 10.1.2Article.......................................533
- 10.2ContentProvider组件的启动过程......................548
- 10.3ContentProvider组件的数据共享原理..................570
- 10.4ContentProvider组件的数据更新通知机制..............593
- 10.4.1内容观察者的注册过程..........................594
- 10.4.2数据更新的通知过程............................601
- 第十一章Zygote和System进程的启动过程........................609
- 11.1Zygote进程的启动脚本................................609
- 11.2Zygote进程的启动过程................................612
- 11.3System进程的启动过程................................619
- 第十二章Android应用程序进程的启动过程.......................628
- 12.1应用程序进程的创建过程..............................628
- 12.2Binder线程池的启动过程..............................637
- 12.3消息循环的创建过程..................................640
- 第十三章Android应用程序的消息处理机制.......................644
- 13.1创建线程消息队列....................................644
- 13.2线程消息循环过程....................................649
- 13.3线程消息发送过程....................................654
- 13.4线程消息处理过程....................................658
- 第十四章Android应用程序的键盘消息处理机制...................666
- 14.1InputManager的启动过程..............................669
- 14.1.1创建InputManager..............................669
- 14.1.2启动InputManager..............................672
- 14.1.3启动InputDispatcher...........................674
- 14.1.4启动InputReader...............................676
- 14.2InputChannel的注册过程..............................687
- 14.2.1创建InputChannel..............................688
- 14.2.2注册Server端InputChannel......................695
- 14.2.3注册当前激活窗口..............................699
- 14.2.4注册Client端InputChannel......................704
- 14.3键盘消息的分发过程..................................708
- 14.3.1InputReader处理键盘事件.......................708
- 14.3.2InputDispatcher分发键盘事件...................715
- 14.3.3当前激活的窗口获得键盘消息....................727
- 14.3.4InputDispatcher获得键盘事件处理完成通知.......741
- 14.4InputChannel的注销过程..............................745
- 14.4.1销毁应用程序窗口..............................746
- 14.4.2注销Client端InputChannel......................754
- 14.4.3注销Server端InputChannel......................756
- 第十五章Android应用程序线程的消息循环模型...................762
- 15.1应用程序主线程消息循环模型..........................762
- 15.2界面无关的应用程序子线程消息循环模型................764
- 15.3界面相关的应用程序子线程消息循环模型................766
- 第十六章Android应用程序的安装和显示过程.....................775
- 16.1应用程序的安装过程..................................775
- 16.2应用程序的显示过程..................................808
第二篇也是包含三个章节,分析Android系统在Linux内核中的三个专用驱动,分别是日志驱动、Binder驱动和匿名共享内存驱动。毋容置疑,这三个专用驱动构成了Android系统的基础,学习它们对了解Android系统有非常大的帮助。
第三篇包含了十个章节,系统地分析Android应用程序的架构,从应用程序组件、进程、消息和安装四个角度来它进行系统的分析。移动平台最核心的竞争力是运行在它上面的丰富的、高质量的应用程序,而这些丰富的、高质量的应用程序离不开优秀的应用程序基础设施和架构,因此,花了很大的篇幅来介绍Android应用程序的架构,同时它是理解整个Android系统的一个很好切入点,毕竟系统所做的一切都是为使得它上面的应用程序能够好好地运行、好好地为用户服务。
转自:http://blog.csdn.net/luoshengyang/article/details/7409491
相关推荐
Shane撰写了大量关于移动通信行业和评估移动开发平台的文章,这些文章发表在他的个人技术博客上,在业界受到了广泛的关注。Shane获得了加州大学授予的计算机科学专业学士学位。 目录 第一部分 Android平台概览 第1...
乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术 ,以及高性能网络服务器和多核并行开发等也有一定的研究。 目录 封面 -17 ...
这一系列文章,主要是讲自动化埋点又叫无痕埋点,或者字节码插桩技术,写这个系列文章的目的是 偶然间发现,网上关于这方面的博客很少,所以我根据自己的一些实战经验,整理了这个系列的文章。 整个系列不会讲的太...
研究了以前同事留下的适配方案和网神hongyang大牛提供的方案,特整理了两套完美的android屏幕适配工具类,和详细的使用demo,可以根据px适配,也可以根据dp适配。适配原理可参考hongyang的博客,若还不会或者不会用...
2012年最受关注的技术当属移动开发了,而Android又在移动开发中抢了主角,小弟我辛苦整理了800篇非常经典的文章,包含Android学习、进阶、UI、翻译等各类型文章,都是来自国内一大型IT技术博客,由于全部文章不好...
近期做 Android 性能优化,整理了部分性能优化的开发资源,先发布出来,后续会在这个 git仓库 更新,感兴趣的网友可以关注下。 以下是初稿: 网站博客 以组织或人为单位的教程资源: ...androidperformance 博客文章
java版飞机大战源码 Android 学习资料收集 收集整理这份资料灵感来自于 , 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 ...郭神在CSDN中的博客文章非常不错, 书我看了, 非常适合新手
Android收藏夹,整理一些比较有用的精品网站,博客,工具(持续更新) Android相关技术 精品资源 精品博客 热修复 开源框架汇总如下: Dexposed: AndFix: Nuwa: HotFix: DroidFix: Robust: RocooFix: Aceso...
后续,在空闲时间总结了单链表的面试题目,排序算法等知识,目前在整理 Java 集合框架相关源码,相关文章在本人的掘金专栏和简书与CSDN博客都有发布。欢迎关注本项目的朋友去浏览。 > -- 2018年04月12日更新 Java ...
#Android重难点解析 安卓开发中遇到的重难点解析,也包括平常的读书笔记,知识点整理,面试翻译等。 如果你有想提问我的问题,或者是想回答的问题,可以提交问题和要求。 如果对你有帮助的话,请star一下,然后关注...
文章目录1. 前言2. build3. bootable4. framework5. system6. package7. dalvik8. device9. out10....下面是我整理的对android系统的学习总结。...build目录是制定android源码编译规则的地方,详情见如下博客
去年有很多人私信告诉我让说说自定义控件,其实通观网络上的很多博客都在讲各种自定义控件,但是大多数都是授之以鱼,却很少有较为系统性授之于渔的文章,同时由于自己也迟迟没有时间规划这一系列文章,最近想将这一...
java版飞机大战源码 Android 学习资料收集 收集整理这份资料灵感来自于 , 征得同意引用了该资料的开头描述 收集整理这份资料主要帮助初学者学习 ...郭神在CSDN中的博客文章非常不错, 书我看了, 非常适合
高并发大流量如何进行秒杀架构,我对这部分知识做了一个系统的整理,写了一套系统。本GitHub还有许多其他的知识,随时欢迎探讨与骚扰!本文还在更新如果文章出现瑕疵请及时与我联系! 文章还有许多不足,我仍在不断...
此篇博客为整理文章,供大家学习。 1.首先下载commons-net jar包,可以百度下载。 FTP的文件上传和下载的工具类: package ryancheng.example.progressbar; import java.io.File; import java.io....
java版飞机大战源码 Android ...郭神在CSDN中的博客文章非常不错, 书我看了, 非常适合新手, 里面的内容非常棒, 建议结合郭神博客文章一起来学习 作者是李刚, 这本书是基于 Android 5.0 来讲的, 我看过
02.Android博客大汇总 03.开源项目推荐 04.bug分析大汇总 05.技术问题整理 06.数据与算法 07.Python学习笔记 08.Kotlin学习笔记 09.生活博客汇总 10.喜马拉雅汇总 11.知识问答汇总 12.Flutter博客汇总 13.网络协议...
3,Android技能点整理 :backhand_index_pointing_right: :keycap_1: :fire: :keycap_1: :fire: :keycap_1: :backhand_index_pointing_right: :keycap_1: :memo: :keycap_1: :memo: :keycap
于是便萌生了一个想法,自己把学习过程中查阅的优秀文章和开源项目做一个整理。同时也会分享一些自己发现能够提高工作效率的工具。希望这份资料能够给刚开始学习Android的开发者提供一点帮助,节省一些查找资料的...