第1章 Android应用开发概述

随着Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的操作系统。Android系统已经不仅仅是一款手机的操作系统,它越来越广泛的被应用于平板电脑、可佩戴设备、电视、数码相机等设备上,这也造就了目前Android开发人才需求的快速增长,从大趋势上看,Android软件人才的需求将越来越大。

从2007年11月5日谷歌公司正式向外界展示了这款名为Android的操作系统至今,Android已经经历了多个版本的更新,最新的版本为2016年5月18日发布的Android 7.0 开发者预览,在Android系统的命名方式上,谷歌一直按照字母表的方式来进行,并且选用的代号名称全部都为食物,比如Android 4.4 KitKat就是用巧克力的名字来命名的,而Android 5.0 Lollipop和Android 6.0 Marshmallow则分别用棒棒糖和棉花糖来命名。而作为下一代Android系统,Android N的正式名称现在也在征集当中。

1.1 Android发展史与现状

自Android系统首次发布至今,Android经历了很多的版本更新,下表列出了Android系统的不同版本的发布时间及对应的版本号:

Android版本

发布日期

代号

Android 1.1

Android 1.5

2009年4月30日

Cupcake(纸杯蛋糕)

Android 1.6

2009年9月15日

Donut(炸面圈)

Android 2.0/2.1

2009年10月26日

Eclair(长松饼)

Android 2.2

2010年5月20日

Froyo(冻酸奶)

Android 2.3

2010年12月6日

Gingerbread(姜饼)

Android 3.0/3.1/3.2

2011年2月22日

Honeycomb(蜂巢)

Android 4.0

2011年10月19日

Ice Cream Sandwich(冰淇淋三明治)

Android 4.1

2012年6月28日

Jelly Bean(果冻豆)

Android 4.2

2012年10月8日

Jelly Bean(果冻豆)

Android5.0

2014年10月15日

Lime Pie(酸橙派)

Android6.0

2015年9月30日

Marshmallow(棉花糖)

Android7.0

待定

L待定

Android系统是基于Linux的智能操作系统,2007年11月,Google与84家硬件制造商、软件开发商及电信运营商组建开发手机联盟,共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。也就是说Android系统是完整公开并且免费的,Android系统的快速发展,也与它的公开免费不无关系。

1.2 Android系统的架构与特性

1.2.1 Android系统架构

Android系统的底层是建立在Linux系统之上的,它采用软件叠层(Software Stack)的方式进行构建。使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低苟合,当下层发生改变的时候,上层应用程序无需做任何改变。

下图为Android系统的系统架构图:

如图可知,Android系统分为四个层,从高到底分别是:应用程序层(Application)、应用程序框架层(Application Framework)、系统运行库层(Libraries)和Linux内核层(Linux Kernel)。

Android操作系统可以在四个主要层面上分为5个部分:

1. 应用程序层(Application)

Android系统包含了一系列核心应用程序,包括电子邮件、短信SMS、日历、拨号器、地图、浏览器、联系人等。这些应用程序都是用Java语言编写。本书重点讲解如何编写Android系统上运行的应用程序,在程序分层上,与系统核心应用程序平级。

2. 应用程序框架层(Application Framework)

Android应用程序框架提供了大量的API供开发人员使用,Android应用程序的开发,就是调用这些API,根据需求实现功能。

应用程序框架是应用程序的基础。为了软件的复用,任何一个应用程序都可以开发Android系统的功能模块,只要发布的时候遵循应用程序框架的规范,其它应用程序也可以使用这个功能模块。

3. 系统运行库层(Libraries)

Android系统运行库是用C/C++语言编写的,是一套被不同组件所使用的函数库组成的集合。一般来说,Android应用开发者无法直接调用这套函数库,都是通过它上层的应用程序框架提供的API来对这些函数库进行调用。

下面对一些核心库进行简单的介绍:

Libc:从BSD系统派生出来的标准C系统库,在此基础之上,为了便携式Linux系统专门进行了调整。

Medio Framework:基于PacketView的OpenCORE,这套媒体库支持播放与录制硬盘及视频格式的文件,并能查看静态图片。

Surface Manager:在执行多个应用程序的时,负责管理显示与存取操作间的互动,同时负责2D绘图与3D绘图进行显示合成。

WebKit:Web浏览器引擎,该引擎为Android浏览器提供支持。

SGL:底层的2D图像引擎。

3D libraries:基于OpenGL ES 1.0API,提供使用软硬件实现3D加速的功能。

FreeType:提供位图和向量字体的支持。

SQLite:轻量级的关系型数据库。

4. Android运行时

Android运行时由两部分完成:Android核心库和Dalvik虚拟机。其中核心库集提供了Java语言核心库所能使用的绝大部分功能,Dalvik虚拟机负责运行Android应用程序。

