Google Android软件架构
Applications
- Application Framework
- Libraries and Android Runtime
- Linux Kernel
Applications 应用程序层
Application Framework 应用程序框架层
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。
开发者可以完全使用核心应用程序所使用的框架APIs。应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。这一机制允许用户替换组件。
所有的应用程序其实是一组服务和系统,包括:
- 视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
- 内容提供者(Content Providers)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
- 资源管理器(Resource Manager)——提供访问非代码资源,如本地化字符串、图形和布局文件
- 通知管理器(
Notification Manager
)——使所有的应用程序能够在状态栏显示自定义警告 - 活动管理器(
Activity Manager
)——管理应用程序生命周期,提供通用的导航回退功能
Libraries 系统运行库
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 ——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
Android Runtime Android运行时
Android 包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中,每个应用程序都有一个自己的Dalvik虚拟机。Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik 设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。 两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。dx 是一套工具,可以將 Java .class 转换成 .dex 格式。一个dex文件通常会有多个.class。由于dex有時必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。
Dalvik虚拟机依赖于Linux 内核提供基本功能,如线程和底层内存管理。
Linux Kernel Linux核心
Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各司其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。
Google Android软件架构相关推荐
- Google Android开发精华教程
本文汇总整理了时下关于Google Android技术教程的下载资源,供参考. 一.入门级: <Android中文教程>中文版 [简介]:<Android中文教程>简单易懂,对 ...
- Android软件架构
前言 本篇文章只是简单解答一下安卓的软件架构,是我在学习中的一个笔记,如果有内容错误,欢迎评论指正,如果有更好的资料也欢迎大家一起分享~ 正文 首先看一下Android软件架构的框图,对于框图中库的作 ...
- 基于Google Android 操作系统的机顶盒
Google Android操作系统为现代数字家庭核心设备的研发创造了全新的价值定 位.Tata Elxsi工程师正倾力开发基于Android的产品,帮助消费者实现无缝的内容 共享,并成就真正的技术融 ...
- Google Android向华为“闭源”,华为手机迎来至暗时刻!
作者 | 屠敏 转载自CSDN(ID:CSDNnews) 居安思危任正非,未雨绸缪如华为.在贸易战的背景下,即使早在多年前已在多个层面做好"备胎"计划的华为,在面对美国对芯片乃至操 ...
- 《深入浅出Google Android》即将隆重上市!
<深入浅出 Google Android > 作者在线答疑活动开始啦 :http://www.hiapk.com/bbs/forum-41-1.html 随着越来越多的手机 厂商和移动运营 ...
- 在Google Android模拟器中使用SD卡(命令行和eclipse环境)
Android模拟器能够让我们使用fat32格式的磁盘镜像作为SD卡的模拟: 以下所有操作均在windows环境 首先,运行cmd,进入命令行界面(需要预先将你放置android sdk所在目录下的t ...
- 甲骨文指控 Google Android 复制其代码
甲骨文又有动作了,这家全球最有名的数据库软件商正在立志成为全球最大的软件垄断企业,今天的目标是控告 Google Android 移动操作系统的部分组件"直接复制"了Java代码, ...
- 深入浅出Google Android这本书怎么样
关于深入浅出Google Android 评论 读后感:对入门的知识讲的很详细,近乎罗嗦,例子比较少而且不够吸引人. 读后感:我还没收到货呢,昨天下午发的货,应该今天能到,因为是周末,我待会儿要回家, ...
- Android之提示Unable to get provider com.google.android.gms.ads.MobileAdsInitProvider
1 问题 接入SDK提示错误如下 java.lang.RuntimeException: Unable to get provider com.google.android.gms.ads.Mobil ...
最新文章
- php 输出去掉 字符,PHP:如何删除字符串中所有不可打印的字符?
- [转]手游研发数据专业术语科普 游戏热度跟啥有关
- java swing面试题_Java面试题之AWT、Swing
- fft函数图像横坐标是什么_10分钟学会:函数图像的平移与伸缩变换
- 制作巴士电台彩蛋一枚
- C语言链表存储数据并排序,c语言求助:怎么根据链表中的某个数据对链表进行排序?...
- Win11正式发布新功能
- java webservice 线程_编程实践笔记{Java 线程 并发处理 Webservice}
- 怎样学好c语言程序设计这门,初学C语言程序设计的基本方法和技巧
- go语言:函数参数传递详解
- SQL Server2012内存性能计数器和内存DMV的变化
- 毕业论文中word的使用1-代码域标公式
- Windows API——SHFileOperation——文件操作
- 蒙特卡罗方法C语言求定积分,蒙特卡罗方法计算定积分
- XYNUOJ 第四次比赛 懒省事得小名
- 怎么在html模板里加图片,页面中添加图片模块并编辑
- 纯干货:手把手地教你搭建Oracle Sharding数据库分片技术
- BLUP育种值如何计算准确性
- 13、腾讯云轻量应用服务器挂载文件系统
- linux 汇编 preserve8,ARM汇编伪指令