Android系统架构


1.应用层

应用是用java语言编写的运行在虚拟机上的程序,google绑定了一些核心应用

2.应用程序框架层

编写google发布的核心应用时所使用的API框架

组件:视图、内容提供器(content Providers)、资源管理器(Resocrce Manager提供非代码资源的访问,如本地字符串、图形和布局文件)、通知管理器(Notification Manager在状态栏中显示自定义的提示信息)、活动管理器(Activity Manager用来管理应用程序生命周期并提供常用的导航退回功能)、窗口管理器(Window Manager 管理所有的窗口程序)、包管理器(Package Manager Android系统内的程序管理)

3.系统运行库(C/C++库及Android运行库)层

当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件

Bionic系统C库:C语言标准库,系统最底层的库,C库通过Linux系统来调用。

多媒体库(MadiaFrameWork) :Android系统多媒体库,基于PacketVideoOpenCore,该库支持多种常见的音频,视频的回放和录制,以及图片,如mpeg4,mp3,aac,amr,jpg,png

SGL2D图形引擎库

SSL:位于TCP/IP协议与各应用层协议之间,为数据通信提供支持

OpenGL ES 3D郊果的支持

SQLite:关系数据库

Webkit:Web 浏览器引擎

FreeType:位图及矢量

每个Java程序都运行在Dalvik虚拟机之上,每个Android应用程序都有自己的进程,Dalvik虚拟机只执行。Dex的可执行文件。当java程序通过编译,最后还需要通过SDKdx工具转化成.dex格式才能正常在虚拟机上执行。

Dalvik虚拟机对内存的高效使用,以及在低速CPU上表现出的高性能。Android系统可以简单地完成 进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

 Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式为dex(Dalvik Executable)的文件。Android应用虽然也使用Java语言进行编程,但是在编译成class文件后,还会通过 一个dx工具将应用所有的class文件转换成一个dex文件,而后Dalvik虚拟机会从其中读取指令和数据。

Dalvik虚拟机非常适合在移动终端上使用,它不需要很快的CPU计算速度和大量的内存空间。64M的内存已经能够 让系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于启动高层服务。随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。Dalvik的主要特征:

1.专有的dex文件格式。

      Dex文件格式会把所有的class文件内容整合到一个文件中,除了减少整体的文件尺寸和I/O操作外,也提高了类的查找速度 。增加了对新的操作码的支持、文件结构尽量简洁,使用等长的指令,借以提高解析速度、尽量扩大只读结构的大小,借以提高跨进程的数据共享。

     2.dex的优化。Dex文件的结构是紧凑的。优化主要针对以下几个方面:调整所有字段的字节序和对齐结构中的每一个域、验证dex文件中的所有类、对一些特定的类和方法里的操作码进行优化。

     3.基于寄存器。相对于基于堆栈实现的虚拟机,基于寄存器实现的虚拟器虽然在硬件、通用性上要差一些,但是它在代码的执行率上却更胜一筹。

      4.一个应用,一个虚拟机实例,一个进程。每一个Android应用都运行在一个Dalvik虚拟机实例中,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制、内存分配和管理、Mutex等的实现都依赖底层操作系统。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。不同的应用在不同的进程空间里运行,对不同的来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。

4.Linux内核层

Android的核心系统服务基于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型都依赖于该内核。Linux内核同时也作为硬件和软件栈之间的抽象层。

      Android更多的是需要一些与移动设备相关的驱动程序。主要驱动如下:

      显示驱动:基于Linux的帧缓冲驱动

  键盘驱动:作为输入设备的键盘驱动

  Flash内存驱动:基于MTDFlash驱动程序。

  照相机驱动:基于Linuxv412(video for Liux)驱动

  音频驱动:基于ALSA的高级Linux声音体系驱动

  蓝牙驱动:基于IEEE802.15.1标准的无线传输技术

  WIFI驱动:基于IEEE802.11标准的驱动程序。

  Binder IPC驱动:Android的一个特殊的驱动程序,具有单独的设备节点,提供进程间通信的功能。

  Power Management 

1.1.3Android应用程序框架

Android.app:提供高层的程序模型和基本的运行环境

Android.content:包含对各种设备上的数据进行访问和发布

Android.database:通过内容提供者浏览和操作数据库

Android.graphics:底层的图形库,包含画面、颜色过滤、点,矩形,可以将它们直接绘制到屏幕上。

Android.location:定位和相关服务的类

Android.media:提供一些类管理多种音频、视频的媒体接口

Android.net :提供帮助网络访问的类,超过通常的java.net.*接口

Android.os:提供了系统服务、消息传输和IPC机制

Android.opengl:提供OpenGL的工具

Android.provider:提供访问Android内容提供者的类

Android.telephony:提供与拨打电话相关的API交互

Android.view:提供基础的用户界面接口框架

Android.util:涉及工具性的方法,例如时间日期的操作。

Android.webkit:默认浏览器操作接口

Android.widget:包含各种UI元素

3.1.2Android应用解析

   Android应用程序由4个模块构造而成:Activity,Intent,Content Proivder,Service

   


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值