Android博客文章整理

发表于 5年以前  | 总阅读数:2416 次

经过一年的努力,整理了博客上所有的Android文章,一共划分为三大篇,十六个章节,820页,系统地分析了Android系统的源代码,从Linux内核层、HAL层、运行时库层到应用程序框架层。整理期间困难重重,多次想要放弃,但是看到在四个多月不更新文章的情况下,博客访问量仍节节攀升,从评论中感受到了网友们的热情支持,受到了极大的鼓舞,最终坚持了下来。现在书本的内容已整理好,开始出售,欢迎大家支持!

当当网:**http://product.dangdang.com/23837163.html(满100减20,满200减50)**

京东网:**http://item.jd.com/11838754.html**



亚马逊:http://www.amazon.cn/Android系统源代码情景分析-罗升阳/dp/B019FSLVUU

互动网:**http://product.china-pub.com/4901762**

苏宁易购网:http://product.suning.com/141811846.html

比一比谁更实惠

本书试读,欢迎点击!

本书繁体版已经成功输出到台湾!

整理的内容并不是简单地复制了博客上的文章。博客文章由于发表得比较匆忙,不到六个月的时间,一共发表了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  安装Java SDK...................................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.1  Logger驱动程序.......................................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.3  C/C++日志写入接口....................................106
            4.4  Java日志写入接口.....................................110
            4.5  Logcat工具分析.......................................116
                4.5.1  相关数据结构...................................117
                4.5.2  初始化过程.....................................121
                4.5.3  日志读取过程...................................133
                4.5.4  日志输出过程...................................137
        第五章  Binder进程间通信系统..................................149
            5.1  Binder驱动程序.......................................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.2  Binder进程间通信库...................................193
            5.3  Binder进程间通信应用实例.............................197
            5.4  Binder对象引用计数技术...............................205
                5.4.1  Binder本地对象的生命周期.......................206
                5.4.2  Binder实体对象的生命周期.......................210
                5.4.3  Binder引用对象的生命周期.......................213
                5.4.4  Binder代理对象的生命周期.......................218
            5.5  Binder对象死亡通知机制...............................221
                5.5.1  注册死亡接收通知...............................221
                5.5.2  发送死亡接收通知...............................225
                5.5.3  注销死亡接收通知...............................229
            5.6  Service Manager的启动过程............................232
                5.6.1  打开和映射Binder设备文件.......................234
                5.6.2  注册成为Binder上下文管理者.....................235
                5.6.3  循环等待Client进程请求.........................239
            5.7  Service Manager代理对象接口的获取过程................245
            5.8  Service的启动过程....................................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.9  Service代理对象接口的获取过程........................294
            5.10  Binder进程间通信机制的Java实现接口..................302
                5.10.1  获取Service Manager的Java代理对象接口.........303
                5.10.2  AIDL服务接口解析..............................312
                5.10.3  Java服务的启动过程............................315
                5.10.4  获取Java服务的代理对象接口....................321
                5.10.5  Java服务的调用过程............................324
        第六章  Ashmem匿名共享内存系统................................329
            6.1  Ashmem驱动程序.......................................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.1  MemoryHeapBase.................................349
                    6.3.1.1  Server端的实现...........................349
                    6.3.1.2  Client端的实现...........................353
                6.3.2  MemoryBase.....................................359
                    6.3.2.1  Server端的实现...........................360
                    6.3.2.2  Client端的实现...........................362
                6.3.3  应用实例.......................................364
            6.4  匿名共享内存的Java访问接口...........................370
                6.4.1  MemoryFile.....................................370
                6.4.2  应用实例.......................................375
            6.5  匿名共享内存的共享原理分析...........................386
    第三篇  Android应用程序框架篇.....................................390
        第七章  Activity组件的启动过程................................391
            7.1  Activity组件应用实例.................................391
            7.2  根Activity的启动过程.................................397
            7.3  Activity在进程内的启动过程...........................429
            7.4  Activity在新进程中的启动过程.........................438
        第八章  Service组件的启动过程.................................441
            8.1  Service组件应用实例..................................441
            8.2  Service在新进程中的启动过程..........................448
            8.3  Service在进程内的绑定过程............................460
        第九章  Android系统广播机制...................................483
            9.1  广播应用实例.........................................484
            9.2  广播接收者的注册过程.................................491
            9.3  广播的发送过程.......................................499
        第十章  Content Provider组件的实现原理........................521
            10.1  Content Provider组件应用实例........................522
                10.1.1  ArticlesProvider..............................523
                10.1.2  Article.......................................533
            10.2  Content Provider组件的启动过程......................548
            10.3  Content Provider组件的数据共享原理..................570
            10.4  Content Provider组件的数据更新通知机制..............593
                10.4.1  内容观察者的注册过程..........................594
                10.4.2  数据更新的通知过程............................601
        第十一章  Zygote和System进程的启动过程........................609
            11.1  Zygote进程的启动脚本................................609
            11.2  Zygote进程的启动过程................................612
            11.3  System进程的启动过程................................619
        第十二章  Android应用程序进程的启动过程.......................628
            12.1  应用程序进程的创建过程..............................628
            12.2  Binder线程池的启动过程..............................637
            12.3  消息循环的创建过程..................................640
        第十三章  Android应用程序的消息处理机制.......................644
            13.1  创建线程消息队列....................................644
            13.2  线程消息循环过程....................................649
            13.3  线程消息发送过程....................................654
            13.4  线程消息处理过程....................................658
        第十四章  Android应用程序的键盘消息处理机制...................666
            14.1  InputManager的启动过程..............................669
                14.1.1  创建InputManager..............................669
                14.1.2  启动InputManager..............................672
                14.1.3  启动InputDispatcher...........................674
                14.1.4  启动InputReader...............................676
            14.2  InputChannel的注册过程..............................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.1  InputReader处理键盘事件.......................708
                14.3.2  InputDispatcher分发键盘事件...................715
                14.3.3  当前激活的窗口获得键盘消息....................727
                14.3.4  InputDispatcher获得键盘事件处理完成通知.......741
            14.4  InputChannel的注销过程..............................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系统源代码的下载、编译和运行,Android系统的智能指针,以及Android系统的硬件抽象层。在应用程序框架层的Native代码中,大量的使用了智能指针,因此,在分析Android系统的源代码之前,我们需要对它的智能指针有所了解。学习Android系统的硬件抽象层,能够使得我们迅速掌握Android系统的层次结构。

