移动设备开源平台 | Android 进阶之路
Android是什么
Android是一个针对移动设备的开源软件平台,该平台包括操作系统、中间件、用户界面和应用软件
Android历史
Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称。
Google还联合手机制造商、手机芯片厂商、移动运营商,共同于2007年11月组建一个全球性的联盟组织,称作开放手机联盟(Open Handset Alliance),共同来开发Android。
Android SDK(Software Development Kit, 即软件开发工具包)
Android SDK提供了在Android平台上使用Java语言进行Android应用开发必须的工具和API接口。
Android能干什么
下面罗列了一些Android的特性,包含但不限于:
1:应用程序框架,支持组件的重用与替换
2:Dalvik虚拟机 专门为移动设备做了优化
3:内部集成浏览器,该浏览器基于开源的WebKit引擎
4:优化的图形库:包括2D和3D图形库,3D图形库基于OpenGL ES(硬件加速可选)
5:SQLite用作结构化的数据存储
6:多媒体支持 包括常见的音频、视频和图片文件格式 (如 MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
7:GSM电话 (依赖于硬件)
8:蓝牙Bluetooth, EDGE, 3G, and WiFi (依赖于硬件)
9:照相机,GPS,指南针,和加速度计 (依赖于硬件)
10:丰富的开发环境 包括设备模拟器,调试工具,内存及性能分析图表,和Eclipse集成开发环境插件
Android有什么
Linux内核
Android 的核心系统服务依赖于Linux的内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。Linux 内核也同时作为硬件和软件栈之间的抽象层。
本机库
在linux内核上面是Android本机库,就是libraries,这些本机共享库都是由c/c++编写的,针对硬件进行了编译,并由手机制造商预先安装到手机上。
这些库能被Android系统中不同的组件使用,它们通过 Android 应用程序框架为开发者提供服务。
以下是一些核心库:
1:界面管理器(surface manager):它并不是将显示内容直接绘制到屏幕缓冲区,而是将绘制命令传递给屏幕外的位图,然后将该位图和其他位图组合起来,形成用户看到的内容,这种方法允许系统实现所有有趣的功能,如透明窗口和奇特的过渡效果。
2:2D和3D图形:使用Android的时候,二维和三维图象可以结合到一个用户界面上,库将使用3D硬件(如果有的话)或者快速软件渲染器。
3:多媒体编解码器:Android可以播放视频内容,并可以使用各种格式录制和播放音频:如AAC、AVC(H.264)、H.263、MP3、MPEG-4
4:sql数据库:SqlLite,一个轻量级的关系数据库引擎,firefox和iphone中也是使用的它。
5:浏览器引擎:webkit , Google的chrome,苹果的Safari浏览器,iphone,诺基亚的s60平台都是用的它
6:系统 C 库:一个从 BSD 继承来的标准 C 系统函数库( libc ), 它是专门为基于 embedded linux 的设备定制的。
7:SGL:底层的2D图形引擎
8:3D libraries:基于OpenGL ES;该库可以使用硬件 3D加速(如果可用)或者使用高度优化的3D软加速。
9:FreeType:位图(bitmap)和矢量(vector)字体显示。
运行时环境
运行时环境包括:java的核心类库,虚拟机Dalvik,Dalvik与传统的Java虚拟机不同在于:
1:Dalvik 基于寄存器,而JVM 基于栈。,基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
2:Dalvik运行.dex文件,编译时会将class和jar文件转换成为.dex,.dex文件比class文件更紧凑更高效,这是针对Android设备内存有限且通过电池供电,能耗要低的特点作出的重大改进。
3:Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭.
4:Android附带的Java库与传统的java库也有很多的不同,当然也有很大一部分相同,做了很多改进。
应用程序框架
应用程序框架提供了应用程序开发所需要的大部分基础功能,包括:
1:活动管理器(Activity Manager):用来控制应用程序生命周期,同时维护一个公共的后退栈(back stack)供用户使用
2:内容提供者(Content Providers):用来封装需要在应用程序之间共享的数据,如联系人信息等
3:资源管理器(Resource Manager):资源是指的程序中涉及的任何非代码的内容
4:位置管理器(Location Manager):用来处理关于位置的功能,比如GPS
5:通知管理器(notification Manager):像收到短信、邻近预约时间、临界状态报警、异常入侵等事件都可以以友好的方式通知用户
6:视图系统(View System),丰富而又可扩展的视图组件,可以用来构建应用程序, 它包括列表(lists),网格(grids),文本框(text boxes),按钮(buttons),甚至可嵌入的web浏览器等。
7:窗口管理器(Window Manager):用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。
8:包管理器(Package Manager):用来封装所有基于加载信息的数据结构,安装卸载应用查询permission相关信息;查询Application相关信息(application,activity,receiver,service,provider及相应属性等)
9:电话管理器(Telephony Manager):用来管理所有与电话相关的操作以及相应事件的管理
Android的HelloWorld
构建环境
1:安装JDK6以上
2:下载Android的SDK Manager,通过这个软件来进行初次的Android的SDK下载和管理。 安装完SDK后,要把sdk\tools设置到path里面去。
3:安装Eclipse,最好安装最新版
4:安装ADT插件,在插件安装后,要设置SDK的位置,在window—〉preference—〉android选项里面,右边有一个SDK Location的配置。
5:创建Android虚拟设备,也就是AVD,在window—〉Android SDK and AVD Manager里面创建一个新的AVD。
SDK下包的说明
1:add-ons:Android开发需要的第三方文件和软件库
2:docs:Android的文档。包括开发指南、API参考、资源等
3:extras:扩展的附加包
4:platforms:你安装下载的所有Android平台,分版本存放
5:platform-tools:平台相关的工具
6:samples:所有的样例程序
7:system-images:系统使用的图片
8:temp:临时操作或缓存的目录
9:tools:应用Android平台进行开发所需要的一些开发工具
常见的api包说明
1:android.app :提供高层的程序模型、提供基本的运行环境
2:android.content :包含各种的对设备上的数据进行访问和发布的类
3:android.database :通过内容提供者浏览和操作数据库
4:android.graphics :底层的图形库,包含画布,颜色过滤,点,矩形,可以将他们直接绘制到屏幕上.
5:android.location :定位和相关服务的类
6:android.media :提供一些类管理多种音频、视频的媒体接口
7:http://android.net :提供帮助网络访问的类,超过通常的java.net.* 接口
8:android.os :提供了系统服务、消息传输、IPC 机制
9:android.opengl :提供OpenGL 的工具
10:android.provider :提供类访问Android 的内容提供者
11:android.telephony :提供与拨打电话相关的API 交互
12:android.view :提供基础的用户界面接口框架
13:android.util :涉及工具性的方法,例如时间日期的操作
14:android.webkit :默认浏览器操作接口
15:android.widget :包含各种UI 元素(大部分是可见的)在应用程序的屏幕中使用
创建一个Android工程
项目的目录结构说明如下:
1:assets :存放原生文件,这个目录保存的文件可以打包在程序里。和res的不同点是,android不为assets下的文件生成ID,如果使用assets下的文件,需要指定文件的路径和文件名。
2:bin : Java编译输出的路径
3:gen :存放android编译资源文件自动生成的R文件。
4:res :存放程序所需要的资源文件,也就是非Java的文件。常见的目录有:
(1)res/animator/ :XML文件,定义动画属性
(2)res/anim/ :XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象
(3)res/color/:XML文件,定义颜色状态的列表
(4)res/layout/:存放被编译为屏幕布局(或屏幕的一部分)的XML文件
(5)res/menu/:XML文件,用来定义应用的菜单
(6)res/drawable/:存放图片文件,如.png, .9.png, .jpg, .gif等。放在这里的图像资源可能会被aapt(android assert packaging tool,android资源打包工具)自动地进行无损压缩优化。如果你不想图片被压缩改变,请把图像文件放在 res/raw/目录下,这样可以避免被自动优化。
(7)res/raw/:直接复制到设备中的任意文件,它们无需编译
(8)res/values/:存放可以被编译成很多种类型的资源文件, XML 格式的。常见的文件有:
array.xml :定义数组 colors.xml :定义color drawable和颜色的字符串值。 dimens.xml 定义尺寸值(dimension value)。 strings.xml 定义字符串(string)值。 styles.xml定义样式(style)对象。
(9)res/xml/:任意的XML文件,在运行时可通过调用Resources.getXML()读取。
5:src : 存放Java源代码
项目的清单文件AndroidManifest.xml :这个清单给Android系统提供了关于这个应用程序的基本信息,系统在能运行任何程序代码之前必须知些信息。AndroidManifest.xml主要包含以下功能:
(1)命名应用程序的 Java 包,这个包名用来唯一标识应用程序
(2)描述应用程序的组件:活动,服务,广播接收者,以及组成应用程序的内容提供器;对实现每个组件和公布其能力(比如,能处理哪些意图消息)的类进行命名。这些声明使得 Android系统了解这些组件以及在什么条件下可以被启动;
(3)决定应用程序组件运行在哪个进程里面
(4)声明应用程序所必须具备的权限,用以访问受保护的部分 API,以及和其它应用程序交互;
(5)声明应用程序其他的必备权限,用以组件之间的交互;
(6)列举测试设备Instrumentation类,用来提供应用程序运行时所需的环境配置和其他信息,这些声明只是在开发和测试阶段存在,发布前将被删除
(7) 声明应用程序所要求的Android API的最低版本级别;
(8)列举application所需要链接的库
在strings.xml修改hello对应的字符串
启动模拟器开始测试运行
认识模拟器和DDMS
DDMS:Dalvik Debug Monitor Server ,Dalvik调试监视器服务,它支持端口转换(因此你可以在IDE中给你的代码下端点),支持抓取模拟器屏幕,线程和堆栈信息,以及许多其他功能。
logcat:转储系统信息,这些信息包括,模拟器抛出错误时堆栈的运行过程以及日志信息。