当前位置:首页 >> 计算机软件及应用 >>

《Android项目驱动式开发教程》第一章开发入门


第1章 Android开发入门

?
?

1 项目任务:
通过学习Android相关历史及开发环境的搭建,完 成第一个简单应用程序的设计与开发,并理解 Android项目中各个文件及目录的功能。

?
? ? ? ?

2 项目要求:
掌握Android开发环境的搭建方法。 在Eclipse软件上设计并运行自己的第一个程序。 了解Android项目的结构及各个文件的功能。 掌握Android系统四大组件的基本功能。

1.1 Android的发展及历史
? 1.1.1
?

Android系统简介

Android是一种以Linux为基础的开放源码 操作系统,它主要应用于便携设备。 Android股份有限公司于2003年在美国加州 成立,在2005年被Google收购。2012年的 数据显示,仅正式推出四年操作系统的 Android已经超越称霸十年的诺基亚 Symbian系统,2011年后已经和苹果IOS系 统一起,跃居成为全球最受欢迎的智能手 机平台之一。

1.1 Android的发展及历史
?

Android 一 词 最 早 出 现 于 法 国 作 家 利 尔 亚 当 ( Auguste Villiers de l"Isle-Adam)在1886年发表的科幻小说《未来 夏娃》( L"ève future )中。他将外表像人的机器起名为 Android,于是就有了这个可爱的小机器人。

1.1 Android的发展及历史
?

Android 1.1 是在2008年9月发布的第一款Android系统, 2008年9月22日,美国运营商德国T-Mobile在纽约正式发 布第一款Android手机——T-Mobile G1。该款手机为台湾 宏达电(HTC)代工制造,是世界上第一部使用Android操作 系统的手机,支持WCDMA/HSPA网络,理论下载速率 7.2Mbit/s ,并支持Wi-Fi。
Android 1.5操作系统代号Cupcake(纸杯蛋糕),发布时 间为2009年4月30日,以甜品命名的系统是从Android 1.5 开始,该系统主要的更新在于采用了WebKit技术的浏览器 ,它支持在页面中进行复制/粘贴以及搜索等功能;系统 还支持立体蓝牙耳机连接,改善了自动配备的性能,使其 更加稳定。

?

1.1 Android的发展及历史
?

Android 1.6操作系统发布时间为2009年9月15日,该系统 代号Donut(甜甜圈),主要更新是支持更高的屏幕分辨 率,支持OpenCore2引擎;支持CDMA网络以及优化拍照 程序。 Android 2.0系统发布时间为2009年10月26日,随后的升 级版Android 2.0.1、Android 2.1均称为Eclair(松饼), 该系统优化了硬件支持,支持更高的屏幕分辨率;系统界 面也发生了变化,运行更流畅;支持HTML5。

?

1.1 Android的发展及历史
?

Android 2.2操作系统发布时间为2010年5月20日,与随后 的升级版 Android 2.2.1统称为Froyo(冻酸奶)。该系统 主要是对系统进行优化,增加了App2Sd功能。 Android 2.3操作系统发布时间为2010年12月7日,该系统 代号为Gingerbread(姜饼),这也是目前国内市场占有 率最高的系统。该系统优化了系统界面,使其操作更加流 畅;加入复制/粘贴功能;支持前置摄像头以及NFC技术 。

?

1.1 Android的发展及历史
?

?

?

Android3.0/3.1/3.2操作系统是谷歌在2011年中发布的, 3.X系列的版本统称为Honeycomb(蜂巢)。这一系列的 更新主要是针对平板设备,让Android系统可以更好的支 持平板。 在2011年10月19日,Google发布了全新的Android4.0操 作系统,系统代号为Ice Cream Sandwich(冰激凌三明治 ),该系统将手机与平板设备进行整合,拥有全新的UI界 面以及Linus内核,支持虚拟按键。 Android 4.1操作系统发布时间为2012年6月28日,系统代 号为Jelly Bean(果冻豆),Android4.1操作系统引入了 三重缓冲显示技术,让界面更加流畅,功能方面也有增加 。

1.1 Android的发展及历史
? 1.1.3
?

Android系统框架架构

1. Linux 内核(Kernel) Android 的核心系统服务依赖于 Linux 2.6 内核,如安全性,内存管理,进程管理, 网络协议栈和驱动模型。 Linux 内核也同时 作为硬件和软件栈之间的抽象层。

1.1 Android的发展及历史
?2.

系统运行库(Libraries)

?程序库

Android 包含一些C/C++库,这些库能被Android系统中不 同的组件使用。它们通过 Android 应用程序框架为开发者提 供服务。以下是一些核心库:媒体库、Surface Manager 、 LibWebCore、SGL 、3D libraries、FreeType 、SQLite

1.1 Android的发展及历史
? Android

运行库

Android 包括了一个核心库,该核心库提供了Java编程语 言核心库的大多数功能。 每一个Android应用程序都在它自己的进程中运行,都拥 有一个独立的Dalvik虚拟机实例。Dalvik被设计成一个设 备可以同时高效地运行多个虚拟系统。 Dalvik虚拟机执行 .dex的Dalvik可执行文件,该格式文件针对小内存使用做 了优化。同时虚拟机是基于寄存器的,所有的类都经由 Java编译器编译,然后通过SDK中 的 “dx”工具转化成 .dex格式,并由虚拟机执行。Dalvik虚拟机依赖于Linux内 核的一些功能,比如线程机制和底层内存管理机制。

