当前位置:首页 » 操作系统 » android源码情景分析

android源码情景分析

发布时间: 2022-05-02 19:16:23

1. 怎样评价罗升阳的android系统源代码分析

我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。 先说下我的入门过程: 第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。 第一步,我找到了一本好书《Android的设计与实现 第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。 第二步,学习linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。 第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。 第四步,回头看Android源码,这次一口气看完了《Android的设计与实现 第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》 第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。 第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。 第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。 第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。 最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。 我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。 反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。 转载

2. 深入理解ANDROID怎么样

《深入理解Android》是一本以情景方式对Android的源代码进行深入分析的书。内容广泛,以对Framework层的分析为主,兼顾Native层和Application层;分析深入,每一部分源代码的分析都力求透彻;针对性强,注重实际应用开发需求,书中所涵盖的知识点都是Android应用开发者和系统开发者需要重点掌握的。
全书共10章:
第1章介绍了阅读本书所需要做的准备工作,主要包括对Android系统架构和源码阅读方法的介绍;
第2章通过对Android系统中的MediaScanner进行分析,详细讲解了Android中十分重要的JNI技术;
第3章分析了init进程,揭示了通过解析init.rc来启动Zygote以及属性服务的工作原理;
第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;
第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,同步类,以及Java中的Handler类和Looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;
第6章以MediaServer为切入点,对Android中极为重要的Binder进行了较为全面的分析,深刻揭示了其本质。
第7章对Audio系统进行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。
第8章深入讲解了Surface系统的实现原理,分析了Surface与Activity之间以及Surface与SurfaceFlinger之间的关系、SurfaceFlinger的工作原理、Surface系统中的帧数据传输以及LayerBuffer的工作流程。
第9章对Vold和Rild的原理和机制进行了深入的分析,同时还探讨了Phone设计优化的问题;
第10章分析了多媒体系统中MediaScanner的工作原理。
本书适合有一定基础的Android应用开发工程师和系统工程师阅读。通过对本书的学习,大家将能更深刻地理解Android系统,从而自如应对实际开发中遇到的难题。
作者简介 :
邓凡平,资深Android开发工程师,热衷于Android源代码的研究,对Android的架构设计和实现原理有非常深刻的认识和理解,应用开发经验也十分丰富。目前就职于国内一家领先的Android企业,负责Framework的开发和维护。乐于分享,活跃于CSDN等专业社区,撰写的Android Framework源码的系列文章深受读者欢迎。此外,他对Linux内核、C/C++/Python相关的技术,以及高性能网络服务器和多核并行开发等也有一定的研究。

3. 学习android的framework层的代码,有什么书籍吗

邓凡平的 深入理解Android 和老罗的 Android源码情景分析 你可以看一看





4. 基于android的内核与系统架构源码分析怎么样

如今,大家面对市场中种类繁多的手机必然挑的眼花缭乱。不过,在智能手机占据主要地位的今天,挑选手机的主要因素就是挑选一款性能高的手机操作系统,Android就是其中的一个必然选择。Android系统架构和其操作系统一样,采用了分层的架构。Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。 Android系统架构之应用程序 Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。 Android系统架构之应用程序框架 开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括; * 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。 * 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据 * 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。 * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 * 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 有关更多的细节和怎样从头写一个应用程序,请参考 如何编写一个 Android 应用程序. Android系统架构之系统运行库 1)程序库 Android 包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过 Android 应用程序框架为开发者提供服务。以下是一些核心库: * 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。 * 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。 * Surface Manager - 对显示子系统的管理,并且为多个应用程序提 供了2D和3D图层的无缝融合。 * LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。 * SGL - 底层的2D图形引擎 * 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。 * FreeType -位图(bitmap)和矢量(vector)字体显示。 * SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。 2)Android 运行库 Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。 Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。 Android系统架构之Linux 内核 Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

5. 有出来这么多Android的书吗,还没看过

