安卓之启动-初析(-)

本源码介绍是基于安卓4.2.2_r1和安卓安卓4.1的,这里我交叉讲解是因为我的安卓4.2.2_r1代码下载的不全,所有交叉引用讲解。

本文结构约定:

         1大标题用标题1格式,次表次按标题2,标题3以此类推。

         2每章节开篇会有简单的关于该章的介绍,每章后面会对该章的讲解进行一个总结。

         3在开篇介绍后面会列出,该章涉及到的重要的源文件。

         4在讲解代码的时候,因为代码会有嵌套关系,代码层次会根据颜色进行标示,例如

         第一层

                   第二层

                            第三层

                                     第四层

                                               第五层现在之定义到五层,第一层浅灰、浅黄、浅蓝

    5含有代码嵌套的会用一整行六号n(代表嵌套的层,n=1,2,3,4,5)#分割以示这是代码嵌套,我不会但是我尽量对代码进行排版。

    6代码注释的解释用暗红,对于疑点用绿色。对于重要的话语用深蓝。代码用小五号字

对于引用的用橙色,更重要语句或者解析或者代码用红色。重要的话会用粗体加粗。甚至有些用下划线或者斜体表示。某些代码中如果有重要的语句可能会用比当前大一号的字显示,还可能加粗显示。对于特定宏才执行的代码背景用浅绿标示,这段代码不是一定会执行。

在分析代码的时候java、c、c++代码穿插,完全看引用关系,代码的重要注释我会从源文件一起粘贴过来,我会对注释给一个我理解的翻译,当然仁者见仁。还有我在分析代码的时候并不是解释代码,我只是对某些代码加以注释,还有我认为代码从来不出错,所以我会屏蔽掉一些异常处理,而且我不对代码做{}处理,也就是说你拿到这些代码放到编译器上也不一定能运行。想看真正的文件要去源代码中查找,我这里会列出一大部分代码。

    7有些时候为了便于查看代码的方法,我会用编译器的截图来展示文件中包含的方法。

    9我会尽量对我写的文档进行排版,但不保证它真的看起来很舒服,因为排版是一件很难的事情,而且我又不擅长排版。

   10 写这个算一个学习过程也算是一个交流过程,我尽量写一些对我们有意义有用的东西,我不会像其他大师一样扯一些高深的云里雾里的东西,尊重开源尊重共享。也希望看过我写过的学习历程的人,在我的代码和解说中找到错误,我们一起提高。

序-安卓系统介绍

    我想了很久要不要再这一章节里添加一副安卓架构的图片,但是我最终还是决定不用图片去诱惑我自己和大家(加了图你们就不认真读我写的东西了,很辛苦的)。就让我们脑袋一片空白的学习比较好。因为有些时候似乎我们什么都明白都懂了,但是真的让我们去描述去做的时候又感觉到脑袋一片空白。

    题外话就扯到这里,现在我开始按照我自己现在的水平来说一下安卓系统(当然随着我的积累增强,我或许事后会对该章进行修改,见谅,为了不受到干扰,大家可以越过这章)。

    我个人按照自己的倾向喜欢把安卓分为三层,并且按照我自己的喜欢把这三层称为:

    1 linux内核层

    2 framework下层,linux上层,的中间层。

    3 framework

    我为什么要这么分层而且这么称谓是有原因的,我是想让大家对一些东西分清界限,有些东西本身属于linux的语义,没必要非的和安卓扯在一起,例如基于linux的驱动模块,基于linux的内存管理,线程调度等。这样分清界限后,你就知道哪些东西可以在分析的时候从安卓这个吓人的世界里走出来,而且你还能知道你应该去哪个世界了解那些让你迷茫但并不属于或者说和安卓系统本身无关不随安卓存在而早就存在的东西。

 linux内核层包含了一个操作系统应该具有的线程调度、内存管理、驱动程序等。了解过IPC进程间通信的人都知道,进程间通讯有例如无名管道、有名管道、消息队列、共享数据、信号、Unix TCP/IP 套接字等方式,但是忽然有一天某一个人(当然不是我)写了一个驱动程序叫做OpenBinder,它是基于类似RPC远程调用的驱动程序,并且可以用于进程间通讯,如果google(暂时这么称谓因为发现它的应该是早期开发安卓的人)没有发现OpenBinder的话它也行还安静的在liunx世界里默默的休眠,不过它很幸运被google发现变成了今天的Binder,并且用于“安卓系统”大部分进程间通讯的机制。但我还是要重复的强调一次,驱动的开发是属于操作系统或者说是嵌入式等的范畴的,它和安卓扯不上任何关系,它的出现是随着操作系统或者不知道什么玩意一起产生的,早于安卓太多年了。曾经看有些书上说安卓系统把底层日志也做成了驱动的方式,至于是不是真的,应该不会是假的,不过我到今天还没有机会看这些东西,暂时留给以后吧。google还做了很多他们还对内核做了很多定制和阉割处理(有c、c++、还有一些脚本,但是都是linux老套路)。

    夹在framework和linux内核层中间的层,分层的目的就是让职能更加明确。那么这层主要干什么呢,因为它在linux层之上,所以在这一层上按理来说我们可以做像在linux系统上一样的事情。例如基于标准的libc、libstdc++编写一个c、c++程序,而且我们还可以装一个java虚拟机编写一个java程序,并且我还可以把这个java程序做的很炫,例如写一个eclipse。

而且还可以写一个基于JNI的java程序,让我的java程序即能跑java还能跑和linux系统相关的c或者c++程序。擦,结果当我还没有学好c、c++的时候这种想法又被google收购的一个公司发现了。可恶的他们真的这么干了,他们做的比我想象的要狠很多。他们让这个linux只能跑一个程序,他们把它叫安卓,他们让这个安卓有了至高无上的权利。并且他们同样装了一个虚拟机只不过这个虚拟机不是sun的而是apache的它叫Dalvik,并且它的执行效率更高,当然我对此表示怀疑。接着他们又编写了一些c、c++程序作为JNI,在后面肆无忌惮的跑(安卓放话了给我跑)。并且似乎还扮演一些中介的角色。但是谷歌发现不能让开发者肆无忌惮用标准库编写程序,so给你们NDK,你们开发者想编写c、c++要乖乖在我们的掌握之中。

         framework层。大家光有地基那不叫房子,只有把房子在地基上建起来,房子才叫房子,才有了房子的功能。那么房子应该存在门,窗子,墙,地板,天花板,卫生间,厨房等。

这些是构成房子的基本元素。对于安卓系统,地基就好比底层内核层,和夹在中间的中间层。构成房子的元素就好比,安卓系统环境构成安卓应用运行在framework层上的依赖的实现,例如ActivitiesServicesBroadcastreceiversContent providers、文件管理器、任务管理器、安装服务的底层支持和实现,各种随init一起启动的作为安卓应用运行的依赖的服务等。各种上层应用运行的依赖。

         为了让房子更完美,我们给房子铺了木地板,按照了美丽的灯,安装了暖器,空调,冰箱等,不过这些并不是房子的必须品,而这些东西就好比一个安卓系统的一些预置应用。例如地图,例如电话本,拨打电话,发送短信(你会问为什么它算预置应用,答案是有些pad并不具备打电话的功能,所以它算应用不算服务)等。

         这就是一个安卓系统,我这样讲你能明白了吗。记住安卓可是在linux上唯舞独尊的程序哦,挡我者死,挡我我就不干活。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值