1、Android发展史
2003年10月,Andy Rubin(安迪·鲁宾)等人创建与Android系统同名的Android公司,并组建了Android开发团队,最初的Android系统是一款针对数码相机开发的智能操作系统。2005年8月被Google收购。
(1) Android
Android 是一个软件系统,用于连接设备,并不是平时所说的操作系统。
(2) Android版本
| API | Android | 英文名称 | 中文名称 |
|---|---|---|---|
| 1 | 1.0 | – | 发条机器人 |
| 2 | 1.1 | – | – |
| 3 | 1.5 | Cupcake | 纸杯蛋糕 |
| 4 | 1.6 | Donut | 甜甜圈 |
| 5 | 2.0 | Eclair | 松饼 |
| 6 | 2.0.1 | Eclair | 松饼 |
| 7 | 2.1 | Eclair | 松饼 |
| 8 | 2.2——2.2.3 | Froyo | 冻酸奶 |
| 9 | 2.3——2.3.2 | Gingerbread | 姜饼 |
| 10 | 2.3.3——2.3.7 | Gingerbread | 姜饼 |
| 11 | 3.0 | Honeycomb | 蜂巢 |
| 12 | 3.1 | Honeycomb | 蜂巢 |
| 13 | 3..2.x | Honeycomb | 蜂巢 |
| 14 | 4.0.1——4.0.2 | Ice Cream Sandwich | 冰淇淋三明治 |
| 15 | 4.0.3——4.0.4 | Ice Cream Sandwich | 冰淇淋三明治 |
| 16 | 4.1.x | Jelly Bean | 果冻豆 |
| 17 | 4.2.x | Jelly Bean | 果冻豆 |
| 18 | 4.3.x | Jelly Bean | 果冻豆 |
| 19 | 4.4 | KitKat | 奇巧 |
| 20 | 4.4w | KitKat | 奇巧 |
| 21 | 5.0 | L/Lollipop | 棒棒糖 |
| 22 | 5.1 | LOLLIPOP_MR1 | 棒棒糖 |
| 23 | 6.0 | M/Marshmallow | 棉花糖 |
| 24 | 7.0 | N/Nougat | 牛轧糖 |
| 25 | 7.0 | N_MR1 | – |
2、Android 系统架构与特性
(1) 应用程序层
该层提供一些核心应用程序包,例如电子邮件、短信、日历、地图、浏览器和联系人管理等。同时,开发者可以利用Java语言设计和编写属于自己的应用程序,而这些程序与那些核心应用程序彼此平等、友好共处。
(2) 应用程序框架层
该层是Android应用开发的基础,开发人员大部分情况是在和她打交道。应用程序框架层包括活动管理器、窗口管理器、内容提供者、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器和XMPP服务十个部分。在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种应用程序组件。
(3) 系统库和Android运行时
Android包含一些C/C++库,这些库能被Android系统中不同的组件使用。它们通过Android应用程序框架为开发者提供服务。
系统库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android运行时包括核心库和Dalvik虚拟机,前者既兼容了大多数Java语言所需要调用的功能函数,又包括了Android的核心库,比如android.os、android.NET、android.media等等。后者是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对生命周期的管理、堆栈的管理、线程的管理、安全和异常的管理以及垃圾回收等重要功能。
(4) linux内核
Android核心系统服务依赖于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型。Linux内核也是作为硬件与软件栈的抽象层。驱动:显示驱动、摄像头驱动、键盘驱动、WiFi驱动、Audio驱动、flash内存驱动、Binder(IPC)驱动、电源管理等。
3、Dalvik VM 和 JVM 、ART
(1)JVM (Java 虚拟机) 是一个虚构出来运行 Java 程序的运行时,是通过在实际的计算机上仿真模拟各种计算机功能的实现。它具有完善的硬件架构(如处理器、堆栈、寄存器等),还具有指令系统,使用 JVM 就是使用 Java 程序支持与操作系统无关。理论上在任何操作系统中,只要有对应的 JVM,即可运行 Java 程序。
(2)Dalvik VM 是在 Android 系统上运行 Android 程序的虚拟机,其指令集是基于寄存器架构的,执行特有的文件格式 -dex 字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。
Android4.4及以前使用的都是Dalvik虚拟机,我们知道Apk在打包的过程中会先将java等源码通过javac编译成.class文件,但是我们的Dalvik虚拟机只会执行.dex文件,这个时候dex会将.class文件转换成Dalvik虚拟机执行的.dex文件。Dalvik虚拟机在启动的时候会先将.dex文件转换成快速运行的机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是我们的app启动慢,这就是Dalvik虚拟机的JIT特性(Just In Time,即时编译技术)。
(3)ART (android runtime)是由于手机大部分都是用 arm 架构的 CPU,随着 Android 设备的发展,又推出的一种新的虚拟机 art。art 替换 dalvik 是从 4.4开始(可选的)5.0开始都换成了art虚拟机。
什么是ART:
在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这一机制并不高效,但让应用安装比较快,而且更容易在不同硬件和架构上运行。
ART完全改变了这种做法,在应用安装时就预编译字节码到机器语言,在移除解释代码这一过程后,应用程序执行将更有效率,启动更快。
JVM 与 Dalvik 区别
| 区别 | JVM | Dalvik |
|---|---|---|
| 编译后文件格式 | .java -> .class -> .jar jdk javac |
.java -> .class -> .dex sdk dex |
| 基于的架构 | 基于栈的架构 | 基于寄存器的架构 |
ART 和 Dalvik 的区别
(1)在Dalvik下,应用每次运行都需要通过即时编译器(JIT)将字节码转换为机器码,即每次都要编译加运行,这虽然会使安装过程比较快,但是会拖慢应用以后每次启动的效率。而在ART 环境中,应用在第一次安装的时候,字节码就会预编译(AOT)成机器码,这样的话,虽然设备和应用的首次启动(安装慢了)会变慢,但是以后每次启动执行的时候,都可以直接运行,因此运行效率会提高。
(2)ART占用空间比Dalvik大(字节码变为机器码之后,可能会增加10%-20%),这也是著名的“空间换时间大法”。
(3)预编译也可以明显改善电池续航,因为应用程序每次运行时不用重复编译了,从而减少了 CPU 的使用频率,降低了能耗。
| 区别 | ART | Dalvik |
|---|---|---|
| 共同点 | 编译生成的字节码在运行的时候还要再通过虚拟机翻译成机器码才能真正的运行 | |
| 不同点 | 把编译的工作提前,安装的时候直接把字节码翻译成机器码,安装之后占磁盘空间比之前大了(用空间换时间) | 一边翻译一边执行。装的时间快,占用空间少,运行时比art模式慢 |