Android系统版本发展

最初由Andy Rubin开发,主要支持手机。
2005年8月Google收购注资
2007年11月,Google与多家硬件制造商、软件开发商、电信运营商组建开放手机联盟共同研发Android系统。随后以Apache开源许可证的授权方式,发布了Android的源代码。
2008年10月,第一部Android手机发布。从此Android开始迅猛发展。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一
2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。
今天,Android手机依然在发展。

2008年09月Android 1.0Astro铁臂阿童木
2009年02月Android 1.1 Bender发条机器人
2009年04月Android 1.5 Cupcake纸杯蛋糕
2009年09月Android 1.6 Donut 甜甜圈
2009年12月Android 2.0/2.1Eclair 巧克力泡夫
2010年05月Android 2.2 Froyo冻酸奶
2010年12月Android 2.3 Gingerbread 姜饼
2011年02月Android 3.0 Honeycomb蜂巢
2011年10月Android 4.0lce Cream Sandwich 雪糕三明治
2012年10月Android 4.1/4.2/4.3 Jelly Bean 果冻豆
2013年09月Android 4.4KitKat 奇巧
2014年06月Android 5.0Lollipop棒棒糖
2015年05月Android 6.0Marshmallow 棉花糖
2016年8月Android 7.0Nougat(牛轧糖)
2017年8月 Android 8.00reo(奥利奥)
2018年5月 Android 9.0 Pie(派)
2019年3月 Android 10.0(Android Q)
2019年10月Android 11.0(Android R)
英文官网:https://www.android.com
中文官网:https://developer.android.google.cn/

◆ROM-国外手机原创镜像
◆1.CyanogenMod
http://www.cyanogenmod.org/(团队解散,已无法访问)
https://lineageos.org/(CyanogenMod团队核心打造)

◆ROM-国内镜像集合
http://www.romzj.com/(已关闭)
http://rom.7to.cn/

◆刷机工具
刷机精灵(已关闭)
刷机大师

Android与ios对比

image.png

image.png

Android地下产业链

◆恶意吸费
◆广告、恶意推广
◆诱骗欺诈
◆隐私窃取
◆安装包分析

Android系统架构【重要】

4.4之前的架构

4层
image.png

最底层

Android对Linux操作系统的使用包括核心和驱动程序两部分:
1.核心为Linux2.6(现在安卓下的linux不再纯粹了)
2.驱动:显示驱动,照相机驱动,蓝牙驱动,Flash内存驱动,Binder IPC驱动,USB驱动,键盘驱动,Wifi驱动,音频驱动,能源驱动

Android运行时环境

Android 核心库:提供了JAVA库的大多数功能
Dalvik 虚拟机:基于寄存器的虚拟机,执行的是Dex文件。在执行过程中,每一个应用程序即一个进程(Linux的一个Process)。

类库

◆一些C/C++核心库,方便开发者进行应用的开发。
◆系统C库(libc):专门为基于embedded linux的设备定制的
◆媒体库:支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
◆SurfaceManager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合
◆webkit/LibWebCore:Web 浏览引擎,支持Android 浏览器和一个可嵌入的web视图
◆SGL:底层的20图形引擎
◆3D libraries:基于0penGL ES 1.0APIs实现的30引擎
◆FreeType:位图(bitmap)和矢量(vector)字体显示
◆SQLite:轻型关系型数据库引擎

应用程序框架

◆开发者可以用它开发应用,其中包括:
◆丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器。
◆内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库)或者共享它们自己的数据
◆资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串,图形,布局文(layoutfiles)
◆通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息
◆活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航回退功能。(JAVA编写)

应用程序

同Android系统一起发布的核心应用程序,如email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。(JAVA编写)

新架构

相当于在运行时环境和类库中多了一个硬件抽象层,然后虚拟机变成了art
分为五层
◆Application层
◆Framework层
·Library层
◆HAL层
◆Linux内核层

image.png

Android虚拟机与JAVA虚拟机区别

◆Android虚拟机:dalvik虚拟机(达尔维克)
◆Android系统上运行的Android APP是在dalvik虚拟机上
◆JavaSE的桌面程序运行在Java虚拟机(JVM)上
◆Google重写编写虚拟机的原因
◆1.版权问题
◆2.原生的Java虚拟机在移动设备上速度慢,能耗大
◆两者区别:
◆1.识别的文件类型不一样
JVM识别的是class jar包(多个class的压缩包)dalvik识别的是dex文件,只是一个文件
◆2.架构不同
JVM是基于堆栈(内存)的
dalvik是基于寄存器(cpu)的

Java程序、安卓程序的运行流程

java

java程序执行过程分为两步,下图为流程示意图
第一步:将java源码(.java文件)通过编译器(javac.exe)编译成JVM文件(.class文件)
第二步:将JVM文件通过java.exe执行,输出结果
image.png
Java代码编译和执行的整个过程: https://www.cnblogs.com/fengyiliang/p/10030092.html

android

一般由java编写,但最终由Dalivk虚拟机执行的并不是java字节码,而是dalivk字节码。
class字节码最终被编译成class文件,而dalivk 字节码最终被优化合并成dex文件,dex是一个可执行文件,可以直接由Dalvik虚拟机解释执行。
Dalvik虚拟机主要特点:
1. Dalvik并不使用普通的java字节码文件,使用自己的dex文件格式
2. Dalvik基于寄存器,而普通的JVM基于栈
基于寄存器的优势: 在编译时提前优化代码,而不是在运行时 ,所以dalvik的应用程序需要编译的时间会长些。
image.png
Android程序运行的Dalivk和Java程序运行的JVM虚拟机的区别?:https://blog.csdn.net/u014625701/article/details/49590745

Android ART模式

◆ART(android runtime):android 4.4才开始有的
◆原理:
◆在应用程序安装的时候,就把.dex文件编译成为系统所能识别的文件。
◆大大提升了android应用程序的执行效率
◆Android 5.0的时候已经全面使用ART

image.png