android的,因为只接触过android,不了解ios。下面的书都是个人或同事看过的,推荐但不必须看 1.Google Android揭秘 [美] W.Frank Ableson Charlie Collins Robi Sen着;张波 高朝勤 杨越 等 译/2010-04-01/人民邮电出版 这本书出得比较早 2010年,介绍的比较全面,入门级读物,不得不佩服老外写得书由浅入深层次感非常好,理论和例子结合也不错,初学的话用它可以先了解个大概,缺点就是书中所sdk太古老了。 2 Google Android SDK开发范例大全(第2版) 余志龙等着,王世江改编/2010-06-01/人民邮电出版社 这本书更像是工具书手册,里面有大量的小例子,2010年的时候还是第一版呢。优点例子丰富,缺点深度不够,不过只是想熟悉api调用方式的话应该也够了。 3.Android应用开发揭秘 杨丰盛着/2010-01-01/机械工业出版社 相比前两本,这本有了深度,内容也丰富了许多,只是我没有看全,优缺点就算了,不过还是推荐看的 4.深入理解Android: 卷1 卷2 邓凡平 着/2012-08-01/机械工业出版社 两本书都不错,对了解系统级原理很有帮助,非常推荐看,就是看这两本书要有点基础,不然很容易觉得太苦涩而放弃 5 Android系统源代码情景分析 罗升阳着/2012-10-01/电子工业出版社 和第4本一样,系统原理的,也非常推荐看,缺点实体书太厚了, 6 精通Android游戏开发 (美)席尔瓦着,王恒等译/2011-02-01/人民邮电出版社 关于游戏的一本,老外写得书趣味性和层次性都不错,重点本地游戏如何移植到Android JNI使用, 就这些吧,现在android的书已经很多了,当然也比较杂,入门的话大多数都可以,再往下优秀的书就不多了,可以去当当,豆瓣这类网站去看书评,销售量,群众的眼睛是雪亮的

6. 怎么分析一个android应用程序的源码

一般工程的AndroidManifest.xml里包含下面代码的是主界面

<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>

找到主界面后就根据主界面的函数找其他界面的入口,一点一点的分析就好了

7. 求大神推荐分析Android4.4 系统源码的资料(最好是书),急求,非常感谢!

可以参考这个网站上的资料http://www.2cto.com/kf/201401/271219.html

8. 此老罗 彼老罗 老罗到底是哪个老罗

此老罗 彼老罗 老罗到底是哪个老罗
锤子的老罗,写博客的写书老罗,视频教程的老罗。视频教程的老罗是罗升阳
罗升阳,Android系统源代码情景分析的作者,结合使用情景,全面、深入、细致地分析Android系统的源代码,涉及到Linux内核层、硬件抽象层、运行时库层、应用程序框架层以及应用程序层。在组织上,本书将上述内容划分为初识Android系统、Android专用驱动系统和Android应用程序框架三大篇章。初识Android系统篇介绍了参考书籍、基础知识以及实验环境搭建;Android专用驱动系统篇介绍了Logger日志驱动程序、Binder进程间通信驱动程序以及Ashmem匿名共享内存驱动程序;Android应用程序框架篇从组件、进程、消息以及安装四个维度来对Android应用程序的框架进行了深入的剖析。

9. Android 是怎么启动一个Acitivity的

可以把启动过程分为client端和server端。
一、client端在启动一个Activity时进行的工作
备注:我个人理解,client端指的是相对后台ActivityManagerService 进程来说的前台用户可见的进程,如在界面启动某一个Activity的就是Laucher进程。这里则以从home桌面启动一个Activity来分析启动过程:
(1)Launcher 这个进程的主线程,在捕获onClick点击事件后,调用 startActivitySafely 方法, startActivitySafely 方法内部调用了
startActivity 方法,然后,startActivity方法进而调用Launcher的父类Activity的 startActivity方法;
(2)Activity.startActivity方法 调用startActivityForResult 方法,传入该方法 的requestCode 参数为 -1 ,表示 Activity启动成功后,不需要执行 Lanucher.onActivityResult方法处理返回结果;startActivityForResult方法内部需要调用 Instrumentation 的 execStartActivity方法。Instrumentation 对象是用于监控应用程序和系统(主要是 Activity Manager )的交互过程。
(3)execStartActivity方法会把将要启动的Activity相关信息传送到ActivityManagerService 如果 ActivityMonitor 对启动Activity 进行检查没问题,那么会调用 ActivityManagerNative.getDault 得到ActivityManagerProxy代理对象,然后调用该代理对象的startActivity方法。;
(4)调用ActivityManagerProxy代理对象的startActivity方法实际上是调用 BinderProxy.transact向 Binder驱动发送 START_ACTIVITY_TRANSACTION命令,此时就从Lanucher进程切换到ActivityManagerService进程了。
总结上述四步:源Activity(这里是Launcher)所属进程通过一系列方法,(无论是通过Launcher来启动Activity,还是通过Activity内部调用startActivity接口来启动新的Activit),都通过Binder进程间通信进入到ActivityManagerService进程中,并且调用ActivityManagerService.startActivity接口;

二、Lanucher进程处理Activity的启动请求,就是Client端的工作,传递给 Server端的 ActivityManagerService 后。就是ActivityManagerService 进程的处理过程 了。
处理过程将分为 7个阶段
1、第一阶段——预启动检查
这个阶段,主要工作是检查是否有权限启动该Activity,查询系统中是否存在指定Intent的Activity, 检查Intent是否正确,检查当前能否切换Activity,各种检查通过后创建目标Activity的ActivityRecord, 判断是否有可复用的Task 或者Activity ,有则关联ActivityRecord,无则新建Task ,更新 ActivityManagerService中Task的数量,检查回退栈顶是否有显示的Activity,有则暂停。
2、第二阶段——暂停
这个阶段的主要工作就是暂停启动目标 Activity的源Activity,比如,我是从Actvity A启动Activity B的,那么在启动B之前需要把A暂停,
针对暂停的Activity的后续处理,要么是执行destroy 操作,要么是存入等待stop列表;
3、第三阶段——创建目标Activity所运行的进程
准备切换动画,查询ActivityManagerService 的mProcessNames变量中是否存在指定的进程信息,有则复用,直接启动Activity,无则通过zygote启动一个新的进程。进程启动超时时间一般是10s。
4、第四阶段——加载应用程序Activity
进程入口是 ActivityThread 的main方法,main方法里的主要工作是设置临时进程名,创建 UI主线程ActivityThread ,并调用其attach方法,最后进入主线程的消息循环。接下来的工作是为低内存设备禁用硬件加速,创建应用程序对应的Application, 并初始化,安装 Content Provider,执行Instrumentation的onCreate方法,执行Application的 onCreate方法。
5、第五阶段——显示Acitivity
在ActivityManagerService 所在进程向应用程序主线程的消息循环发送 LANUCHER_ACTIVITY消息,然后在主线程中回调Activity生命周期的onCreate, onStart,onResume等方法来显示 Activity,onResume方法执行完毕后,需要先把当前显示Activity所在的Task加入最近Task列表,然后才返回ActivityManagerService作后续处理。(在onResume方法之前,还可能会先回调onNewIntent 和 onActivityResult方法)

6、第六阶段——处理处于空闲状态的Activitiy
包括移除ActivityStack消息循环中的超时MSG,停止待停止列表总得Activity,销毁待销毁的Activity,如果是系统启动阶段,还要发送一个ACTION_BOOT_COMPLETEED广播,回收待回收应用程序进程等。最重要的一个操作就是停止源Activity 。

备注:此文是读书所得,主要归纳于老罗的《Android 源代码情景分析》和杨云君老师的《Android的设计与实现I》。

10. 有研究android系统源码的博客吗

我干了3年Android sdk开发,觉得到了瓶劲没法更进一步,于是花了一年多点时间,大概摸到点门径。根据前辈的经验,Android底层完全入门需要两年。

先说下我的入门过程:
第零步,下载源码,我下的4.2的,框架层源码10G,内核2G多,ctags给框架层建的标签文件都有600M,当时让我有点震撼,用的vim+ctags+cscope来阅读,还算不错,架构挺清晰的。

第一步,我找到了一本好书《Android的设计与实现 第一卷》它讲了Android框架层的启动,初始化,服务框架初始化,Binder,消息循环,PackageManagerService,ActivityManagerService。据作者说后面会出讲UI子系统的第二卷,拭目以待。其实这本书看了几十页我就发现需要第二步的知识,否则看不下去,于是跳去第二步。

