android开发系统构架

引言:
笔者站在初学者角度学习安卓开发,主要谈应该关注什么问题和了解到什么程度(笔者也是安卓初学小菜鸡一只,只不过接触有1个多月了,但吃到的几乎都是那些难咽沙子,都没看懂大牛博客上的那些白米和大豆,所以现在想回过头来系统的学习,写写博客,俗话说温故而知新,相信坚持一段时间,即时没有白米和大豆起码会有糟糠嘛,在路上的你也会一样哦。欢迎前辈指点,甚至指指点点,前辈怎么爽怎么来吧,小僧受的住 )住嘴,说那么多废话干嘛,直接进入主题吧。

1.安卓开发系统构架

1.1整体框架

下图是谷歌官方给出的安卓系统构架图,分析它指定没错
安卓系统构架图

如上图安卓体系构架总体分为4层,从上到下划分APPLICATIONS(应用程序层)、APPLICATION FRAMEWORK(应用程序框架层)、LIBRARIES(系统运行库层)、LINUX KERNEL(Linux内核)。看过几篇博客,发现有前辈把ANDROID RUNTIME(android 运行库)单独分为一层,即把整个体系架构分为5层,都没有错,不同程度的学习看问题也会有差异,仁者见仁,我们知道这一点就好,在这里笔者分4层分析。

1.2为什么android整体框架是这样的分层?

能弄清楚下面几方面的问题就可以理解了:

1方面:为什么安卓底层选择Linux内核?因为在早期计算机系统中linux系统各方面表现非常优越,硬件兼容性好,良好平台移植性、开源免费等等,然后被一个团队用来开发针对嵌入式设备中,如:智能摄像机系统,团队取名为android,然后被Google投资收购,然后发展至今,虽然Linux内核改了再改,但是依然还是核心还是Linux系统。

2方面:类库是什么、有什么用?类库是android功能的集合,类库实现了android核心功能,类库都是C语言写的,可以直接操作Linux内核系统,进而使Linux系统控制硬件设备,如声音播放、图像显示等。

3方面:为什么出现应用框架层?我们都知道android开发是用JAVA语言,然而类库层又是C语言编写的,那么问题来了,两种语言不兼容呐,所以Google给我们封装好了可以直接调用下层C语言编写的类库的方法即API,API集合就是应用框架层。

4方面:最上层,也就是我们经常接触、点击的应用APP,如QQ、微信、陌陌等

2.各层介绍

从我们最熟悉、接触最多的入口:

1、APPLICATIONS(应用程序层)

就是我们用户经常使用的手机APP软件,如手机系统预先为我们提供了短信,电话,闹钟,以及我们程序员开发的各种软件。我们可以通过这些软件命令手机硬件为我们提供服务,如上面提到的音乐播放,视频播放,打开Wifi。

2、APPLICATION FRANMEWORK(应用程序框架层)

开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性限制)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。

  隐藏在每个应用后面的是一系列的服务和系统, 其中包括;

  * 丰富而又可扩展的视图(Views),可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons), 甚至可嵌入的web浏览器。

  * 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库), 或者共享它们自己的数据

  * 资源管理器(Resource Manager)提供 非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。

  * 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。

  * 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。

3、LIBRARIES(系统运行库层)
1)程序库
Android包含一个C/C++库的集合,供Android系统的各个组件使用。这些功能通过Android的应用程序框架(application framework)暴露给开发者。下面列出一些核心库:

系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
媒体库——基于PacketVideo的OpenCORE。这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、 H.264、 MP3、 AAC、 AMR、JPG、 PNG
界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
LibWebCore——新式的Web浏览器引擎,驱动Android 浏览器和内嵌的web视图
SGL——基本的2D图形引擎
3D库——基于OpenGL ES 1.0 APIs的实现。库使用硬件3D加速或包含高度优化的3D软件光栅
FreeType ——位图和矢量字体渲染
SQLite ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎

2)Android 运行库

  Android 包括了一个核心库,该核心库提供了JAVA编程语言核心库的大多数功能。

  每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中 的 “dx” 工具转化成.dex格式由虚拟机执行。

  Dalvik虚拟机依赖于linux内核的一些功能,比如线程机制和底层内存管理机制。
  
4、前面对 Linux 内核说得比较浅显,Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时作为硬件和软件栈之间的抽象层。

3.总结

通过最上层到最底层的实例分析,更好的把几个层的作用区分开来,帮助理解

如图过程描述

闹钟铃响过程

1、闹钟应用APP
2、闹钟应用APP直接调用谷歌提供给我们的mediaplayerAPI(图中没有给出,但是还是有的)
3、mediaplayer调用mediaFramework
4、mediaFramework调用AudioDrivers
最后AudioDrivers控制硬件铃响发出

结言,对android应用开发人员,我们最需要熟悉的是过程1到过程2的开发,过程2到过程3了解一些就可以了,如果是底层开发人员,那就要深入 Linux 内核了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值