Android核心架构探究学习

转载请注明出处:http://blog.csdn.net/li0978/article/details/52425502

谈起Android架构,很多人都知道Android是java开发的,以为Android就是java的一个儿子,这也只是站在表层去看问题。Android是一个系统,作为一个现在都发展到7.0的系统,内部必有一个庞大的核心体系,就像一个舞台,要有支柱,要有台面,才能撑起各种演员和设备在其上面配合着表演。

Android系统的底层是建立在Linux系统之上的,系统架构总共分为4层5块。从上往下4层分别是:应用程序层、应用程序框架层、函数库层、Linux内核层。5块分别指APPLICATIONS、APPLICATIONS FRAMWORK、LIBRARIES、ANDROID RUNTIME、LINUX KERNEL,这都和前边一一对应,其中ANDROID RUNTIME是在函数库层额外开出的android运行时虚拟机。

这4层采用一种软件叠层(Software Stack)的方式进行构建,层与层之间相互分离又分工明确,确保层与层之间的低耦合,保证系统的稳定性。


Android系统体系结构图:


上图Android4.4之前的结构图,在Android5.0之后安卓引入了ART模式代替之前Dalvik虚拟机。


下边就依着4层结构从上到下逐层阐述:

1.APPLICATIONS(应用程序层)

Android系统会包含一系列核心应用程序,既是我们常说的系统应用,包含电子邮件客户端、SMS短信程序、联系人、浏览器、地图、日历等等,国内第三方厂商例如小米,魅族又在原生的基础上去除那些需要翻墙的系统应用换成自己的应用。这些系统应用和我们在市场上下载的应用没啥两样,都是遵从android设计模式根据java api编写的,只不过前者属于系统级权限全开,用起来省时省心。


2.APPLICATION FRAMEWORK(应用程序框架)

这一层对安卓开发者是重中之重,Framework层为安卓开发者提供了众多的API接口,开发者通过调用这些各种功能的API来构造所要创建的APP,从而满足业务上的需求。学习android的众多知识都在这一层上呈现,包括四大组件Activity、Service、BroadcastRecever、ContentProvider。Framework就这Android Api的工具库,所有的Api差不多都是用Java实现的,同时在底层又包含JNI的方法,JNI用C/C++编写接口,通过函数表查询核心库层的底层方法,最终访问到Linux内核。JNI是在Dalvik虚拟机启动时加载进去的,Dalvik虚拟机去寻址JNI方法,然后再用JNI接口去调用core lib层的本地方法。从而满足了Java层到系统内核层的通信。至于为什么用java编写这一层,为什么不用c/c++接着往上写,具体原因大概开发者也能想到,java的跨平台和内存回收机制这个优点是c/c++目前来时无法取代的,这样极大的满足了安卓的灵活性和易开发性(大部分java开发者很容易上手),便于安卓的快速拓展。

下边列出一些Framework API的说明:

  • Activity Manager用来管理应用程序生命周期并提供常用的导航回退功能。
  • Windows Manager:提供一些我们访问手机屏幕的方法。屏幕的透明度、亮度、背景。
  • Content Providers:使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据。
  • View System:可以用来构建应用程序, 它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons), 甚至可嵌入的web浏览器。
  • Notificatio Manager:使得应用程序可以在状态栏中显示自定义的提示信息。
  • Package Manager:提供对系统的安装包的访问。包括安装、卸载应用,查询permission相关信息,查询Application相关信息等。
  • Telephone Manager:主要提供了一系列用于访问与手机通讯相关的状态和信息的方法,查询电信网络状态信息,sim卡的信息等。
  • Resource Manager:提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。
  • Location Manager:提供设备的地址位置的获取方式。很显然,GPS导航肯定能用到位置服务。
  • XMPP Service:可扩展通讯和表示协议。前身为Jabber,提供即时通信服务。例如推送功能,Google Talk。

这些只是图上给出的总括,还有很多Api,这里不在一一列出,有些自己还没有完全领会,后边慢慢学习。


3.LIBRARIES(函数库)

Android包含一套被不同组件所使用的C/C++库的集合。一般情况安卓开发者是不能直接调用这套C/C++库集,上边也说了JNI是连接Java和C/C++的桥梁。

下边列出一些核心库说明:

  • Surface Manager:管理对显示子系统的访问,并可以对多个应用程序的2D和3D图层提供无缝整合。
  • Media Framework:基于PacketVideo的OpenCORE,支持播放和录制许多流行的音频和视频格式,以及查看静态图片,主要MPEG4、MP3、AAC、AMR、JPG、PNG等多媒体格式。
  • SQLite:供所有应用程序使用的功能强大的轻量级关系数据库。
  • OpenGL ES:是一套基于OpenGL ES API实现的3D系统,这套3D库既可以使用硬件3D加速,也可以使用软件3D加速,可谓软硬通吃。
  • FreeType:位图和向量字体的显示。
  • SGL:底层2D图形引擎。
  • WebKit:内部含有一个libwebcore.so库,是一个开源的Web浏览器引擎,该引擎为Android浏览器提供支持,也为Android WebView提供支持,用于嵌入到应用程序中进行网页浏览。
  • libC:一个从BSD系统派生出来的标准C系统库,并且专门为嵌入式系统Linux设备调试过的。


4.ANDROID RUNTIME(Android运行时):

这一块主要由两部分组成:Android核心库集和虚拟机。Android核心库集主要包含Java核心库中绝大部分的功能,虚拟机主要负责运行Android应用程序。

Android4.4引入了ART模式,Android5.0全面推开,并淘汰Dalvik。Dalvick和ART的主要区别是对应用程序的编译过程,前者采用JIT(Just-in-time)解释器进行动态编译并执行的方式去运行应用程序,导致应用程序在执行的时候cpu配合内存高效率运行,从而在一些低级处理器和内存的机子上导致“卡”、“慢”等特点。后者采用AOT(Ahead-of-time)在程序安装时进行预编译,编译过程缓慢,内存占用高,但是一旦程序安装成功运行速度将得到一个质的提升,因为减少了动态编译的过程,从而提升运行效率。除此之外ART还对ARM和x86和MIPS架构的支持,并且完全兼容64位系统。


5.LINUX KERNEL(Linux内核)

Android系统建立在Linux2.6之上,Linux内核提供了安全性,内存管理,进程管理,网络协议栈和驱动模型等核心系统服务,除此之外,Linux内核也是系统硬件和软件叠层的抽象层,是沟通硬件和软件的桥梁。


以上是通过查阅官方文档和有关网络知识的总结,也使自己对安卓系统架构有一个全面的认识。不明或错误之处望过往同学指出。







猜你喜欢

转载自blog.csdn.net/li0978/article/details/52425502