转自:网络

Android系统是基于Linux和Java技术,它在底层采用Linux内核和本地库,在上层提供Java支持框架和开发接口。它借助于 Linux强大的稳定性、开放性和可移植性,Java语言开发的广泛性、简单性和可移植性,一经推出就受动广泛关注和欢迎,在嵌入式开发中产生比较深远的 影响。

图1.1 Android系统架构

考虑到性能的问题,Google没有采用Sun的基于堆栈的虚拟机,而是开发了一个基于寄存器的Android虚拟机 -Dalvik虚拟机。当然Android系统提供了一个工具用来把Java虚拟机格式转换为Daleik虚拟机格式。不过Android仅支持有限的 Java运行库,因此不是所有的Java程序都可以在Android里直接编译运行。

当然任何一个系统都有其固有个缺点,而且它就隐藏在它的优点之中,Android也不例外。首先Android系统的开放性导致任何厂家都可以修改 定制而推出自己的Android系统,这就导致了尽管设备运行的系统都是Android,但运行的程序就或多或少不兼容,这对第三方程序开发员人来说不是 个好消息,标准的不统一势必会影响的Android程序的开发使用。其次,尽管Android系统是基于Linux和Java的,但由于它开发了一套独立 的UI系统,它完全不兼容现有的Linux和Java应用程序,这不仅是浪费了现有的开发资源,而且是极大的浪费了未来的开发资源。不管Android社 区有多大,比起Linux开源社区来说,它也是大海中的一点水,这是否会给对手以机会呢?如Intel的Moblin系统、Nokia的Maemo系统以 及Ubuntu的上网本系统,还有最新的由Intel和Nokia联合开发的MeeGO系统。

回到Android系统本身,如图1.1,它主要包括五个部分,分别是Linux 内核(红色部分)、本地库(绿色部分)、Dalvik 虚拟机(黄色部分)、应用程序框架和应用程序(蓝色部分)。

  • Android Linux内核

最初的Android内核是基于2.6.25的,但由于采用的同样的版本管理系 统,Android内核紧跟Linux内核的进度,目前最新的开发版本是2.6.31,但版本其实已经不重要了,你只要记住Android内核基本上同步 于Linux内核就可以了,在此基础上Android对Linux内核做了些修改和功能添加使之Android化,如著名的Binder、匿名共享内存 (ashmem)等。

目前在Android的源代码仓库中有4个关于Linux的项目,他们分别是:

  • kernel/common.git:Common Android Kernel Tree
  • kernel/experimental.git :Experimental Kernel Projects
  • kernel/msm.git :Kernel Tree for MSM7XXX family on Android
  • kernel/omap.git :Kernel Tree for OMAP family on Android
  • 本地库

说到本地库,首先我们想到的一定是libc库。是的,Android也不例外,他支持c 库,但不是glibc或其他常见的小型仓库,比如uclibc,而是一个额称为Bionic的C库。尽管它不是很强大,但足够用了。按照Google的说 法,选择Bionic的原因是因为:

  • 尽量移除GPL License的模块
  • 更小的代码密度和更快的运行速度

但Bionic C库也有它的局限性:首先,不完全支持posix标准;其次,不支持libm和libthread_db;第三,不能使用标准的Toolchain来编译 Android本地应用。Android的编译链也是依赖于Bionic库的,它的动态链接库加载使用的是linker,而不是ld.so。它的 prelink使用的是apriori(build/tools/apriori),strip 工具使用的是soslim(build/tools/soslim)而不是strip。

Android的本地库基本上位于源代码树的external和system目录下。

  • Dalvik虚拟机

Dalvik是Google Android平台最重要的一个部分,是Google专门为Android开发的Java虚拟机,被称为Dalvik虚拟机。按照Google的说 法,Dalvik具有高效、简洁、节省资源的特点,非常适合资源有限的嵌入式系统。

Dalvik是按照Apache License v2方式发布的,Google尽量把GPL Licnse的软件移除Android系统。这就避免了非免费的Java ME版权问题,也移除了GPLv2的Java SE。

以前也有些公司搞过Linux/Java平台,即底层支持Linux系统、上层采用Java技术,但都因为效率的问题而放弃。Google的Dalvik虚拟机很好的解决了这个问题,同其他的Java虚拟机相比,Dalvik虚拟机有如下特点:

  • Dalvik虚拟机采用了基于寄存器的虚拟机技术。与Java虚拟机不同,Dalvik采用了基于寄存器(register based)的技术,而不是基于堆栈(stack based)的技术。我们不去争论基于寄存器的虚拟机是不是更好,如果有兴趣,你可以去比较他们的性能差异。
  • Dalvik虚拟机使用自定义的字节码格式(称为DEX文件,.dex),不兼容现有Java字节码格式。Android里的dx工具负责把Java字节码转换成Dalvik字节码。
  • Dalvik虚拟机运行效率高,同事代码密度小,节省资源。
  • Dalvik虚拟机常量池只使用32位的索引。
  • Dalvik虚拟机不支持JIT编译技术(Just In Time Compiler)。

对于Android应用程序开发者来说,我们必须清楚如何在Android Dalvik虚拟机上使用内存,下面是内存使用上的一些限制:

  • Dalvik默认的栈大小是12K(3个页,每个页4K)。
  • Dalvik堆(heap)默认启动大小:2M,默认最大值16M。
  • Dalvik堆(heap)支持的最小启动大小:1M,支持的最大值1024M。
  • Dalvik的堆和栈参数可以通过–Xms 和–Xmx更改。