虽然Android应用程序通过Java语言编写,而每个Java程序都会在Java虚拟机JVM内运行,但是Android系统毕竟是运行在移动设备上的,由于硬件的限制, Android应用程序并不使用Java的虚拟机JVM来运行程序,而是使用自己独立的虚拟机Dalvik VM,它针对多个同时高效运行的虚拟机进行了优化。每个Android应用程序都运行在单独的一个Dalvik虚拟机内,因此Android系统可以方便对应用程序进行隔离。

5. Linux内核

Android系统是基于Linux2.6之上建立的操作系统,它的Linux内核为Android系统提供了安全性、内存管理、进程管理、网络协议栈、驱动模型等核心系统服务。Linux内核帮助Android系统实现了底层硬件与上层软件之间的抽象。

1.2.2 Dalvik VM和JVM的区别

JVM(Java虚拟机)是一个虚构出来的运行Java程序的运行时,是通过在实际的计算机上仿真模拟各种计算机功能的实现。它具有完善的硬件架构(如处理器、堆栈、寄存器等),还具有相应的指令系统,使用JVM就是使Java程序支持与操作系统无关。理论上在任何操作系统中,只要有对应的JVM,即可运行Java程序。

Dalvik VM是在Android系统上运行Android程序的虚拟机,其指令集是基于寄存器架构的,执行特有的文件格式-dex字节码来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。

由于Android应用程序的开发编程语言是Java,而Java程序运行在JVM(Java虚拟机)上的,因此有些人会把Android的虚拟机DalvikVM和JVM弄混淆,但是实际上Dalvik并未遵守JVM规范,而且两者也是互不兼容。

从Dalvik VM和JVM的编译过程分析,它们的编译过程如下:

JVM:.java→.class→.jar

Dalvik VM:.java→.class→.dex

从它们的编译过程可以看出,JVM运行的是.class文件的Java字节码,但是Dalvik VM运行的是其转换后的dex(Dalvik Executable)文件。JVM字节从.class文件或者JAR包中加载字节码然后运行,而Dalvik VM无法直接从.class文件或JAR包中加载字节码,它需要通过DX工具将应用程序所有的.class文件编译成一个.dex文件,Dalvik VM则运行这个.dex文件。

下图显示了Dalvik VM与JVM编译过程的区别:

从图中可以看出,Dalvik VM把.java文件编译成.class后,会对.class进行重构,整合的基本元素(常量池、类定义、数据段),最后压缩写进一个.dex文件中。其中,常量池描述了所有的常量,包括引用、方法名、数值常量等;类定义包括访问标识、类名等基本信息;数据段中包含各种被VM指定的方法代码以及类和方法的相关信息和实例变量。这种把多个.class文件进行整合的方法,大大提高了Android程序的运行速度,例如:应用程序中多个类定义了字符串常量TAG,而在JVM中,会编译成多个.class文件,每个.class文件的常量池中,均包含这个TAG常量,但是Dalvik VM在编译成.dex文件之后,其常量池里只有一个TAG常量。

JVM和Dalvik VM还有一点非常重要的不同,就是基于的架构不同。JVM是基于栈的架构,而Dalvik VM是基于寄存器的架构。相对于基于栈的JVM而言,基于寄存器的Dalvik VM实现虽然牺牲了一些硬件上的通用性,但是它在代码的执行效率上要更胜一筹。一般来讲,VM中指令的解释执行的时间主要花费在以下三个方面:

分发指令;

访问运算数;

执行运算;

其中分发指令这个环节对性能的影响最大。在基于寄存器的Dalvik VM中,可以更有效的减少冗余指令的分发,减少内存的读写访问。

从JVM和Dalvik VM的区别上来说,Dalvik VM主要是针对Android这个嵌入式操作系统的特点进行了各种优化,使其更省电、更省内存、运行效率更高,但是牺牲了一些JVM的与平台无关的特性。实际上,Dalvik VM本就是为Android设计的,无需考虑其它平台的问题。这里只是介绍了JVM和Dalvik VM的两个重要的区别,毕竟本书并不是讲解Android内核的,这里只是点明Dalvik VM的特点,读者对这部分的内容了解即可。

1.2.3 Android系统平台的优势

Android系统相对于其它操作系统,有如下几点优势:

1. 开放性

首先就是Android系统的开放性,其开发平台允许任何移动终端厂商加入到Android联盟中来,降低了开发门槛,使其拥有更多的开发者,随着用户和应用的日益丰富,也将推进Android系统的成熟。同时,开放性有利于Android设备的普及以及市场竞争力,这样有利于消费者买到更低价位的Android设备。

2. 丰富的硬件选择

同样由于Android系统的开放性,众多硬件厂商可以推出各种的搭载Android系统的设备。现如今,Android系统不仅仅只是运行在手机上,越来越多的设备开始支持Android系统,如电视、可佩戴设备、数码相机等。

3. 便于开发

Google开放了Android的系统源码,提供了开发者一个自由的开发环境,不必受到各种条条框框的束缚。

4. Google服务的支持