1.1 Android的发展及历史
?3.

应用程序框架(Application Framework


开发人员也完全可以访问核心应用程序所使用的API框架。 该应用程序的架构设计简化了组件的重用;任何一个应用程 序都可以发布它的功能块,并且任何其它的应用程序都可以 使用其所发布的功能块(不过得遵循框架的安全性限制)。 同样,该应用程序重用机制也使用户可以方便的替换程序组 件。

1.1 Android的发展及历史
? 隐藏在每个应用程序后面的是一系列的服务和系
? ?

?
? ?

统,其中包括: 视图(Views) 内容提供器(Content Providers) 资源管理器(Resource Manager) 通知管理器 (Notification Manager) 活动管理器( Activity Manager)

1.1 Android的发展及历史
?

4. 应用程序(Applications)
该应用程序包包括 Email 客户端、SMS 短消息程 序、日历、地图、浏览器、联系人管理程序等。 所有的应用程序都是用Java编写的,另外我们从 网络下载的,或者我们自己开发的应用程序也都 属于这一部分。

? Android系统会和一个核心应用程序包一起发布,

1.2 Android开发环境搭建
?
?

1.2.1 Android开发简介
Android (安卓)是Google 开发的基于Linux 平 台的开源手机操作系统。Android的应用程序一般 使用Java语言编写,当然也有NDK的开发方式, 会涉及C/C++。在开发过程中,有众多的样本应 用和开源应用提供下载,并且IDE(集成开发环 境)使用Eclipse,这种集成开发环境有丰富的源 代码模板,用户可以在源码的基础上进行程序的 编写,这使得程序开发的难度大为降低。

1.2 Android开发环境搭建
? 1.2.2
?

安装JDK

进入网址 http://www.oracle.com/technetwork/java/ja vase/downloads/index.html ,如图所示:

1.2 Android开发环境搭建
?

?

作为开发人员,这里选择JDK而不是JRE,因此当单击 JDK的图标并选择相应版本后,JDK就开始下载了。32位 的Windows系统用户点击jdk-7u7-windows-i586.exe,64 位的Windows系统用户点击jdk-7u7-windows-x64.exe。 下载后可以得到.exe的可执行程序,这是一个安装程序, 用户只需要运行该程序就可以完成JDK的安装。当然用户 在安装过程中可以指定安装的路径,但是一般推荐使用默 认路径(一直单击下一步)安装即可,最后检查是否安装 成功。

1.2 Android开发环境搭建
?

单击计算机的“开始”,选择“运行”,在出现 的对话框中输入“CMD‖命令,打开CMD窗口, 在CMD窗口中输入“ java –version‖,如图所示 ,如果屏幕出现下面的代码信息,说明JDK已经 安装成功了。如果不成功,通常是环境变量设置 不正确,现在Windows平台的JDK都是做好的安 装包,一般正常安装后都没有问题。

1.2 Android开发环境搭建
?

1.2.3 安装Eclipse
,在android开发网站( http://developer.android.com/sdk/index.html)上直接下 载一个ADT综合包文件(adt-bundle-windows-x8620130219.zip),这个包文件内有必要的Android SDK的 组件和一个内置了ADT(Android Development Tools ) 插件的新版本Eclipse 。下载完成后,解压缩到一个目录 下,打开其中的Eclipse目录,找到eclipse.exe这个文件发 送到桌面后,就可以直接开发程序了(可以省略下面的 Eclipse安装、SDK下载和配置以及ADT安装三个步骤) 。

? 第一次安装Android开发平台,现有一个非常方便的方法

1.2 Android开发环境搭建
? 如果你已经安装了部分开发工具,或者你想一步一步的进行安装配置,

具体的方法如下面所述。Eclipse下载的主页面为: http://www.eclipse.org/downloads/,如图所示,Eclipse的页面默认版本 为Windows平台,如果想选择其他平台例如Linux平台,鼠标点击右上 角的下拉框进行选择(共三种平台Windows、Linux和Mac OS X)。默 认版本为当前正式最新发布的正式版本3.7.2,代号Indigo。如果想下载 以前的老版本,可以鼠标点击左上方的Older Versions链接去下载老版 本。这里列表列出了多个版本,是因为Eclipse具有良好的扩展性,因此 很多可用于Eclipse的应用插件被开发出来,为了节省用户下载相关插件 的工作量,所以对目前常用的几类开发插件进行了打包处理。

1.2 Android开发环境搭建
这里稍微介绍一下:Eclipse Classic是标准的 Eclipse版本,只包括基本的插件,不包括相关的 特殊插件,通常称之为最干净的Eclipse版本,一 般建议下载并安装此版本。下载时,仍需注意 Windows的版本问题,建议和JDK版本相匹配。 ? 下载后的文件是zip压缩格式,解压缩后就可以直 接运行eclipse.exe这个可执行文件,因为它经常 使用,所以建议在桌面上建立一个Eclipse快捷方 式。
?

1.2 Android开发环境搭建
?

1.2.4 配置Android开发环境

? 在Eclipse中配置Android开发环境主要包括ADT(Android

Development Tools)和Android SDK(Android Development Kit)两部分。 ? 首先进行Android SDK的下载,下载网址是 http://developer.android.com/sdk/index.html 。如图所示 ,进行下载的设置。

1.2 Android开发环境搭建
?

点击“Download the SDK for Windows‖按钮进行下载, 得到installer_r20.0.3-windows.exe安装程序。下载后按步 骤进行安装,选择合适的目录。安装结束后,会出现SDK 更新页面,建议选择SDK4.1(API 16)版本和SDK2.3.3 (API10)的相关目录进行更新,建议Android 开发文档 (Documentation for Android )和例程(Sample for SDK)一定要安装,这些内容可以为用户提供很多参考。 这个更新界面也可以在Eclipse中安装好ADT插件后,利用 打开SDK管理器的方法打开, 安装完SDK后,我们必须 要把SDK关联到Eclipse开发环境中去,也就是让在 Eclipse中开发的项目能找到所用的SDK相关文件。

1.2 Android开发环境搭建
?

从Eclipse的菜单栏中选择“Window‖→―Preferences‖命令 ,打开“Preferences‖窗口,如图1-7所示。单击左边的 “Android‖,然后再单击“Browse‖按钮设置Android SDK 的位置,即前面所提到的Android SDK安装后的位置,如 图所示,即完成了SDK的路径设置过程,即关联过程。

1.2 Android开发环境搭建
?

这里有个小经验,建议大家把Eclipse文件夹和 SDK文件 夹都放到D盘的同一个目录(比如取名为android)下,如 图所示。另外,路径名称(包括项目名、开发所涉及的文 件夹名等)中不建议出现中文字符,避免开发时发生意想 不到的错误。

1.2 Android开发环境搭建
? 然后进行ADT安装:在

http://developer.android.com/sdk/eclipseadt.html#installing中给出了如何安装的详细说明,其实核 心思想就是一个如何设置ADT的安装链接。ADT的安装有 离线下载安装和在线安装两种方法,这里介绍在线安装的 方法。

1.2 Android开发环境搭建
?

在Eclipse的菜单中选择“Help”->“Install New Software”命令,如图1-8所示,单击右上方的“Add”按 钮,在Location栏目中加入ADT的下载地址:http://dlssl.google.com/android/eclipse/ ,Location上方的Name 栏中可以填写android。然后点击“OK”按钮。如图所示 :

1.2 Android开发环境搭建
? ?

如果成功访问Google的相关服务器,则会显示获取的ADT 插件信息,使用鼠标选中其中的复选框,建议全部进行选 择。 鼠标点击“Next”按钮,会显示ADT的详细情况,继续用 鼠标点击“Next”按钮,会出现询问用户是否同意使用 License,缺省的情况是不同意,此时下边的“Finish”按 钮为灰;如果用户同意使用License,则选中同意License 选项,然后点击 “Finish”按钮,就进入下载安装状态。

1.2 Android开发环境搭建
?

下载安装成功后会提示重启Eclipse,点击“Restart Now”按钮即可重启Eclipse。重新启动Eclipse后,状态 栏上会增加两个图标,一个是SDK管理器,一个是AVD 管理器,这两个图标和Windows菜单中的两个子菜单功 能完全系统,如图所示,至此,Android开发环境搭建工 作就全部完成了。

1.2 Android开发环境搭建
?

1.2.5 创建AVD
之后,一般需要检测一下程序运行的结果,如果用户没有 支持Android平台的3G 手机,该如何测试呢?SDK为我们 解决了这一问题,在SDK中集成了Android 虚拟设备AVD (Android Virtual Device),利用AVD管理器,用户可以 创建各种模拟器(Emulator),并利用模拟器获得跟真实 手机基本相同的体验。但是在涉及一些手机硬件开发(如 蓝牙、GPS、相机、NFC等)时,模拟器就无法实现相关 的硬件模拟功能,所以此时程序员必须配备具有对应硬件 功能的Android手机,才能完成开发任务。

? 当用户在开发Android程序,或者在完成一个Android程序

1.2 Android开发环境搭建
?

在Eclipse中创建AVD时,首先需要利用AVD 管理工具来 创建一个AVD,点击Eclipse 工具栏上的AVD Manager图 标,弹出如图所示的对话框。

1.2 Android开发环境搭建
?

这里显示已经有4个AVD模拟器,它们 是作者平时使用的模拟器。用户可根 据项目需求选定目标AVD,然后点击 start按钮,就开始启动选定的AVD。 如果用户需要建立一个新的AVD,首 先点击New按钮,进入创建界面如图 所示,输入名称“newavd”, Target 选择Android4.1,同时输入模拟器SD 的容量:256,注意单位为兆(MiB) ,SD的容量不建议给太大,如1G、 2G等,因为每次多建一个AVD,AVD 安装时所在的盘的剩余容量就会做相 应的减少,在一般的应用开发中, 256M就足够了。

1.2 Android开发环境搭建
?

上图中的Hardware选项,是对模拟 器硬件方面的支持,可以增加一些 设置,这里增加一个键盘支持的设 置,即将来可以利用PC机的键盘来 实现模拟器AVD键盘的输入,方便 程序员的调试。如图所示,点击 “New”按钮,在Property下拉列表 框中选择KeyBoard support选项, 单击“OK”按钮,在Keyboard support的值(Value)选项把no改 为yes,如图所示,即完成了对键盘 支持的设置工作。

1.2 Android开发环境搭建
?

完成以上步骤后,点击对 话框下方的Create AVD 按钮,就完成了AVD的创 建工作。从图中可以看出 ,增加了一个名称为 newavd的模拟器AVD。选 中newavd 后,单击Start 按钮,即可启动最新创建 完成的模拟器AVD。

1.2 Android开发环境搭建
?

第一次启动AVD会需要较长的时间,实 际开发时,建议大家不要频繁关闭和重 启AVD。启动后的AVD如图所示。在模 拟器界面的左上角,有5554:newavd 这个内容,它所代表的含义是什么呢? 每个模拟器都被绑定到“127.0.0.1”这 个IP 地址上,而5554 代表该模拟器所 绑定的端口号,也就是说,该模拟器的 唯一标识地址是“127.0.0.1:5554”。 同一台PC中启动第二个模拟器所绑定的 端口号是5556,端口号可以作为模拟器 的手机号使用,在两个或多个模拟器之 间可以通过端口号进行通信,如拨打电 话,发送短信等等。

1.2 Android开发环境搭建
?

Android手机由于品牌、型号众多,所以屏幕的尺寸也有 很多。屏幕尺寸越大,可视范围就越大,同时由于所有 Android手机均为可触摸屏幕,可触摸区域即为操作区域 ,所以屏幕越大,可操作区域也越大。在使用手机玩游戏 和观看视频等方面,大尺寸手机优势明显。此表给出了当 前流行的一些手机屏幕的分辨率。
Low density (120), ldpi Normal screen WQVGA400 (240×400) WQVGA432 (240×432) --Medium density (160), mdpi High density (240), hdpi

HVGA (320×480)

---

Large screen

WVGA800* (480×800) WVGA854* (480×854)

WVGA800 (480×800) WVGA854 (480×854)

1.2 Android开发环境搭建
?

模拟器左侧的部分为手机桌面,每次启动模拟,手机都是 处于锁定状态的,通过单击鼠标图标并拖动即可解锁。模 拟手机的默认语言是英语,如果希望在手机上显示中文等 语言,需要对模拟器的语言设置进行修改。另外时间是国 际标准时间,和北京时间有8个小时的时差,如果需要修 改成北京时间,则可以在模拟器设置选项中进行系统的语 言及时间设置,由于这些设置和真实手机完全相同,这里 就不多介绍了,同学们可以自己摸索。

1.3 第一个应用程序
?

1.3.1 创建第一个应用程序项目Project
一个项目HelloAndroid。首先启动Eclipse,打开新建项目 的向导,一种方式是“File”->“New”>“Project”…|“Android”-> “Android Application Project”,另一种方式是“File”->“New”->“Android Application Project”,执行结果都是相同的,如图所示 :

? 搭建好开发环境后,下面在Android 平台上开发并运行第

1.3 第一个应用程序
? 当打开新建项目向导

后,出现对话框如图 所示,首先需要确定 应用名称Application Name、项目名称 Project Name、包名 Package Name以及最 低支持版本等信息。

1.3 第一个应用程序
? 应用名称是Android程序在手机中显示的名称,这里采用

HelloAndroid作为名称,当然也可以使用如“我的第一个 Android应用程序”这样包含中文的应用名称。工程名和 包名必须唯一,不能与已有工程的工程名和包名重名。包 名是包的命名空间,需要遵循Java中包的命名规则。包名 由2个或多个标识符组成,中间用点隔开。Java包的名字 都是由小写单词组成,每一名Java程序员都可以编写属于 自己的Java包。为了保障每个Java包命名的唯一性,在最 新的Java编程规范中,要求程序员在自己定义的包名之前 加上唯一的前缀,由于互联网上的域名是不会重复的,所 以程序员一般采用自己在互联网上的域名作为自己程序包 的唯一前缀。例如:cn.edu.siso.hello,一般公司命名则 会以“com.公司名.项目名”的方式命名。 ? Build sdk 是目前开发项目所选用的SDK版本,它默认是 Android4.1 (API 16),mini SDK则是程序开发后所支持的 最低版本,当前选择为API 9:Android 2.3。

1.3 第一个应用程序
? 设置好以上信息后,单击“Next‖按钮,进入启动图标的

设置界面,这里可以设置启动图标的显示图片及颜色,本 例题均采用默认值,然后直接单击“Next‖按钮,进入创 建Activity的对话框。在Activity界面仍旧采用默认值,单 击“Next‖按钮后进入创建新的空白Activity的对话框。在 这个对话框中需要设置Activity Name和Layout Name。 Activity Name就是项目中Java源代码的文件名,也就是类 名,Activity Name的命名必须遵循Java类名的命名规则。 Layout Name就是项目中布局文件的名称,注意不能有大 写字母出现。本页也可以采用默认值,直接点击Finish按 钮后结束项目的创建。

1.3 第一个应用程序
? 项目向导自动创建完成了项目所需要的基础文件及目录结

构,用户能看到如图所示的内容。单击“run‖图标按钮, 运行此程序,选择Run as:Android Application后,启动 选定的AVD,第一次启动AVD时间稍长,启动后模拟器进 入的是锁定状态,必须解锁后才能运行程序,第一个新建 项目的界面如图所示。

1.3 第一个应用程序
?

1.3.2 修改显示内容
其中的name=“hello_world”所对应的内容部分进行修改 ,修改为“这是我的第一个Android应用程序”,保存后 再次运行程序,即可看到了如图所示的界面。

? 打开项目中res->values->strings.xml文件,如图所示,对

1.4 项目框架分析
?

1.4.1 HelloAndroid项 目结构
程中,Android系统在Eclipse 中会自动建立一些目录和文 件,一个项目的框架如图所 示。其中有些文件有着固定 的作用,有的允许修改,有 的不允许修改。了解这些文 件及目录的作用,对Android 应用程序开发有着非常重要 的作用,下面对这些文件分 别进行介绍。

? 在建立HelloAndroid程序的过

1.4 项目框架分析
? src/ 是用于存放开发人员自己编写的Java 源代码的包。 ? gen/ 该目录不需要开发人员维护,但它又是非常重要的

目录。该目录用来存放由Android 开发工具所生成的目录 。该目录下的所有文件都不是用户创建的,而是由ADT 自动生成的。该目录下的R.java 文件非常重要,后面会详 细的介绍。 ? android 4.1/ 存放Android 自身的jar 包。

1.4 项目框架分析
? Android Dependencies/ 是android开发过程中一些依赖的

包,它也是新版本的ADT才增加的目录。它修改了第三方 jar的导入方式,之前可以在工程里面做关联,并在工程上 自动添加ReferenceLibrary。在新版本的ADT环境下,只 需要在工程目录下新建libs文件夹(注意是libs不是lib), 然后将第三方的jar复制进去,Eclipse就会自动将这个jar 添加到Android Dependencies文件夹下,而不必再通过 BuildPath去修改,也不需要Reference Library。另外, 如果多个工程有关联的话,比如A工程设置为IsLibaray, B工程要引入A工程的时候,也会自动将A工程编译生成的 jar放到Android Dependencies文件夹下。

1.4 项目框架分析
? assets/ 该目录用来存放应用中用到的类似于视频文件、

MP3等一些媒体文件,此目录中的资源不能够被R.java文 件索引,一般为空。 ? res/ res是resource 的缩写。我们称该目录为资源目录。 该目录可以存放一些图标、界面文件、应用中用到的文字 信息等内容。 ? AndroidManifest.xml文件是功能清单文件,该文件列出了 应用中所使用的所有组件,如“activity‖,以及后面要学 习的广播接收者、服务等组件。 ? default.properties文件一般也不需要手工更改。该文件存 放了项目对应的一些环境配置,如应用要求运行的最低 Android 版本。

1.4 项目框架分析
?

1.4.2 资源res目录
会被应用到程序里面的一些外部元素,比如图片、音频、 视频、文本字符串、布局、主题等。每个Android应用程 序包含一个资源目录(res/)和资产目录(assets/),但 资产不经常被使用,因为它们的应用很少,仅在需要读取 原始字节流时才需要保存数据在assets/目录。Res/和 assets/目录均在Android 项目树的顶端,和源代码目录( src/)处在同一级上。资源和资产从表面上看没多大区别 ,不过总体上来说,在存储外部内容时资源用得更多。他 们之间真正的区别在于任何放置在资源目录里的内容都可 以通过应用程序的R 类访问,这是被Android 编译过的。 而任何存放在资产目录里的内容都将保持它的原始文件格 式,为了读取它,必须使用AssetManager以字节流的方 式进行读取。所以保持文件和数据在资源中(res/)中会 更方便访问。

? 资源是Android 应用程序不可或缺的部分。资源中存放了

1.4 项目框架分析
? 资源将最终被编译到APK 文件里,Android 创建了一个被

称为R 的类,因此在Java代码中可以通过它关联到对应的 资源文件。R 类中所包含的子类的命名由res/目录下的文 件夹名称所决定。 ? res/目录下有4个dawable文件夹——drawable-*dpi,它们 的区别只是将图标按分辨率高低来放入不同的目录。 drawable-hdpi用来存放高分辨率的图标,drawable-mdpi 用来存放中等分辨率的图标,drawable-ldpi用来存放低分 辨率的图标。程序运行时可以根据手机分辨率的高低选取 相应目录下的图片。如果开发程序时不准备使用过多图片 ,那么也可以只准备一张图片将其放入四个目录的任何一 个中去。

1.4 项目框架分析
? res/目录下有1个layout文件夹,里面存放的是项目

涉及的布局文件,本例中的布局文件是ADT 默认自 动创建的activity_main.xml文件,布局文件利用 XML语言来描述用户界面。代码的第8行说明在界 面中使用TextView控件,TextView控件主要用来显 示字符串文本。代码的第8行到14行分别对此文本 控件的长、宽、显示位置以及显示内容等做了描述 。第13行中@string/hello_world是对资源的引用, 在上一个小节中,曾经尝试修改了这个字符串的内 容,使界面中显示的内容发生了变化,现在可以再 次体会一下这个操作。

1.4 项目框架分析
? 在Eclipse 中,双击“activity_main.xml”文件,在

编辑区出现如图所示的界面,其中显示的是 Graphical Layout图形界面的预览效果。可以点击 Layout 选项卡旁边的activity_main.xml,切换到代 码编辑模式。

1.4 项目框架分析
? res/目录下有1个values文件夹,里面存放的

strings.xml文件用来定义字符串和数值,在Activity 中使用getResources().getString(resourceId)或 getResources().getText(resourceId)取得资源。 ? 如strings.xml文件代码所示,它一共声明了4个 string标签,每个string 标签对应声明一个字符串, 如“name="hello_world">这是我的第一个Android 程序”中name属性指定其引用名,在程序中调用此 引用名(hello_word)就可以使用后面的值(实际 的字符串:这是我的第一个Android程序)。
? ? ?

1 <resources> 2 <string name="app_name">HelloAndroid</string> 3 <string name="hello_world">这是我的第一个 Android程序</string> ? 4 <string name="menu_settings">Settings</string> ? 5 <string name="title_activity_main">MainActivity</string> ? 6 </resources>

1.4 项目框架分析
? 1.4.3 gen/目录下的R.java 文件 ? R.java 文件中默认有attr、drawable、layout、 string 等多个静态内部类,每个静态内部类分 别对应一种资源,如layout 静态内部类对应 layout 中的界面文件,其中每个静态内部类中 的静态常量分别定义一条资源标识符,如“ public static final int main=0x7f030000”对应 的是layout 目录下的main.xml 文件。具体的对 应关系如图所示。

1.4 项目框架分析
?

1.4.3 gen/目录下的R.java 文件

1.4 项目框架分析
? 在已经理解了R.java 文件中内容的来源,也就是当

开发者在res/目录的任何一个子目录中添加相应类 型的文件之后,ADT 会在R.java 文件中相应的匿名 内部类中自动生成一条静态int类型的常量,对添加 的文件进行索引。如果在layout 目录下再添加一个 新的界面,那么在public static final class layout中 也会添加相应的一个静态int常量。相反,当我们再 res 目录下删除任何一个文件,其在R.java中对应的 记录会被ADT自动删除。再例如,在strings.xml添 加一条记录,那么在R.java的string内部类中也会自 动增加一条记录。如果发现R.java没有及时主动更 新,可以点击保存按钮,然后选中R.java文件,单 击右键,选择refresh进行刷新,或者删除R.java文 件,并且refresh刷新,由系统自动生成一个更新后 的R.java文件。

1.4 项目框架分析
? R.java文件会给开发程序带来很大的方便,比如在

程序代码中使用“public static final int icon=0x7f020000”可以找到对应的icon.png这幅图 片,资源名称一般与资源文件名相同(不包含扩展 名)。通过在代码中使用资源ID可以实现在程序中 引用资源。实现资源的引用有两种方式,一种是在 代码中引用资源,通过[R.type.resource_name]方 式,其中type代表资源类型,也就是R文件中的内 部类名称,resource_name代表资源名称。第二种 方式是在资源文件XML中引用资源,此时一般使用 格式@[package:]type/name。

1.4 项目框架分析
? R.java 文件除了有自动标识资源的“索引”

功能之外,还有另一个主要的功能,当res 目录中的某个资源在应用程序中没有被使用 到,在该应用程序被编译的时候系统就不会 把对应的资源编译到这个应用程序的APK 包 中,这样可以节省Android 手机的资源。

1.4 项目框架分析
? 1.4.4 Android Manifest.xml 介绍 ? 在根目录中的每个应用程序都有一个功能清单 文件AndroidManifest.xml(一定是这个名字) 。这个清单文件为Android 系统提供了关于这 个应用程序的基本信息,系统在运行任何程序 代码之前必须知道这些信息。其中包括了 package中暴露的组件(activities、services等 等),它们各自的实现类,以及各种能被处理的 数据和启动位置。

1.4 项目框架分析
? AndroidManifest.xml 主要包含以下功能: ? 命名应用程序的Java应用包,这个包名用来唯一标 识应用程序; ? 描述应用程序的组件——活动、服务、广播接收者、 内容提供者;对实现每个组件和公布其功能(比如能 处理哪些意图消息)的类进行命名。这些声明使得 Android系统了解这些组件以及它们在什么条件下可 以被启动; ? 决定应用程序组件运行在哪个进程里面;

1.4 项目框架分析
? ? ?

?

?

声明应用程序所必须具备的权限,用以访问受保护的 部分API,以及和其它应用程序交互; 声明应用程序其它的必备权限,用以组件之间的交互 ; 列举测试设备Instrumentation类,用来提供应用程序 运行时所需的环境配置及其它信息,这些声明只在程 序开发和测试阶段存在,发布前将被删除; 声明应用程序所要求的Android API的最低版本级别 ; 列举application所需要链接的库;

1.4 项目框架分析
? 程序中使用的所有组件都会在功能清单文件中被列出

来,所以程序员必须对此文件非常了解,并能够进行 准确的修改。 ? AndroidManifest.xml是每个android程序中必须具备的 文件。它位于整个项目的根目录,描述了package中 暴露的组件(activities, services, 等等),他们各自 的实现类,各种能被处理的数据和启动位置。 除了能 声明程序中的Activities、ContentProviders、Services 和Intent Receivers以外,还能指定permissions和 instrumentation(安全控制和测试) ? 下面进行对AndroidManifest.xml文件进行具体的分析 ,manifest是根目录,属于第一层。

1.4 项目框架分析
? 1 <manifest

xmlns:android="http://schemas.android.com/apk/res/android"// 第一层次 ? 2 package="cn.edu.siso.hello" ? 3 android:versionCode="1" ? 第1行代码中xmlns:android定义了android的命名空间

?

?

,一般为http://schemas.android.com/apk/res/android ,这使得Android中各种标准属性都能在文件中被使用 ,为大部分元素提供了数据。 第2行代码package="cn.edu.siso.hello"指定本应用程 序中java主程序包的包名,它也是一个应用进程的默 认名称。 第3行代码versionCode是给设备程序识别版本(升级 )用的,它必须是一个interger值,代表app更新过多 少次,比如第一版一般为1,之后若要更新版本就设 置为2、3等。

1.4 项目框架分析
? 4 ? 5

android:versionName="1.0" > <uses-sdk // 第二层次,描述android sdk 的版 本信息 ? 6 android:minSdkVersion="9" ? 7 android:targetSdkVersion="15" /> ? 8 <application // 第二层次 ,声明描述应用程序的相 关特征 ? 第4行代码versionName是给用户看的,用户可以将自

?

?

己的APP版本号设置为1.1版,后续更新版本设置为 1.2、2.0版本等。 第5行到第7行的功能是声明SDK的版本信息,用API 的级别(一个整数)来说明应用程序会跟哪些Android 平台版本兼容。 第8行到第20行声明应用程序相关的信息,一个 AndroidManifest.xml中必须含有一个Application标签 ,这个标签声明了每一个应用程序的组件及其属性(如 icon,label,permission等)。

1.4 项目框架分析
? 9 ? 10 ? 11

android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >

?

?

?

第9行代码android:icon用来声明整个APP的图标,图 片一般都放在drawable文件夹下,使用资源引用的方 式。 第10行代码android:label用来声明整个APP的应用程 序名称,字符串一般都放在strings文件中,使用资源 引用的方式。 第11行代码android:theme定义资源的风格,它定义了 一个默认的主题风格给所有的activity,当然也可以在自 己的theme里面去设置它,有点类似style。

1.4 项目框架分析
? 12 ? ? ? ?

?
? ? ? ?

<activity // 第三层次,声明应用程序中的组件, 如Activity 13 android:name=".MainActivity" 14 android:label="@string/title_activity_main" > 15 <intent-filter> // 第四层次,声明此activity的filter 特性 16 <action android:name="android.intent.action.MAIN" /> 17 <category android:name="android.intent.category.LAUNCHER" /> 18 </intent-filter> // 第四层次声明结束 19 </activity> // 第三层次Activity的声明结束 20 </application> // 第二层次Application的声明结 束 21 </manifest> //第一层次声明结束

1.4 项目框架分析
?

?

?

第12行到第19行是对这个应用程序中的一个Activity的 声明,属于第三层。由于本应用中只有一个Activity, 所以这里只需要声明一个Activity,如果有多个Activity 或Service等程序员自己开发的组件,则必须在这里进 行添加声明。 第13行代码android:name是一个前面省略了包名的类 名,在android:name=".MainActivity"中一定要注意前 面有个点,这个类名也是在src根目录下,以包命名的 文件夹中对应的java文件名,大小写也要完全对应。 第15行到第18行是对这个Activity的过滤器filter的声明 ,属于第四层。Intent filter内会设定的资料包括action 、data与category三种。也就是说filter只会与intent里 的这三种资料作对比动作。

1.4 项目框架分析
? 首先介绍action属性:action很简单,它只有

android:name这个属性。常见的android:name值为 android.intent.action.MAIN,表明此activity是作为应 用程序的入口。起到的功能和C语言程序中的main( )函数相同,所以Action:MAIN的这个属性能且只能 赋给一个Activity。 ? 其次介绍category属性:category也只有 android:name属性。常见的android:name值为 android.intent.category.LAUNCHER,它用来决定应 用程序是否显示在程序列表里。 ? 最后介绍data属性:每个data元素指定一个URI和数 据类型(MIME类型)。它有四个属性scheme、host 、port、path,它们分别对应URI( scheme://host:port/path)的每个部分,本段代码中没 有涉及到data属性。

1.4 项目框架分析
? 这里需要补充一个非常重要的权限许可的问题

。Android系统采用不声明不能使用的原则, 如果程序需访问内部的使用通讯录、Internet 、GPS、蓝牙等功能,都必须在manifest文件 中进行许可声明,否则程序将出错。

1.4 项目框架分析
? Android的manifest文件中有四个标签与permission有

关,它们分别是 <permission> 、<permission-group> 、<permission-tree>和<uses-permission>。其中最常 用的是 <uses-permission>,如果需要获取某个权限 的时候,就必须在manifest文件中声明<usespermission>。 <uses-permission>与<application>同 层次,一般就插入在application标签后面,如 ? <uses-permission android:name= "android.permission.READ_CONTACTS"/> ? 这句代码表示当前的应用程序具有从内部的通讯录联 系人中读出名字和号码的权限。

1.4 项目框架分析
? 在AndroidManifest.xml文件中必须注意它所包含的

intent-filters,即“意图过滤器”。应用程序的核心组 件(活动、服务和广播接收器)通过意图被激活,意 图代表的是你要做的一件事情,代表你的目的, Android 寻找一个合适的组件来响应这个意图,如果 需要启动这个组件的一个新的实例,并将这个实例传 递给这个意图对象。这时需要filters描述activity启动的 位置和时间。每当一个activity(或者操作系统)要执 行一个操作时,例如:打开网页或联系簿时,它创建 出一个intent的对象,这个对象将承载一些信息用于描 述你想做什么,你想处理什么数据,数据的类型以及 其它一些信息。Android比较intent对象和每个 application所暴露的intent-filter中的信息,以找到最合 适的activity来处理调用者所指定的数据和操作。

1.5 Android 四大组件介绍
? Android四大基本组件分别是Activity、Service服务、
?

Content Provider内容提供者,BroadcastReceiver广 播接收器,下面分别进行介绍。 Activity 应用程序中,一个Activity通常是一个单独的屏幕 ,它上面可以显示一些控件,也可以监听并对用户的 事件做出响应。Activity之间通过Intent进行通信,在 Intent 的描述结构中,有两个最重要的部分:动作和 动作对应的数据。 典型的动作类型有:M AIN(activity的入口)、 VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表示。例如:要查看一个人的联系方式, 你需要创建一个动作类型为VIEW 的Intent,以及一个 表示这个人的URI。

1.5 Android 四大组件介绍
?

BroadcastReceive广播接收器 开发的应用程序可以使用BroadcastReceiver对外 部事件进行过滤,使之只对感兴趣的外部事件(如当 电话呼入时,或者数据网络可用时)进行接收并做出 响应。广播接收器没有用户界面。但是它们可以启动 一个activity或service 来响应它们收到的信息,或者用 NotificationManager 来通知用户。通知的方式有很多 种──闪动背灯、震动、播放声音等,一般来说可以在 状态栏上放一个持久的图标,用户打开它即可获取消 息。 Android系统已经提供了很多广播,系统常见的广 播Intent有开机启动、电池电量变化、时间改变、短信 、电话到达通知等广播,用户可以根据需要进行接收 使用。

1.5 Android 四大组件介绍
?

Service 服务 一个Service 是一段具有长生命周期,没有用户 界面的程序。它可以用来开发监控类程序。 所用一个媒体播放器的例子来说明Service的作用 ,在一个媒体播放器的应用程序中有多个Activity,它 们可以让使用者选择歌曲并播放歌曲。然而,音乐播 放这个功能并没有对应的Activity,因为使用者认为在 导航到其它屏幕(如看电子书)时,音乐应该还在播 放,在这个例子中,此时系统前台是电子书的界面, 但媒体播放器会使用Context.startService()来启动一 个事先定义好的具有歌曲播放功能的Service,从而可 以实现在后台保持音乐的播放。同时,系统也将保持 这个Service 一直执行下去,直到这个Service 运行结 束。另外还可以通过使用Context.bindService()方法 ,连接到一个Service 上(如果这个Service 还没有运 行,则将它启动),当连接到一个Service 之后,可 以用Service 提供的接口与它进行通讯。

1.5 Android 四大组件介绍
?

Content Provider内容提供者 Android平台提供了Content Provider这个功能, 它可以使一个应用程序的指定数据集提供给其他应用 程序,属于应用程序之间的数据交换。这些数据可以 存储在文件系统中、SQLite数据库等位置,其他应用 程序也可以通过ContentResolver类,从内容提供者中 获取或存入相关数据,只有在多个应用程序间共享数 据时,才需要内容提供者。例如,通讯录的数据可能 需要被多个应用程序所使用,但这些数据只存储在一 个内容提供者中,它的优点非常明显,就是统一数据 访问方式。

One World ,One Office.


相关文章:
软件工程作业第一章
软件工程作业第一章_计算机软件及应用_IT/计算机_...优点:文档驱动。 强迫开发人员采用规范的方法; 严格...适用范围:需求不确定,如交互式系统的设计,加速软件...
自己整理的:系统集成项目管理工程师教程2版第一章章节概要
自己整理的:系统集成项目管理工程教程2版第一章章节概要_从业资格考试_资格考试/认证_教育专区。教材章节概要1章系统集成项目管理工程教程(第 2 版) 第 1 ...
Android基础开发-练习一@侯敬儒
第2章 Android开发基础 67页 1财富值 第2章 Android...Android应用开发入门教程(... 130页 免费如...第一个示例程序:如图 1-1 所示是运行 JetBoy 的...
安卓开发基础教程01
Android 英文翻译机器人,Android 是 Google 公司对外发布的免费开源基于 Linux2.6 的操作系统 Android 是一个层叠式的操作系统 由四层组成,包括 application 应用层...
第一章 区域开发
第一章 区域开发理论沿革及最新动态 区域开发:一国或地区的政府为了实现一定的...1826 年,杜能的经济学著作《孤立国同农业和国民经济的关系》一书的第一卷出版...
Android 开发从入门到精通
Android 开发入门 ? Android 开发简介 Android 是 ...? 用 Eclipse 开发 Android 应用程序 Android 是一...(Android Debug Bridge) usb_driver 该目录包含将...
Android程序开发初级教程
Android程序开发初级教程_计算机软件及应用_IT/计算机...的东西,发展方向应该是驱动、协议开发,嵌入 式开发...一级建造师《建设工程项目管理》 《建设工程经济》计算...
Android入门教程Android ch01
Android入门教程Android ch01_理学_高等教育_教育专区...本章主要介绍 Android 手机开发基本知识, 主要包括...如何编写一个简单 Android 程序、Android 基本组件内容...
安卓开发入门教程
安卓开发入门教程_计算机软件及应用_IT/计算机_专业资料...工具开发 Android 应用程序,你需要适合的 开发电脑...按照默认安装的第一部和第二步(如上). 在 ...
《Android系统开发》课程教学大纲
《Android系统开发》课程教学大纲_管理学_高等教育_...一个简单的 Android 程序 第二章 (一)教学目的和...Android系统开发入门 23页 1下载券 android学习路线...
更多相关标签: