Android系列教程之前言
内容转载自我自己的博客
目前安卓的主流开发语言是Java,在正式开始Android系列的教程之前,需要知道一些基本内容
Android介绍
Android['ændrɔid] 是一个基于Linux 内核的开放源代码移动操作系统,由Google 成立的Open Handset Alliance(OHA,开放手持设备联盟)持续领导与开发,主要设计用于触屏移动设备如智能手机和平板电脑与其他便携式设备
Android 一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'Ève future)中,他将外表像人的机器人取名为Android 。 Android 是一个全身绿色的机器人,颜色采用了PMS 376C和RGB 中十六进制的#A4C639来绘制,这是Android 操作系统的品牌象征
Android OS(Operating System)使用开放免费代码许可证,一切代码为公开免费的。Google 将Android 的大部分以Apache开源条款2.0 发布,剩下的Linux内核部分则继承GPLv2 许可
Android 操作系统是完全免费开源的,任何厂商都不须经过Google 和开放手持设备联盟的授权随意使用Android 操作系统
2005年7月11日,Google 收购了Android 科技公司,Android 科技公司成为Google 旗下的一部分
设计架构
Linux内核
Android OS 的核心属于Linux 内核的一个分支,具有典型的Linux 调度和功能。除此之外,Google 为了能让Linux 在移动设备上良好的运行,对其进行了修改和扩充。Android 去除了Linux 中的本地X Window System ,也不支持标准的GNU 库,这使得Linux 平台上的应用程序移植到Android 平台上变得困难
应用程序
Android 系统是基于Linux 内核开发,使用Java 作编程语言,使界面到功能,都有层出不穷的变化。Activity 类负责创建视窗,一个活动中的Activity 就是处于Foreground 模式,而在Background 执行的程序一般叫做Service 。两者之间透过ServiceConnection 和AIDL 连结,达到多个程序同时执行的效果。如果执行中的Activity 全部画面被其他Activity 取代时,该Activity 便被暂停,放入回退栈中
View 是视图,可以透过View 类与“XML layout” 将UI 放置在视窗上,并可以利用View 打造出所谓的Widgets ,其实Widget 只是View 的一种,所以可以使用xml 来设计layout 。至于ViewGroup 是各种layout 的基础抽象类别,ViewGroup 之内还可以有ViewGroup 。View 的构造函数不需要在Activity 中调用,但是Displayable 的是必须的,在Activity 中,要通过findViewById() 来从XML 中获取View ,Android 的View 类的显示很大程度上是从XML 中读取的。View 与事件息息相关,两者之间透过Listener 结合在一起,每一个View 都可以注册event listener ,例如:当View 要处理用户触碰的事件时,就要向Android 框架注册View.OnClickListener
HAL(硬件抽象层)
Android 的硬件抽像层是能以封闭源码形式提供硬件驱动模块。HAL 的目的是为了把Android framework 与Linux kernel 隔开,让Android 不至过度依赖Linux kernel 。
HAL stub 是一种代理人的概念,stub(代理人) 是以*.so 档的形式存在。Stub 向HAL “提供”操作函数,并由Android runtime 向HAL 获取stub 的操作,再回调这些操作函数。HAL 里包含了许多的stub 。Runtime 只要说明“类型”,即module ID ,就可以获取操作函数
虚拟机
虚拟机是操作系统与应用程序的沟通桥梁,4.4版之前使用特殊的Dalvik 虚拟机器,5.0版起改用Android Runtime(ART)。下面主要介绍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 虚拟机用于实时编译的时间
安全机制
Android 操作系统使用了沙箱(SandBox)机制,所有的应用程序都会先被简单地解压缩到沙箱中进行检查,并且将应用程序所需的权限提交给系统,并且将其所需权限以列表的形式展现出来,供用户查看。用户可以根据权限来考虑自己是否需要安装,只有在用户同意了应用程序权限之后,才能进行安装。普通用户只能在应用程序安装时确认并肯定允许程序申请相应权限以继续安装或拒绝安装;应用程序开发商也会可能申请程序并不必需的权限,或者申请使用涉及用户隐私的权限并暗中收集、使用、发送用户隐私数据回开发商服务器用于信息收集。从Android 6.0 开始,系统启用原生应用程序权限控制,允许程序安装后仍能对特定类别的权限使用进行启闭,如果应用程序的某组权限使用被关闭并准备访问相应权限控制对应的方法时系统会询问用户是否允许
专利纠纷
Android 所使用的开发语言平台Java 是Oracle(甲骨文)公司研制的,早在2010年8月,Oracle 就开始对Google 无授权使用Java 语言实现侵犯了公司的专利在美国加州北区地方法院提起控诉,接下来的六年间,两者打了很多场官司,不分胜负。2016年8月22日,Google 在最新的Android 7.0 Nougat 中,将专利的JDK 替换成开源方案的OpenJDK ,以彻底解决Java 的专利问题
发行版本
API以及版本号、英文代号、中文代号、以及发布时间如下:
| API | 版本号 | 代号(英) | 代号(中) | 日期 |
|---|---|---|---|---|
| 01 | 1.0 | 无 | 无 | 2008.09.23 |
| 02 | 1.1 | Petit Four | 花色小蛋糕 | 2009.02.02 |
| 03 | 1.5 | Cupcake | 纸杯蛋糕 | 2009.04.30 |
| 04 | 1.6 | Donut | 甜甜圈 | 2009.09.15 |
| 05 | 2.0 | Éclair | 松饼 | 2009.10.26 |
| 06 | 2.0.1 | Éclair | 松饼 | 2009.12.03 |
| 07 | 2.1 | Éclair | 松饼 | 2010.01.12 |
| 08 | 2.2.0-2.2.3 | Froyo | 冻酸奶 | 2010.05.20 |
| 09 | 2.3.0-2.3.2 | Gingerbread | 姜饼 | 2010.12.07 |
| 10 | 2.3.3-2.3.7 | Gingerbread | 姜饼 | 2011.09.02 |
| 11 | 3.0 | Honeycomb | 蜂巢 | 2011.02.02 |
| 12 | 3.1 | Honeycomb | 蜂巢 | 2011.05.10 |
| 13 | 3.2 | Honeycomb | 蜂巢 | 2011.07.15 |
| 14 | 4.0.0-4.0.2 | Ice Cream Sandwich | 冰淇淋三明治 | 2011.10.19 |
| 15 | 4.0.3-4.0.4 | Ice Cream Sandwich | 冰淇淋三明治 | 2012.02.06 |
| 16 | 4.1 | Jelly Bean | 果冻豆 | 2012.06.28 |
| 17 | 4.2 | Jelly Bean | 果冻豆 | 2012.10.30 |
| 18 | 4.3 | Jelly Bean | 果冻豆 | 2013.07.25 |
| 19 | 4.4.0 | KitKat | 奇巧 | 2013.10.31 |
| 20 | 4.4.4 | KitKat Watch | 奇巧 | 2014.06.20 |
| 21 | 5.0 | Lollipop | 棒棒糖 | 2014.10.16 |
| 22 | 5.1 | Lollipop | 棒棒糖 | 2015.03.10 |
| 23 | 6.0 | Marshmallow | 棉花糖 | 2015.10.05 |
| 24 | 7.0 | Nougat | 牛轧糖 | 2016.08.22 |
| 25 | 7.1 | Nougat | 牛轧糖 | 2016.10.04 |
| 26 | 8.0 | Oreo | 奥利奥 | 2017.08.21 |
| 27 | 8.1 | Oreo | 奥利奥 | 2017.12.05 |
| 28 | 9 | Pie | 派 | 2018.08.06 |
常见分支版本
LineageOS、YunOS、Fire OS、360OS、Flyme OS、Funtouch OS、氢OS、LeWa OS、XobotOS、Resurrection Remix OS、MIUI(米柚)、华为EMUI、Zen UI、Hive UI、LG Optimus UI、HTC Sense、三星TouchWiz、MoKee(魔趣)、Nokia X Software Platform、OPhone、AOKP、Baidu Yi、Barnes & Noble Nook、CyanogenMod、Replicant、OmniROM
Android系列教程之前言的更多相关文章
- 【Android进阶系列教程】前言
起因 因为初学Android的时候还没有写博客的意识,现在Android的门是入了,正在进阶的道路上行走,但是就这一路也走了不少的弯路.我想,总得来说Android入门还是比较容易的,网络资源比较丰富 ...
- Android系列教程(十六) 在电脑上装Android
[软件准备] 1.LiveAndroid v0.3 liveCD [点击下载] 2.VirtualBox 3.0.4 [点击下载] [图片安装流程] 主要安装思路为:通过vir ...
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- Android Studio系列教程六--Gradle多渠道打包
Android Studio系列教程六--Gradle多渠道打包 2015 年 01 月 15 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzh ...
- Android Studio系列教程五--Gradle命令详解与导入第三方包
Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...
- Android Studio系列教程四--Gradle基础
Android Studio系列教程四--Gradle基础 2014 年 12 月 18 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang ...
- Android Studio系列教程三--快捷键
Android Studio系列教程三--快捷键 2014 年 12 月 09 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://stormzhang.com/ ...
- Android Studio系列教程二--基本设置与运行
Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...
- 一个异常与Android Studio系列教程参考
由于编译过程中遇到了错误:
随机推荐
- DataVeryLite入门教程(一) 配置篇
DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. ...
- CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写
互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...
- JavaScript 一元正号运算符
本文适合JavaScript初学者. 一元正号介绍 一元正号运算符(+)位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值. 尽管一元负号也能转换非数值类型,但是一 ...
- 简单介绍几种Java后台开发常用框架组合
01 前言 Java框架一直以来都是面试必备的知识点,而掌握Java框架,不管在成熟的大公司,快速发展的公司,还是创业阶段的公司,都能对当前正在开发中的系统有整体的认知,从而更好的熟悉和学习技术,这篇 ...
- 10 table标签
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- jmeter安装与部署
1.JDK组件安装 jmeter是一款java开发的测试软件,需要JDK运行环境支持,因此在安装jmeter前需要安装调试好jdk运行环境.jmeter3.2需要1.8以上版本jdk才可以正常运行.首 ...
- spring 5.x 系列第11篇 —— 整合memcached (xml配置方式)
文章目录 一.说明 1.1 XMemcached客户端说明 1.2 项目结构说明 1.3 依赖说明 二.spring 整合 memcached 2.1 单机配置 2.2 集群配置 2.3 存储基本类型 ...
- spring cloud 系列第5篇 —— hystrix+turbine 服务的熔断与监控 (F版本)
源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.hystrix 简介 1.1 熔断器 在分布式系统中,由于服务之间相互 ...
- 【需要重新维护】Redis笔记20170811视频
很多内容都是抄的,个人记录 1.windows下初见 安装 进入目录 修改配置文件(暂时使用默认,未配置环境变量) 目录下:redis-server.exe启动服务 新建命令提示符,目录下,redis ...
- 机器学习经典算法之PageRank
Google 的两位创始人都是斯坦福大学的博士生,他们提出的 PageRank 算法受到了论文影响力因子的评价启发.当一篇论文被引用的次数越多,证明这篇论文的影响力越大.正是这个想法解决了当时网页检索 ...