第一天(20160131)
第1章 Android应用与开发环境
一、本章知识点概述:
1、搭建和使用Android应用开发环境,包括安装Android SDK、Android开发工具;也包括如何使用Android提供的ADB、DDMS、AAPT、DX等工具。
二、Android平台架构及特性
Android系统的底层建立在Linux系统之上,该平台由操作系统、中间件、用户界面和应用软件4层组成,它采用一种被称为软件叠层(Software Stack)的方式进行构建。这种软件叠层结构使得层与层之间相互分离,明确各层的分工。这种分工保证了层与层之间的低耦合,当下层的层内或层下发生改变时,上层应用无须任何改变。
图1.1显示了Android系统的体系结构。
从图中可以看出,Android系统主要有5部分组成,下面分别对这5部分进行简单介绍。
1、应用程序层
Android系统将会包含一系列的核心应用程序(也就是Android系统自带的一些程序),包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人等。这些应用程序都是用Java编写的。Android应用程序开发也主要是开发这些应用程序。
2、应用程序框架
当我们开发Android应用程序时,就是面向应用程序框架进行的。Android系统上的应用程序都是完全平等的,不管是Android系统自带的应用程序,还是普通开发者开发的程序,都可以访问Android体统的API框架。
Android应用程序框架提供了大量API供开发者使用。
应用程序框架除可作为应用程序开发的基础之外,也是软件复用的重要手段,任何一个应用程序都可发布它的功能模块—只要发布时遵守了框架的约定,那么其他应用程序也可以使用这个功能模块。
隐藏在每个应用后面的是一系列的服务和系统, 其中包括;
* 丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器。
* 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据
* 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件( layout files )。
* 通知管理器 (Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。
* 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。
3、函数库和Android运行时
1)、函数库
Android包含一套被不同组件所使用的C/C++库的集合。一般来说,Android应用开发者不能直接调用这套C/C++库集,但可以通过它上面的应用程序框架来调用这些库。
以下是一些核心库:
* 系统 C 库 - 一个从 BSD 继承来的标准 C 系统函数库( libc ),它是专门为基于 embedded linux 的设备定制的。
* 媒体库 - 基于 PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
* Surface Manager - 对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
* LibWebCore - 一个最新的web浏览器引擎用,支持Android浏览器和一个可嵌入的web视图。
* SGL - 底层的2D图形引擎
* 3D libraries - 基于OpenGL ES 1.0 APIs实现;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
* FreeType -位图(bitmap)和矢量(vector)字体显示。
* SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
2)、Android运行时
Android运行时由两部分组成:Android核心库集和Dalvik虚拟机。核心库集提供了Java语言核心库所能使用绝大部分功能,而虚拟机则负责运行Android应用程序。
每个Android运用程序都运行在单独的Dalvik虚拟机内(即没个 Android应用程序对应一个Dalvik进程),Dalvik专门针对同时高效地运行多个虚拟机进行了优化,因此Android系统可方便的实现对应用程序进行隔离。(每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行(.dex)的Dalvik可执行文件,该格式文件针对小内存使用做了优化。同时虚拟机是基于寄存器的,所有的类都经由JAVA编译器编译,然后通过SDK中的 "dx" 工具转化成.dex格式由虚拟机执行。
)
由于Android应用程序的编程语言是Java,因此有些人会把Dalvik虚拟机和JVM搞混,但实际上二者存在区别:Dalvik并未完全遵守JVM规范.两者也不兼容。实际上JVM虚拟机运行的是Java字节码(通常就是.class文件),但Dalvik运行的是其专有的dex(Dalvik Executable)文件。JVM直接从.class文件或JAR包中加载字节码然后运行;而Dalvik则无法直接从.class文件或JAR包中加载字节码,它需要通过DX工具将应用程序的所有.class文件编译成.dex文件,Dalvik则运行该.dex文件。
Dalvik虚拟机非常适合在移动终端上使用,相对于在Pc或服务器上运行的虚拟机而言,
Dalvik虚拟机不需要很快的CPU计算速度和大量的内存空间。它主要有如下两个特点。
Ø 运行专有的.dex文件。专有的dex文件减少了.class文件中的冗余信息,而且会把所有.class文件整合到一个文件中,从而提高运行性能;而且DX工具还会对.dex文件进行一些性能的优化。
Ø 基于寄存器实现。大多数虚拟机(包括JVM)都是基于栈的,而Dalvik虚拟机则是基于寄存器的。一般来说,基于寄存器的虚拟机具有更好的性能表现,但在硬件通用性上略差。
Dalvik虚拟机依赖于Linux内核提供的核心功能,如线程和底层内存管理。
4、Linux内核
Android系统建立在Linux 2.6之上。Linux内核提供了安全性、内存管理、进程管理、
网络协议栈和驱动模型等核心系统服务。除此之外,Linux内核也是系统硬件和软件叠层之
问的抽象层。