Android技术文档.docx
- 文档编号:7315109
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:13
- 大小:410.48KB
Android技术文档.docx
《Android技术文档.docx》由会员分享,可在线阅读,更多相关《Android技术文档.docx(13页珍藏版)》请在冰豆网上搜索。
Android技术文档
Android技术文档
信息安全与智能技术实验室所有
颁布时间:
[2011.1.16]
版本号:
1.0
目录
一.Android平台介绍2
二.Android开发环境搭建2
三.Android的系统架构2
3.1架构详解3
3.1.1LinuxKernel3
3.1.2AndroidRuntime3
3.1.3Libraries3
3.1.4ApplicationFramework4
3.1.5Applications4
四.Android项目目录结构5
五.开发组件介绍5
5.1Activity类5
5.2Intent类6
5.3ContentProvider类6
5.4Service类6
5.5Handle类6
六.项目实战7
6.1上学期围绕在Android平台下,所学内容请见下表7
6.2实例介绍8
6.2.1收发短信截图8
6.2.2文件资源管理器9
6.2.3Mp3Player截图9
6.2.4浏览器实例截图10
6.2.5系统服务接口截图11
七参考资料11
&一.Android平台介绍
Android作为Google移动互联网战略的重要组成部分,将进一步推进“随时随地为每个人提供信息”这一企业目标的实现。
Google的目标是让移动通信不依赖于设备,甚至是平台。
出于这个目的,Android将完善而不是替代Google长期以来推行的移动发展战略。
通过与全球各地的手机制造商和移动运营商成为合作伙伴,开发即使用又有吸引力的移动服务,并推广这些产品。
Android将会是Google云计划的一个“单纯的”输入输出平台。
&二.Android开发环境搭建
MyEclipse+ADT+SDK(+NDK),这一部分内容不做详细介绍,请参见网络文档。
&三.Android的系统架构
图1Android系统结构图
3.1架构详解
其实这部分SDK文档已经帮我们做得很好了,我们要做的就是拿来主义,然后再加上自己理解。
下面自底向上分析各层。
3.1.1LinuxKernel
Android基于Linux2.6提供核心系统服务,例如:
安全、内存管理、进程管理、网络堆栈、驱动模型。
LinuxKernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。
如果只是做应用开发,就不需要深入了解LinuxKernel层。
3.1.2AndroidRuntime
Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。
每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。
Dalvik虚拟机设计成,在一个设备可以高效地运行多个虚拟机。
Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。
两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的机器指令更大。
Dx是一套工具,可以将Java.class转换成.dex格式。
一个dex文件通常会有多个.class。
由于dex有时必须进行最佳化,会使文件大小增加1-4倍,以ODEX结尾。
Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。
3.1.3Libraries
Android包含一个C/C++库的集合,供Android系统的各个组件使用。
这些功能通过Android的应用程序框架(applicationframework)暴露给开发者。
下面列出一些核心库:
系统C库——标准C系统库(libc)的BSD衍生,调整为基于嵌入式Linux设备
媒体库——基于PacketVideo的OpenCORE。
这些库支持播放和录制许多流行的音频和视频格式,以及静态图像文件,包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG
界面管理——管理访问显示子系统和无缝组合多个应用程序的二维和三维图形层
LibWebCore——新式的Web浏览器引擎,驱动Android浏览器和内嵌的web视图
SGL——基本的2D图形引擎
3D库——基于OpenGLES1.0APIs的实现。
库使用硬件3D加速或包含高度优化的3D软件光栅
FreeType——位图和矢量字体渲染
SQLite——所有应用程序都可以使用的强大而轻量级的关系数据库引擎
3.1.4ApplicationFramework
通过提供开放的开发平台,Android使开发者能够编制极其丰富和新颖的应用程序。
开发者可以自由地利用设备硬件优势、访问位置信息、运行后台服务、设置闹钟、向状态栏添加通知等等,很多很多。
开发者可以完全使用核心应用程序所使用的框架APIs。
应用程序的体系结构旨在简化组件的重用,任何应用程序都能发布他的功能且任何其他应用程序可以使用这些功能(需要服从框架执行的安全限制)。
这一机制允许用户替换组件。
所有的应用程序其实是一组服务和系统,包括:
视图(View)——丰富的、可扩展的视图集合,可用于构建一个应用程序。
包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
内容提供者(ContentProviders)——使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
资源管理器(ResourceManager)——提供访问非代码资源,如本地化字符串、图形和布局文件
通知管理器(NotificationManager)——使所有的应用程序能够在状态栏显示自定义警告
活动管理器(ActivityManager)——管理应用程序生命周期,提供通用的导航回退功能
3.1.5Applications
Android装配一个核心应用程序集合,包括电子邮件客户端、SMS程序、日历、地图、浏览器、联系人和其他设置。
所有应用程序都是用Java编程语言写的。
更加丰富的应用程序有待我们去开发!
从上面我们知道Android的架构是分层的,非常清晰,分工很明确。
Android本身是一套软件堆叠(SoftwareStack),或称为「软件叠层架构」,叠层主要分成三层:
操作系统、中间件、应用程序。
从上面我们也看到了开源的力量,一个个熟悉的开源软件在这里贡献了自己的一份力量。
&四.Android项目目录结构
图2项目目录结构截图
src是编写代码的地方,
gen是项目的自动维护工具,R.java文件他对每一个资源都会自动生成一个int索引值。
可以通过索引值很方便的调用布局文件里的控件,从而分离了代码编写和样式布局。
这个文件是只读模式,不能更改。
Android2.2是开发类库,提供了javaJRE、Apache和Android开发包等一系列开发包。
Res下的是资源文件,drawble-***是存放三种不同分辨率的图标,系统会自动根据手机分辨率选择哪种图标,layout下的是XML布局文件,values下的是字符串XML文件,可以撰写多个不同的字符文件,方便国际化。
AndroidManfest.xml包含了该项目中所使用到的Activity,Service,Receiver的声明,项目中所用到的启动类和各种权限应用都必须在这里声明。
Deault.propertie是项目所应用到的开发类库的版本声明,同时也可以往里面添加GoogleAPI。
&五.开发组件介绍
每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。
Android应用程序由4个模块构造而成:
Activity、Intent、ContentProvider、Service以及Handle做一下简介。
5.1Activity类
简单的说Activity通常就是一个单独的屏幕(UI线程)。
每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图(View)控件组成的用户接口,并对事件做出响应。
Activity类通常伴随着UI界面的创建、加载、开始、放入堆栈、重新启动等事件,该类为我们提供了一系列回调函数供给系统在恰当的时候进行调用,最重要的一个概念就是Activity类的生命周期,关于这一概念,请详见AndroidSDK文档。
另外Activity类继承了另外一个重要的类:
Content。
他为我们提供了上下文环境。
5.2Intent类
Intent可翻译成意图,Intent类用于描述应用的功能。
Android利用Intent实现Activity与Activity之间的切换。
在Intent的描述结构中,有两个最重要的部分:
动作和动作对应的数据。
Intent可分为两种:
隐式Intent和显式Intent。
当前程序可抛出一个隐式的Intent对象,系统会遍历自己的的应用程序,将能够处理这种请求的应用程序以列表的形式提供给用户进行选择。
或者,当前程序指定一个特定的组件处理这个请求,这就是显式的Intent调用。
5.3ContentProvider类
Android应用能够将它们的数据保存到文件和SQLite数据库中,甚至是任何有效的设备中。
当想将应用数据与其他的应用共享时,ContentProvider就可以发挥作用了。
因为ContentProvider类实现了一组标准的方法,能够让其他的应用保存或读取此内容提供器处理的各种数据类型。
数据是应用的核心。
在Android中,使用Sqlite作为系统数据库。
在Android中,每一个应用都运行在各自的进程中,当一个应用需要访问其他应用的数据时(如自己编写的通讯录程序读取本机自带的通讯录时),数据需要在不同的虚拟机实例之间传递,这样的情况操作起来可能有些困难,ContentProvider正是用来解决在不同的应用包之间共享数据的工具。
题外话,在当前进程中,可开启多个线程实例,它们之间可以利用已封装好的类对象任意的传递数据,但要实现语言级进程间通信,需要Android提供了一个AIDL(Android接口定义语言)工具来处理序列化和通信问题,笔者在此之前并没有做这方面的实践,如想了解更多,请参见SDK和《android进程间通信:
使用AIDL》这一文档。
5.4Service类
Service是一个生命周期长且没有用户界面的程序,我们可以把它看成是一个后台服务线程(如若没有显式的指明,它仍运行于主线程之中)。
5.5Handle类
这个类的诞生基于两点原因:
视图的更新和UI线程阻塞。
这个类的诞生要归咎于Activity类,Activity类运行于主线程之中,Android规定:
只有最初创建视图层的线程才能接触该结构中的视图,不是最初创建界面的线程是不能接触界面元素的。
换个角度说,它不是线程安全的,不遵循线程安全的定义。
另外一点,为了不影响用户体验感,UI线程规定:
UI线程如果阻塞超过5秒钟,系统会弹出对话框,提示用户kill或wait当前UI,试想当程序需要下载文件等耗时操作时,如果把这些操作放到UI线程里,这将极大地破坏用户的体验感。
总结以上两点:
把耗时的或更新UI操作放到另一线程,由Handler对象产生一个消息(Message对象)并把这个消息放到消息循环队列的最后,待UI线程获取到这个消息时,首先判断该消息是否需要UI线程来处理,如果需要处理,则处理之,这样,便解决了阻塞5秒钟便killUi线程的尴尬局面。
关于Handle的详解,请参见SDK和《Handle详解》文档。
&六.项目实战
总结一下上学期的工作成果
6.1上学期围绕在Android平台下,所学内容请见下表
关键词
简要内容
完成情况
用户界面
对用户界面进行学习,主要包括控件和布局。
已掌握
数据存储
实现了Android存储数据的四大方式中的三种:
文件存储、数据库和偏好存储,另外一种为网络存储。
3/4
线程通信
已掌握开启新线程的方法和如何在各个线程间进行通信。
已掌握
收发短信
已实现收发短信的应用,并且支持群发。
已完成
网络通信
在该平台下进行了网络通信方面的实践,具体为HTTP通信、Scoket通信、UDP通信、WebKit浏览器引擎应用,SSL通信未实现。
70%
系统信息管理
Android为我们提供了系统服务接口,该接口包括进程管理、警报管理、WIFI管理、通知服务等一系列管理接口,对大部分接口都已实现。
80%
OpenGL和游戏引擎
这一部分考虑到可能不是实验室工作计划的重点,所以,并未进行过多的涉猎。
10%
AndroidNDK开发
NDK允许开发者用原生代码(C或C++)实现应用的一部分功能。
NDK环境已经搭好,但并未进行开发工作。
10%
位置服务
包括GoogleMap、传感器、语音识别,因模拟器上有所限制,这一部分指看了相关资料,并未实现。
10%
无线通信
WIFI网络连接管理和bluetooth通信因模拟器上无法模拟,这一部分也只看了一些相关资料,但并未实现。
未完成
6.2实例介绍
6.2.1收发短信截图
图3收发短信界面截图
图4输入号码提供自动提示功能图5收到短信显示给用户
6.2.2文件资源管理器
图6文件以列表的形式展现出来图7支持对文件的一般操作
6.2.3Mp3Player截图
图8网络Mp3文件列表图9本地Mp3列表,后面的数字是文件大小
6.2.4浏览器实例截图
图10浏览器截图
它提供了回到回到上一页、回到下一页、主页、刷新、截取网页截图、添加到收藏夹、和监听下载事件等功能。
6.2.5系统服务接口截图
图11列举了内存进程等各类信息
&七参考资料
【1】AndroidSDK文档
【2】《Android应用开发揭秘》机械工业出版社.杨丰盛著
【3】《Android平台开发之旅》机械工业出版社.汪永松著
【4】Android中国手机开发者联盟
【5】各大开发者博客
(Thisisthelastpage)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 技术 文档