Android的前世今生
Android 出生
- 2003年10月,Andy Rubin等人创建Android公司,并组建Android团队
- 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队
- 2007年11月5日,谷歌公司正式向外界展示了这款名为Android的操作系统
- 2008年,在GoogleI/O大会上,谷歌提出了AndroidHAL架构图(Android HAL架构是什么),在同年8月18号,Android获得了美国联邦通信委员会(FCC)的批准
Android 历史版本
从2009年5月开始,Android操作系统改用甜点来作为版本代号,这些版本按照从C大写字母开始的顺序来进行命名:纸杯蛋糕(Cupcake)、甜甜圈(Donut)、闪电泡芙(Éclair)、冻酸奶(Froyo)、姜饼(Gingerbread)、蜂巢(Honeycomb)﹑冰淇淋三明治(Ice Cream Sandwich)、果冻豆(Jelly Bean)、奇巧(KitKat)、棒棒糖(Lollipop)、棉花糖(Marshmallow)、牛轧糖(Nougat)
- Android milestone builds (with Astro Boy and Bender floating around in here somewhere)
- Android 1.0(没有开发代号)
- Android 1.1 - Petit Four
- Android 1.5 - Cupcake
- Android 1.6 - Donut
- Android 2.0/2.1 - Éclair
- Android 2.2 - Froyo
- Android 2.3 - Gingerbread
- Android 3.0/3.1/3.2 - Honeycomb
- Android 4.0 - Ice Cream Sandwich
- Android 4.1/4.2/4.3 - Jelly Bean
- Android 4.4 - KitKat
- Android 5.0/5.1 - Lollipop(Android L)
- Android 6.0 - Marshmallow(Android M)
- Android 7.0 -Nougat(Android N)
里程碑版本
2010年5月20日,2.2(Froyo 冻酸奶)版本软件开发工具包发布,该版本基于Linux 2.6.32内核。主要的更新如下:
- 支持将软件安装至扩展内存
- 集成Adobe Flash 10.1支持
- 加强软件即时编译的速度
- 新增软件启动”快速”至电话和浏览器
- USB分享器和WiFi热点功能
- 支持在浏览器上传档案
- 更新Market中的批量和自动更新
- 增加对Microsoft Exchange的支持(安全政策,auto-discovery,GAL look-up)
- 集成Chrome的V8 JavaScript引擎到浏览器
- 加强快速搜索小工具
- 更多软件能透过Market更新,类似2.0/2.1中的Map更新
2010年12月6日,2.3(Gingerbread 姜饼)版本软件开发工具包发布,该版本基于Linux 2.6.35内核。主要更新如下:
- 修补UI
- 支持更大的屏幕尺寸和分辨率(WXGA及更高)
- 系统级复制粘贴
- 重新设计的多点触摸屏幕键盘
- 原生支持多个镜头(用于视频通话等)和更多传感器(陀螺仪、气压计等)
- 电话簿集成Internet Call功能
- 支持近场通信(NFC)
- 强化电源、应用程序管理功能
- 新增下载管理员
- 优化游戏开发支持
- 多媒体音效强化
- 从YAFFS转换到ext4文件系统
- 开放了屏幕截图功能
- 对黑色及白色的还原更加真实
2010年12月及2011年1月分别发放2.3.1和2.3.2更新包,用于改进及修复Nexus S的Bug。
Android 2.3.3
Android 2.3.3更新包于2011年2月9日正式发布,仅针对上一个版本进行了API改进,其他无变化。
Android 2.3.4
Android 2.3.4更新包增加了在Google Talk中使用语音通话和视频聊天的支持。 - 屏幕截图功能(电源键+Home)在2.3.4 才有实现出来(2011 Xperia: 长按Power键,再点击“截图”)
Android 2.3.5
Android 2.3.5更新包于2011年7月25日正式发布,该更新包改进了个别机型的功能,针对上一个版本进行如下改进:
提升了Nexus S 4G的性能,包括其他性能的提升。 - 修复了存在于三星Galaxy S中存在的蓝牙Bug。
升级了内置的Gmail应用程序
增强了滚动列表时产生的阴影动画
增强了内置的相机功能
改善了电池耗电量,增加续航时间。
Android 2.3.6
Android 2.3.6更新包于2011年9月2日正式发布,针对上一个版本修复了语音搜索存在的Bug。该更新包改进了加拿大版本Nexus S存在的使用WiFi时可能导致增加辐射的问题.2011年2月22日
Android 4.0(Ice Cream Sandwich 雪糕三明治)于2011年4月在
Google I/O
大会上首次被宣布,并且于2011年10月19日正式发布Android 4.0“雪糕三明治”操作系统和搭载Android 4.0的
Galaxy Nexus
智能手机。 Android 4.0.1的软件开发包于2011年10月19日正式发布。Google公司的发言人加布·科恩(Gabe Cohen)指出,Android 4.0“理论上”与任何一个当前市面上搭载了Android 2.3.x 版本的设备兼容。关于Android 4.0的
源代码
已于2011年11月14日正式公布。
该版本的主要更新内容如下:
- 统一了手机和平板电脑使用的系统,应用会自动根据设备选择最佳显示方式。
- 提升硬件的性能以及系统的优化,提升系统流畅度。
- 支持在系统中使用虚拟按键,该功能可以取代物理按键。
- 界面以新的标签页形式展示,并且将应用程序和其他内容的图标分类。
- 更方便地在主界面创建文件夹,并且使用“一拖”、“一放”的操作方式。
- 一个定制的启动器
- 改进的可视化语音邮件的能力,加快或减慢语音邮件。
- 在日历中也可以使用多点触控,进行缩放和拖拽操作。
- Gmail离线搜索,两行预览,和新的任务栏。
- 与其他第三方微博、博客类应用程序的无缝连接,实时更新的内容会被展示在主界面上。
- Gmail支持缩放操作,支持左拉、右拉进行查看。
- 增加截图功能(可以同时按住电源键和音量向下键进行截图操作)。
- 改进虚拟键盘可以产生的误操作
- 在锁屏状态下也可以对用户设置的某些应用程序进行操作
- 改进的复制、粘贴功能
- 更好的语音集成,实时录音,文本听写等语音功能。
- 脸部识别进行锁屏,可以通过脸部识别进行锁屏。
- 新标签页模式的网页浏览器,支持最大同时打开16个标签页。
- 自动同步用户手机中的网页书签,可以在桌面版Chrome和其他Android设备中进行同步。
- 全新的现代化Roboto字体
- 内置流量监控功能,用户可以对流量进行设置,超出设置流量时,手机会自动关闭上网功能,并且可以随时查看已使用和未使用的流量,并且以报表的形式展现出来以帮助用户了解使用情况。
- 能够随时关闭正在使用的应用程序
- 提升自带的相机功能
- 内置图片处理软件
- 新的图库软件
- 与其他第三方应用程序进行无缝衔接,用户可以在任何界面看到自己需要的消息和图像。
- 新的启动画面,主画面右下角类似Tray的图标,内有多个程序可运行。
- Google Search Bar会设置在最上方
- Apps/Widgets会类似Honeycomb模样
- 增加支持硬件加速的功能
- Wi-Fi直连功能
- 支持1080p视频播放和录制
Android 4.0.1 - 修复Android 4.0中的Bug。
Android 4.0.2
Android 4.0.2更新包于2011年11月28日正式发布,该更新包修复了存在于Verizon版本Galaxy Nexus中的Bug。
Android 4.0.3
Android 4.0.3更新包于2011年12月16日发布,包括修复Bug和系统的优化,并且针对图形、数据库、拼写检查、蓝牙功能和其他功能的改进。公布了新的API,包括联系人API,日历增强,新的摄像头应用程序,提高视频稳定和QVGA分辨率和辅助功能的改进,如屏幕的改进等。
Android 4.0.4
Android 4.0.4更新包于2012年2月6日发布,主要更新如下: - 更快的运行性能
- Android操作系统的漏洞(电池问题)修复
- 3G/4G切换改进
- 信号强度增强
- 新的Power菜单(与之前的4.0.2不同,接近4.0.3)
- 更快速启动
- 自动亮度调节功能改动,有了平滑的过渡。
- 重新调整了相机的Holding down按钮
- 多点触控的问题解决
- 自动旋转更迅速
- 浏览器的性能显著提高
- 最近应用程序列表打开更快速
- 相机UI的变化
- 音量增大
- 键盘问题修复
- 更新新闻及天气应用程序的UI
- 浏览器中的快速控制改进
Android 4.1/4.2/4.3 Jelly Bean
Android 4.1(Jelly Bean“果冻豆”)
- 不会内置Flash Player,并且Adobe声明停止开发,但可自行安装APK。
Android 4.3
2013年7月24日与Nexus 7平板二代同步发表,主要更新如下:
- 支持多用户登录,支持一台终端设备上有多个登录帐号。
- “蓝牙低功耗”功能,开启蓝牙后,耗电量相比之前大幅降低。
- 支持更多缓冲器对象
- 新版OpenGL ES 3.0着色语言,支持32 位整数和浮点数据类型以及操作。
- 增加多个纹理的支持,包括浮点纹理、深度纹理、顶点纹理等等。
- 多重渲染目标(Multiple Render Targets),让GPU一次性渲染多个纹理。
- 多重采样抗锯齿(MSAA Render To Texture),让3D物体的边缘不出现毛刺,可提升图像效果。
- 使用统一的纹理压缩格式ETC
- 增加TRIM指令,使得内置存储(Internal Storage)不会越用越慢。
- 新增App Opt功能(默认隐藏),允许用户强行解除已安装应用的特定权限。
Android 4.4 KitKat
- 支持低电耗音乐播放
- 全新的原生计步器
- 全新的NFC付费集成
- 全新的非Java虚拟机运行环境ART(Android Runtime)
- 支持Message Access Profile(MAP)
- 支持Chromecast及新的Chrome功能
Android 5.0 Lollipop
开发代号:Android L
2014年6月25日于Google I/O 2014大会上发布Developer版(Android L),之后在2014年10月15日正式发布且名称定为Lollipop“棒棒糖”。
采用全新Material Design界面
- 支持64位处理器
- 全面由Dalvik转用ART(Android Runtime)编译,性能可提升四倍
- 改良的通知界面及新增优先模式
- 预载省电及充电预测功能
- 新增自动内容加密功能
- 新增多人设备分享功能,可在其他设备登录自己账号,并获取用户的联系人、日历等Google云数据
- 强化网络及传输连接性,包括Wi-Fi、蓝牙及NFC
- 强化多媒体功能,例如支持RAW格式拍摄
- 强化“OK Google”功能
- 改善Android TV的支持
- 提供低视力的设置,以协助色弱人士
- 改善Google Now功能[2]
Android的6.0版本,即盛传已久的Android M已经在Google 2015年的 I/O大会上被正式发布。一个在业内已经被热议的议题是:Android M“为工作升级而生”(Android for Work Update)。有业内人士解释道:“Android M将把Android的强大功能拓展至任何你所能看到的工作领域。”
根据Android系统以往的惯例,每一代新系统往往会根据其字母代号,对应一个关于零食的全名。如2014年在Google I/O大会上发布的Android L,其代号“L”一开始还只是Google为开发者称呼方便而准备的一个代号,但后来逐步演变成了“Lollipop”(棒棒糖Android 5.0)。所以,按照这种命名的传统,Android [字母]这种新模式也将意味着,一款新口味Android“零食”即将出现。
Google I/O 2015大会如约已于2015年5月28日举行。在发布会上代号为“Marshmallow(棉花糖)”的安卓6.0系统正式推出。
主要新功能如下:
- 应用权限管理
- SD卡可能和内置存储“合并”
- Android Pay
- 原生指纹识别认证
- 自动应用数据备份
- App Links(尽量减少诸如“你想要使用什么来打开这个?”的提醒)
- 打盹和应用待机功能
- 原生4K输出支持
- 严格的APK安装文件验证
- 支持MIDI
- USB Type-C端口支持
Android 7.0 N
- 分屏多任务
- 新下拉快捷开关页
- 通知消息快捷回复
- 通知消息归拢
- 夜间模式
- 流量保护模式
- 改进的Doze休眠机制
- 菜单键快速应用切换
MATERIAL DESIGN Google I/O 2014
为了统一跨设备间的界面和交互,让用户得到连贯的体验。Material Design不再让像素处于同一个平面,而是让它们按照规则处于空间当中,具备不同的维度。按照Wired的话来说,那就是让像素具备海拔高度,这样子的话,系统的不同层面的元素,都是有原则、可预测的,不让用户感到无所适从,也避免开发者担心因为不同的视觉风格而产生冲突。
Material Design还规范了Android的运动元素,让按钮的弹入弹出,卡片的滑入滑出以及从一个界面变化成另一个界面的方法(比如从介绍一首歌的界面到控制播放的界面),都是秩序的、深思熟虑过的。Wired总结,Material Design中只有在高亮动作以及改变交互状态时,才会使用运动元素来表示。
对于现实世界中的隐喻,Material Design更加倾向于用色彩来提示。我们按下屏幕当中的按钮时,可以看到按钮颜色迅速发生变化,向石头投入湖面一样,产生了一波涟漪。杜瓦迪这样设计是因为Material Design中的按钮都处于一个平面,不再突起,因此它必须采用和以往不同的表示方法,以表明自己已经被按下。
Material Design所展示的模板当中,最显眼的是它的小圆点。它的作用好像iPhone上的Home键,是快捷功能入口,又是视觉上有趣的点缀。
然而,正如Material Design名字所暗示的,为了适应多尺寸的屏幕,杜瓦迪以及他的团队,寻求一种更加抽象的表达,一种存在屏幕里的显示“材料”。根据The Verge报道,杜瓦迪团队在面对Google产品里大量采用的卡片式设计时,灵感火花一闪:何不如这些“卡片”,想像成现实当中存在的,四处滑动的物体。
>
重磅教程!帮你全面彻底搞定MATERIAL DESIGN的学习笔记
>
Dalvik和ART运行时环境的区别
Dalvik
Dalvik虚拟机,是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即“Dalvik Executable”)格式的Java应用程序的运行。.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。Dalvik由Dan Bornstein编写的,名字来源于他的祖先曾经居住过的小渔村达尔维克(Dalvík),位于冰岛Eyjafjörður。
大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是寄存器机。两种架构各有优劣,一般而言,基于堆栈的机器需要更多指令,而基于寄存器的机器指令更长。
Dalvik经过优化后,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik应用作为一个独立的Linux进程执行,独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。其实就是每一个应用都是作为独自的虚拟机运行,与其他应用互不牵扯。目前在Android4.4及其以下的版本中,应该全都是使用的Dalvik这种模式。
ART (Android Runtime)
Android Runtime(缩写为 ART),是一种在Android操作系统上的运行环境,由Google公司研发,并在2013年作为Android 4.4系统中的一项测试功能正式对外发布,在Android 5.0及后续Android版本中作为正式的运行时库取代了以往的Dalvik虚拟机。ART能够把应用程序的字节码转换为机器码,是Android所使用的一种新的虚拟机。它与Dalvik的主要不同在于:Dalvik采用的是JIT技术,而ART采用Ahead-of-time(AOT)技术。 ART同时也改善了性能、垃圾回收(Garbage Collection)、应用程序除错以及性能分析。
JIT最早在Android 2.2系统中引进到Dalvik虚拟机中,在应用程序启动时,JIT通过进行连续的性能分析来优化程序代码的执行,在程序运行的过程中,Dalvik虚拟机在不断的进行将字节码编译成机器码的工作。 与Dalvik虚拟机不同的是,ART引入了AOT这种预编译技术,在应用程序安装的过程中,ART就已经将所有的字节码重新编译成了机器码。应用程序运行过程中无需进行实时的编译工作,只需要进行直接调用。因此,ART极大的提高了应用程序的运行效率,同时也减少了手机的电量消耗,提高了移动设备的续航能力,在垃圾回收等机制上也有了较大的提升。 为了保证向下兼容,ART使用了相同的Dalvik字节码文件(dex),即在应用程序目录下保留了dex文件供旧程序调用然而.odex文件则替换成了可执行与可链接格式(ELF)可执行文件。一旦一个程序被ART的dex2oat命令编译,那么这个程序将会指通过ELF可执行文件来运行。因此,相对于Dalvik虚拟机模式,ART模式下Android应用程序的安装需要消耗更多的时间,同时也会占用更大的储存空间(指内部储存,用于储存编译后的代码),但节省了很多Dalvik虚拟机用于实时编译的时间。
Google公司在Android 4.4中带来的ART模式仅仅是ART的一个预览版,系统默认仍然使用的是Dalvik虚拟机,4.4上面提供的预览版ART相对于Android 5.0以后的ART运行时库有较大的不同,尤其体现在兼容性上。
Dalvik虚拟机是Google等厂商合作开发的Android移动设备平台的核心组成部分之一。它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。(dx 是一套工具,可以将 Java .class 转换成 .dex 格式. 一个dex档通常会有多个.class。由于dex有时必须进行最佳化,会使档案大小增加1-4倍,以ODEX结尾。)
1、Dalvik 和标准 Java 虚拟机(JVM)的首要差别
Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。 JVM字节码中,局部变量会被放入局部变量表中,继而被压入堆栈供操作码进行运算,当然JVM也可以只使用堆栈而不显式地将局部变量存入变量表中。Dalvik字节码中,局部变量会被赋给65536个可用的寄存器中的任何一个,Dalvik指令直接操作这些寄存器,而不是访问堆栈中的元素。
2、Dalvik 和 Java 字节码的区别
VM字节码由.class文件组成,每个文件一个class。JVM在运行的时候为每一个类装载字节码。相反的,Dalvik程序只包含一个.dex文件,这个文件包含了程序中所有的类。Java编译器创建了JVM字节码之后,Dalvik的dx编译器删除.class文件,重新把它们编译成Dalvik字节码,然后把它们写进一个.dex文件中。这个过程包括翻译、重构、解释程序的基本元素(常量池、类定义、数据段)。常量池描述了所有的常量,包括引用、方法名、数值常量等。类定义包括了访问标志、类名等基本信息。数据段中包含各种被VM执行的函数代码以及类和函数的相关信息(例如DVM所需要的寄存器数量、局部变量表、操作数堆栈大小),还有实例变量。