第二步,学习Linux系统编程,在看《Android的设计与实现》的时候我发现,框架层的Native部分,全是Linux编程。为了掌握这部分知识,我花了4个月学习了《Linux系统编程手册》(TLPI)这本1000多页的书,我以前是搞WIndows文件系统这块的,所以C语言还比较熟,TLPI的习题很有意思,量也比较大,坚持下来还是收获很多。

第三步,花了4个月学习了一些Linux内核的知识,看了LKD,PLKA看了一半多。越学越没底,觉得不懂得越来越多,不过这个也正常,只有靠慢慢磨,估计以后要不断的磨这块。

第四步,回头看Android源码,这次一口气看完了《Android的设计与实现 第一卷》,终于对框架层有了谱。同时真的数次把我看晕,前面看Linux内核源码都没这么晕,不断在Java层和Native层之间跳有点磨脑浆。其中我又觉得Java的基础没有打太牢,回去补了一个月的《Core Java》第八版。但是这书没有涉及UI子系统,于是又看了《Android内核剖析》

第五步,《Android内核剖析》(这本书实际上是讲框架层的,作者也是个搞嵌入式的,所以他在写框架层的时候文笔不太好,很罗嗦,不过还是有很多看点,到他后来写做ROM,玩开发板时估计是说到了他的本行,一下子遛起来了看得出还是挺有水平的,这本书知识有点旧毕竟讲的是2.3很多代码已经过时,但是作者很多点子很有参考价值)这本书讲UI子系统和按键/触摸消息处理系统还是很有分量的,尤其13章View绘制那里,结合源码研究很有收获。而后面他讲编译框架和ROM相关的东西都是挺宝贵的资料。

第六步,为了再补一下其他诸如电源管理模块等子系统的知识看了,《深入理解android》系列,个人认为这个系列看起来有点不太舒服,不过作为补充印证还是比较有价值。

第七步,《Android系统源代码情景分析》,罗升阳的源码分析大作,比《Android的设计与实现》分析得更细致,但缺点是涉及到模块比较少,选用的源码也比《Android的设计与实现》更旧一点。看完书后需要去研究作者的博客,东西挺多的,一定让你满意。

第八步,买块开发板自己玩。这步我还没走到,原因是我觉得我还差点准备知识。可能要再几个月,到时准备入块6410或者树莓派。

最后,由于我11年以前都是搞Windows这块的,所以对Linux知识不是很了解,不得已看了这么些书,如果是一直做Linux的人,很多步骤估计可以省掉了。直接上源码才是正道。

我本身做着移动GIS开发的工作,学框架层全是因为兴趣,但招聘平台Android框架层开发人员还是蛮有竞争力的有不少定制ROM,智能电视的工作都处于人才难求状态,毕竟有一定的门槛,现在各种ios培训,让奔着钱干开发的人纷纷涌入,而ios只能干sdk开发的缺点就暴露出来了,一堆新手老手,菜鸟大牛全挤在SDK开发这块,我觉得不太妙。 反观Android这边,虽然入门菜鸟没有搞ios来钱,但是可持续性很好,从sdk-》框架》驱动》内核这样干下去。干着干着发现自己渐渐变成了Linux开发者/嵌入式开发者的人也不少,新人,老手,菜鸟大牛各居其位,层次性很好。
转载

热点内容
数模编程 发布:2024-10-06 04:04:43 浏览:15
雷霆一击服务器搭建 发布:2024-10-06 03:58:14 浏览:499
导演脚本 发布:2024-10-06 03:37:34 浏览:565
施耐德有密码程序如何打开 发布:2024-10-06 03:37:00 浏览:892
解压缩文件修复 发布:2024-10-06 03:31:17 浏览:704
如何设置休眠时不需要开机密码 发布:2024-10-06 03:03:25 浏览:232
密码工作三个事关的内容是什么 发布:2024-10-06 02:39:44 浏览:424
21款昂科威哪个配置好 发布:2024-10-06 02:20:39 浏览:836
拆装空调压缩机 发布:2024-10-06 01:59:47 浏览:420
dl算法 发布:2024-10-06 01:59:44 浏览:846