对于Android的Java应用程序来说,每一个应用对对应于一个独立的Dalvik虚 拟机实例进程,当然每个Android Java应用程序的线程也对应于一个Linux线程。这相当于每个Android Dalvik应用程序都运行在自己的沙盒里面从而保证Dalvik应用程序的安全性。当然Android系统也充分利用了这个特性,每个Android Dalvik应用程序都被赋予了一个独立的Linux PID(app_*)。

  • 应用程序框架

Android应用程序框架完全使用Java语言编写,运行在Android Dalvik虚拟机之上,它通过Java JNI接口调用本地库的接口。

Android应用程序框架向下封装了系统的各种系统服务及硬件的访问接口,向上提供统一的应用程序开发接口,即Android API。Android应用程序通过调用Android应用程序框架接口来实现各种功能。

Android应用程序框架封装了大部分的系统服务功能,它们包括:

  • Activity Manager
  • Windows Manager
  • Content Provider
  • View System
  • Resource Manager
  • Notification Manager
  • Packet Manager
  • Telephony Manager
  • Location Manager

对于Android开发者来说,Android应用程序框架是最重要的一部分,只有真正理解了这个框架说包含的内容,才能写出高效的Android应用程序。

  • 应用程序

Android是一个功能完全的移动设备操作系统,它自带了核心应用程序,这样你就不需要额外的开发而直接在你的设备上使用Android系统了,这些应用程序开起来中规中矩,如果你想要一个更加绚丽的操作界面,你可以修改他们来实现自己的应用程序。

很明显,Android应用程序都是用Java语言开发的,它依赖于Android应用框架(framework.jar),同时运行在Android Dalvik虚拟机之上。

Android系统框架相关推荐

  1. android系统框架()

    Android系统框架介绍:   1.大体框架: -src目录: 主要是完成java代码的编写 -assets目录: 资源目录 -res目录: 存储图片,布局文件和字符串,菜单等文件 -bin目录: ...

  2. Android系统框架-Androi的面试必问部分

    "Android系统框架"-Androi的面试必问部分 安卓系统框架层的详解: 首先我们先看看框架结构图: 通过图片可知,从上到下分为了四层:"应用程序"层-& ...

  3. Android系统框架四层结构

    Android系统框架四层结构 安卓系统框架图大致如下: (蓝色:java程序,java代码编写:黄色:运行JAVA程序而实现的虚拟机:绿色:C/C++语言编写的程序库:红色:linux内核+driv ...

  4. Android系统框架有哪些?

    Android系统很庞大,所有我们学习的都只是冰山一角.记得刚开始接触Android时,发现完全不知道如何入门去学习Android,很迷茫,很无措.所以这里大概说下Android系统的框架,希望有助于 ...

  5. android应用程序框架图,Android系统框架图详解

    Android系统从下至上分为4层:Linux内核.Android程序库及Android运行时.Android应用程序框架,以及应用程序等. 图1-1 Android系统框架 1. Linux内核(L ...

  6. android 系统框架 dx

    引用:http://www.cnblogs.com/leizhenzi/archive/2011/10/18/2216502.html 从上图中可以看出,Android系统架构为四层结构,从上层到下层 ...

  7. Android系统的系统运行库层,Android系统框架

    Android主要可以分为四层架构:Linux内核层,系统运行层,应用框架层和应用层. 1.Linux内核层 Android系统是基于Linux内核开发的,为Android设备的各种硬件提供底层驱动, ...

  8. Android系统框架总结(好文)

    原址 通用概念 Android框架图 Android应用程序框架 UI基本开发 Fragment 安全策略 在Android中,安全涵盖了应用程序的部署和执行.对于部署来 说,Android应用程序必 ...

  9. Android系统框架详解(4)--Applications and Framework

    4.Android Applications and Framework 作者:李利伟不加V 今天特殊一点,两个层放在了一起,不是因为两个层类似,是因为这两个层不能详细讲解,这个两层东西太多了,只能使 ...

最新文章

  1. Hibernate:映射文件元素属性说明
  2. IQueryable和IEnumerable的区别
  3. S5PV210体系结构与接口09:SD卡启动详解
  4. 5款免费好用的Gif录屏神器
  5. html 手机语音聊天,好用的手机语音聊天软件推荐
  6. 大聪明教你学Java | EasyExcel - 用更简单的方式操作Excel
  7. cesium-视频融合
  8. Percona Server 安装
  9. 推荐几个比较好的日语翻译网站还有软件(我自己还没看过)
  10. 最老程序员创业开发实训2---采用MVC架构的应用Splash页面实现
  11. 女孩学电子商务好还是计算机应用好,学习电子商务难不难适合女生学吗
  12. Unity3D游戏开发中的人工智能AI 简单实例
  13. 【2019年04月03日】A股最便宜的股票
  14. AVR工程编译报main.c:382: fatal error: opening dependency file .dep/main.o.d: No such file or directory!!!
  15. 天线巴伦制作和原理_巴伦制作方法
  16. AutoGluon 低调开源!性能超过人类调参师6个点
  17. 中小学学籍管理系统 v1.0.1.0 下载
  18. moment getTime
  19. ipad协议824内部最新版
  20. FPGA实战-以太网包文

热门文章

  1. 光驱常见故障以及解决方法
  2. 喜讯|京东荣获2019 【中国技术品牌影响力企业】
  3. 为什么不能使用网上下载的破解盗版在线客服系统源码
  4. 东京2017 IREX国际机器人展参观总结——人工智能+3D视觉+双臂协作机器人
  5. 【IT小常识】如何将IE手动升级或降级
  6. arima模型_时间序列分析(R)‖ARIMA模型预测实例
  7. 安卓开发快速学习!一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?BAT大厂面试总结
  8. OneNET 数据可视化 按键控制
  9. unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题
  10. Qt单个实例运行 - SingleApplication