Google公司作为一个做服务的公司,它提供了如地图、邮件、搜索等服务,Android系统可以对这些服务进行无缝的结合。

Android 培训课件编写--- 第1章 Android应用开发概述相关推荐

  1. Android 渗透测试学习手册 第一章 Android 安全入门

    第一章 Android 安全入门 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 Android 是当今最流行的智能手机操作系统之一. 随着人气的增加,它存在很多安全 ...

  2. 如何运行编好的Android程序,3. 编写的第一个android HelloWorld程序如何在手机上面调试运行...

    以前有用自己的手机开发过Android的小程序玩玩,现在又想学习下 opencv + android的开发,按照网上的教程配置了两天的环境了, 发现编写的HelloWorld程序在 avd4.2的设备 ...

  3. 太原理工 Web程序设计基础 学某通 (第二章 web前端开发概述)

    2.5 随堂测试已完成 1[单选题] 在下列选项中,不属于Web前端开发任务的是(    ). A. 页面布局 B. 页面交互 C. 通信协议 D. 页面特效 我的答案:C 2[单选题] HTML5是 ...

  4. 《Android开发艺术探索》读书笔记 (7) 第7章 Android动画深入分析

    本节和<Android群英传>中的第七章Android动画机制与使用技巧有关系,建议先阅读该章的总结 第7章 Android动画深入分析 7.1 View动画 (1)android动画分为 ...

  5. 《Android移动应用基础教程》(Android Studio)(第二版)黑马程序员 课后习题答案

    <Android移动应用基础教程>(Android Studio)(第二版)黑马程序员 课后习题答案 目录 第1章 Android基础入门 第2章 Android常见界面布局 第3章 An ...

  6. android虚拟机加载机制,深入解析Android虚拟机

    深入解析Android虚拟机 编辑 锁定 讨论 上传视频 <深入解析Android虚拟机>是2014年由清华大学出版社出版的图书,作者是张子言. 书    名 深入解析Android虚拟机 ...

  7. Android 渗透测试学习手册 第九章 编写渗透测试报告

    第九章 编写渗透测试报告 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们将学习渗透测试的最终和最重要的方面,撰写报告. 这是一个简短的章节,指导你在报 ...

  8. 第四章:Android灯光系统(3)-编写HAL

    在编写HAL代码之前,我们先回顾一下之前的硬件访问服务,安卓的应用程序是用java语音写的,如果想访问硬件,必须调用C函数,他怎么调用C函数呢? 1.loadLibrary( 加载C库),在C库中,他 ...

  9. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全

    第三章 Android 本地用户空间层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 本地用户空间层在 Android ...

最新文章

  1. 关于Exchang server 2010 MCITP
  2. Android 之一 Android Studio 安装、配置等新手入门 + 百度地图定位 + 移动摇杆 的实现
  3. 前后端分离如何解决跨域的问题?
  4. word-break|overflow-wrap|word-wrap——CSS英文断句浅析
  5. 【latex】最后一页 参考文献不平衡 左右不对齐
  6. 小学计算机课评价方案,小学信息技术课堂评价方法的研究
  7. Vue项目—请求函数的封装
  8. Spring 下注解说明
  9. jQuery Mobile_简单的爱情故事
  10. 如何在面试中发现优秀程序员
  11. Codeforces 988D Points and Powers of Two ( 思维 || 二的幂特点 )
  12. Arcgis Android 定位
  13. 【Android Studio】XUI框架的使用记录:源代码Demo安装+从Demo中获取捷径快速开发自己的APP
  14. 期货术语-关于升、贴水,点价,洗船
  15. 常见地图服务(WMS、WFS、WCS、TMS、WMTS
  16. UOJ449. 【集训队作业2018】喂鸽子 [概率期望,min-max容斥,生成函数]
  17. docker虚拟化容器技术
  18. 基于layui的后台管理模板
  19. 华为鸿蒙os2.0系统是什么,6月2日,华为鸿蒙2.0手机系统正式登场!苹果有什么动作?...
  20. pve更新源和离线下载安装包

热门文章

  1. uiuc的计算机工程硕士学费标准,伊利诺伊大学香槟分校学费及生活费一览(附美国学费最贵大学TOP20榜单)...
  2. 华为过程可信cib是指_【华为云技术分享】如何做一个优秀软件-可扩展的架构,良好的编码,可信的过程...
  3. 【消息】“莓果儿”QQ群
  4. gpio_typedef_超经典的STM32学习笔记——第一章GPIO口
  5. 如何用TextPad预览html,利用TextPad编辑代码的各种技巧
  6. 不止骗钱,还撸网贷,现在的诈骗犯真是越来越骚了
  7. java手机分辨率最高_主流手机分辨率 尺寸 操作系统
  8. 林纳斯·托瓦兹 Linus Torvalds
  9. 【C/C++牛客每日必刷】--- 牛客刷题系列
  10. 花半年的时间储备自己