第二篇也是包含三个章节,分析Android系统在Linux内核中的三个专用驱动,分别是日志驱动、Binder驱动和匿名共享内存驱动。毋容置疑,这三个专用驱动构成了Android系统的基础,学习它们对了解Android系统有非常大的帮助。

第三篇包含了十个章节,系统地分析Android应用程序的架构,从应用程序组件、进程、消息和安装四个角度来它进行系统的分析。移动平台最核心的竞争力是运行在它上面的丰富的、高质量的应用程序,而这些丰富的、高质量的应用程序离不开优秀的应用程序基础设施和架构,因此,花了很大的篇幅来介绍Android应用程序的架构,同时它是理解整个Android系统的一个很好切入点,毕竟系统所做的一切都是为使得它上面的应用程序能够好好地运行、好好地为用户服务。


当当网:http://product.dangdang.com/23837163.html(满100减20,满200减50)

京东网:http://item.jd.com/11838754.html

**亚马逊:**http://www.amazon.cn/Android系统源代码情景分析-罗升阳/dp/B019FSLVUU

互动网:**http://product.china-pub.com/4901762**


苏宁易购网:http://product.suning.com/141811846.html

比一比谁更实惠

本书试读,欢迎点击!

本书繁体版已经成功输出到台湾!

 相关推荐

刘强东夫妇:“移民美国”传言被驳斥

京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。

发布于:1年以前  |  808次阅读  |  详细内容 »

博主曝三大运营商,将集体采购百万台华为Mate60系列

日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。

发布于:1年以前  |  770次阅读  |  详细内容 »

ASML CEO警告:出口管制不是可行做法,不要“逼迫中国大陆创新”

据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。

发布于:1年以前  |  756次阅读  |  详细内容 »

抖音中长视频App青桃更名抖音精选,字节再发力对抗B站

今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。

发布于:1年以前  |  648次阅读  |  详细内容 »

威马CDO:中国每百户家庭仅17户有车

日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。

发布于:1年以前  |  589次阅读  |  详细内容 »

研究发现维生素 C 等抗氧化剂会刺激癌症生长和转移

近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。

发布于:1年以前  |  449次阅读  |  详细内容 »

苹果据称正引入3D打印技术,用以生产智能手表的钢质底盘

据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。

发布于:1年以前  |  446次阅读  |  详细内容 »

千万级抖音网红秀才账号被封禁

9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...

发布于:1年以前  |  445次阅读  |  详细内容 »

亚马逊股东起诉公司和贝索斯,称其在购买卫星发射服务时忽视了 SpaceX

9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。

发布于:1年以前  |  444次阅读  |  详细内容 »

苹果上线AppsbyApple网站,以推广自家应用程序

据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。

发布于:1年以前  |  442次阅读  |  详细内容 »

特斯拉美国降价引发投资者不满:“这是短期麻醉剂”

特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。

发布于:1年以前  |  441次阅读  |  详细内容 »

光刻机巨头阿斯麦:拿到许可,继续对华出口

据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。

发布于:1年以前  |  437次阅读  |  详细内容 »

马斯克与库克首次隔空合作:为苹果提供卫星服务

近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。

发布于:1年以前  |  430次阅读  |  详细内容 »

𝕏(推特)调整隐私政策,可拿用户发布的信息训练 AI 模型

据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。

发布于:1年以前  |  428次阅读  |  详细内容 »

荣耀CEO谈华为手机回归:替老同事们高兴,对行业也是好事

9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI操控无人机能力超越人类冠军

《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。

发布于:1年以前  |  423次阅读  |  详细内容 »

AI生成的蘑菇科普书存在可致命错误

近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。

发布于:1年以前  |  420次阅读  |  详细内容 »

社交媒体平台𝕏计划收集用户生物识别数据与工作教育经历

社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”

发布于:1年以前  |  411次阅读  |  详细内容 »

国产扫地机器人热销欧洲,国产割草机器人抢占欧洲草坪

2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。

发布于:1年以前  |  406次阅读  |  详细内容 »

罗永浩吐槽iPhone15和14不会有区别,除了序列号变了

罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。

发布于:1年以前  |  398次阅读  |  详细内容 »
 目录