【Android源码 栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了Android源码 -Beginning Android 2简体中文版第二章 - 讲义教程的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
《
Android 2基础教程》 第2章 项目和目标 1 / 10 第2章 项目和目标 下载并安装好最新的
Android SDKAndroid Software Development KitAndroid软件开发包和基于Eclipse的ADTAndroid Developer ToolsAndroid开发人员工具插件①之后就可以动手开发
Android应用程序了。
本章介绍与开发
Android应用程序有关内容。
2.1 基本概念 在开发
Android应用程序之前必须创建一个相应的
Android项目。
如果你使用Eclipse开发的话那就是创建一个Eclipse项目。
这个项目将会保存所有源代码、资源例如国际化字符串、第三方JAR及相关内容。
Android构建工具集成在Eclipse中的或独立的构建工具会将项目的内容转换成APKAndroid PackageAndroid包文件这就是
Android应用程序。
这些工具还可以帮你把APK文件部署到
Android模拟器或者部署到真实的
Android设备中以便测试。
项目中的最关键的一个元素是描述文件manifest即AndroidManifest.xml。
这个文件中包含着应用程序的“目录”列出了主要的应用程序组件、权限等等。
Android在运行时会通过这个描述文件将应用程序与操作系统关联起来。
此外
Android Market或其他独立的“应用程序商店”也会用到这些描述文件以便使
Android 2.0的应用程序不会被安装到运行
Android 1.5的设备上。
要使用模拟器来测试应用程序必须先创建一个AVDAndroid Virtual DeviceAndroid虚拟设备。
多数情况下都需要创建很多AVD每个AVD分别模拟一种基于特硬件的
Android设备。
此外还可以为不同屏幕尺寸、不同
Android版本创建不同的AVD。
在创建项目和AVD时需要为
Android指定要使用的API级别。
API级别是一个整数值不同的整数值映射到不同的
Android版本例如API 3对应
Android 1.5。
创建项目时可以告诉
Android你的应用程序支持的最小和最大API级别。
而在创建AVD时则是告诉
Android新建的这个AVD要模拟哪个级别的API。
这样就可以看到自己的应用程序在支持不同
Android版本的不同模拟设备上运行的效果了。
上面提到的所有概念都会在本章中详细介绍。
①
Android SDK和ADT都可以从
Android开发人员站点http://developer.
android.com/下载。
如果官方站点打不开可以访问http://tinyurl.com/y66sfw7或自行搜索下载ADT可以通过Eclipse 更新管理器安装安装说明参见http://www.cn-cuckoo.com/2010/05/08/eclipse-adt-1618.html。
——译者注 《
Android 2基础教程》 第2章 项目和目标 2 / 10 2.2 创建项目 要想在命令行中创建项目以便使用ant等构建工具需要运行
android create project命令。
这个命令带有一些参数用于指定应用程序代码所属的Java包、应用程序针对的API级别等等。
成功运行命令后会得到一个文件夹其中包含构建基本的
Android应用程序所需的全部文件。
下面是一个
android create project命令的示例
android create project --target 2 --path ./FirstApp --activity FirstApp –package apt.tutorial 如果你想使用Eclipse开发
Android应用程序而不是使用
android create project方式那么就需要使用Eclipse的新项目向导来创建一个新
Android应用程序。
注意本书的源代码是按照使用命令行构建工具构建应用程序而创建的。
如果你要使用Eclipse可以创建空Eclipse项目再将代码导入到项目中①。
2.3 项目结构 每个
Android项目都包含一套特定的目录树结构非常类似Java项目而
Android构建系统就是基于该目录树结构组织的。
不过
Android的这套目录结构还是有点与众不同。
下面我们就来简单介绍一下
Android项目的目录结构以便读者有个大概的印象特别是让你能够轻松地看明白本书给出的示例代码。
2.3.1 根目录 在创建了新
Android项目后例如通过
android create project命令你会在项目的根目录下发现一些文件和子目录以下是对它们的简要说明。
AndroidManifest.xml是一个XML文件用于描述将被构建的应用程序以及应用程序中包含哪些组件Activity、Service等等。
build.xml是一个Ant脚本用于编译应用程序和在设备上安装应用程序。
default.properties和local.properties是属性文件由Ant构建脚本使用。
assets/文件夹用于保存需要打包到应用程序中的静态文件以便部署到设备中。
bin/文件夹用于保存编译后的应用程序。
gen/文件夹
Android构建工具放置它们生成的源代码的地方。
libs/文件夹用于保存应用程序用到的第三方JAR。
src/文件夹用于保存应用程序的Java源代码。
① 译者是这样做的在New
Android Project对话框中选择create project from existing source通过Browse…按钮找到源代码目录打开具体示例项目的目录Eclipse即可自动填写有关新项目的信息。
——译者注 《
Android 2基础教程》 第2章 项目和目标 3 / 10 res/文件夹用于保存应用程序的资源如图标、GUI布局等将被打包到编译后Java中。
tests/文件夹用于保存完全独立的
Android项目以便测试你所创建的项目。
2.3.2 主Activity 在创建
Android项目时例如通过
android create project命令我们为应用程序的主活动指定了一个完整的类名例如com.commonsware.
android.SomeDemo。
然后你就会在项目的src/目录下看到映射过来的命名空间目录树结构以及一个表示主活动的Activity的待实现子类例如src/com/commonsware/
android/SomeDemo.java。
你可以修改这个文件或者再向这个目录中添加实现应用程序所需要的其他文件。
首次编译项目时例如通过ant命令
Android在构建项目时会在主活动命名空间目录的外部创建R.java。
这个文件中包含很多常量与你放在res/文件夹中的各种资源一一对应。
在阅读本书的过程中你会发现很多示例中都会引用R.java例如R.layout.main就是引用布局文件的标识符。
注意你不能动手修改R.java
Android工具会为你自动创建和更新这个文件。
2.3.3 资源 如前所述res/目录中保存着资源即将会打包到应用程序中的静态文件可能是原始格式也可能是经过预处理的格式。
下面介绍res/目录下的一些子目录有些是自动创建的有些则是需要你自己创建的。
res/drawable/存放图像PNG、JPEG等等 res/layout/存放基于XML的UI布局描述 res/menu/存放基于XML的菜单描述 res/raw/存放通用的文件如包含账号信息的CSV文件 res/values/存放字符串、尺寸值 res/xml/存放通用的XML文件 所有这些文件夹以及其他资源都会在本书中提到。
2.3.4 编译结果 在编译项目时通过ant命令或IDE编译结果将被放到项目根目录下的bin/文件夹中这个文件夹中的情况如下。
bin/classes/存放编译后的Java类文件 bin/classes.dex存放基于编译后的Java类创建的可执行文件 《
Android 2基础教程》 第2章 项目和目标 4 / 10 bin/yourapp.ap_存放应用程序的资源打包为ZIP文件这里的yourapp是你应用程序的名称 bin/ yourapp-debug.apk或bin/ yourapp-unsigned.apk实际的
Android应用程序这里的yourapp是你应用程序的名称 其中.apk文件是一个ZIP压缩文件包含.dex文件、资源的编译版resources.arsc、其他未编译的资源如放在res/raw/中的资源以及AndroidManifest.xml文件。
.apk文件也是经过数字签名的文件文件名中的-debug表示已经使用模拟器认可的调试密钥签名-unsighed表示待发布的应用程序ant release但还需要使用jarsigner及正式密钥进行签名。
2.4 AndroidManifest.xml文件 描述文件是所有
Android应用程序的基础本节就来介绍这个位于项目根目录下的AndroidManifest.xml文件。
除了在这个文件中声明应用程序中都包含哪些组件如Activity、Service等等还要指出它们怎么附加到整个
Android系统中。
例如可以指定某个某些Activity应该出现在设备的主菜单中主菜单也称为“启动菜单”。
在创建应用程序的时候将会自动生成一个基本的AndroidManifest.xml文件。
对简单的应用程序来说这个文件中可能只包含一个Activity。
此时使用自动生成的描述文件可能也没有问题但有时候也需要对它进行一些小小的改动。
另一方面
Android API演示套件所使用的描述文件则非常庞大有1 000多行。
至于你自己开发的应用程序其大小很可能会介于上述二者之间。
关于描述文件中那些最重要的部分本书都会在讨论相关的
Android特性时进行较为详细地介绍。
例如第29章会详细介绍元素而那一章的主题是创建服务。
就目前而言只要理解描述文件的作用及其一般性结构就足够了。
2.4.1 一开始是根元素 所有描述文件的根元素都是——当然没有什么好奇怪的——元素 ... 注意命名空间声明。
有点奇怪吧在这个生成的描述文件中只有特性attribute带有命名空间前缀元素上反而没有例如是manifest而非
android:manifest。
在
Android应用程序中这种做法是有效的除非
Android以后会变否则建议你还是遵守这一约定。
在元素中需要指定的最长的信息就是package特性奇怪的是也不需要在这个特性前面添加命名空间前缀。
在这里可以提供作为应用程序“基准”的Java包的名字。
此后只要描述文件中其他地方需要类名都可以用前置的点号来作为这个包的简写。
例如你需要在前面的描述文件中引用com.commonsware.
android.search.Snicklefritz那么可以只《
Android 2基础教程》 第2章 项目和目标 5 / 10 使用.Snicklefritz因为已经将com.commonsware.
android.search定义为这个应用程序的包了。
2.4.2 权限、编排和应用程序 在元素下面可以发现下列元素。
元素指出应用程序正常运行所需的权限。
元素为活动和服务声明权限表示其他应用程序要使用当前应用程序的数据或逻辑必须具有的权限 元素表示需要在关键系统事件中例如在为记录和监控而启动某个活动时需要调用的代码 元素引入可选的
Android组件例如地图服务。
元素表示当前应用程序基于哪个版本的SDK构建。
元素定义与当前描述文件对应的应用程序的细节信息。
下面来看一个描述文件的例子 ... 在这个例子中描述文件使用元素指出了当前应用程序需要的一些设备功能。
具体来说这里就是要允许应用程序来确定当前的位置。
而元素的内容将用于描述Activity、Service及其他各种构成应用程序的组件。
第28章将详尽讨论权限。
2.4.3 应用程序总要做点什么 描述文件的核心内容都是通过元素的子元素来表达的。
默认情况下在创建新的
Android项目时其中只包含一个元素 《
Android 2基础教程》 第2章 项目和目标 6 / 10 这个元素的
android:name表示实现Activity的类
android:label表示用于显示的Activity的名字而经常会有子元素用于描述显示当前Activity在什么情况下被调用。
这个看似简单的元素设定了你的Activity将会出现在启动菜单中因而用户可以选择运行这个Activity。
本书后面将会讨论到一个项目中可以包含多个Activity。
描述文件中可以有一或多个元素表示ContentProvider组件这个组件可以为你的活动以及经过你授权的当前设备中其他应用程序的活动提供数据。
ContentProvider将数据库或其他数据存储模式封装到一个API中可以供任何应用程序使用。
稍后你会看到如何创建ContentProvider以及如何使用你和其他人创建的ContentProvider。
最后描述文件中还可以有一或多个元素表示Service也就是可以独立于Activity长时间运行的代码段。
有关Service的最典型例子就是MP3播放器。
通常我们希望用户在启动其他Activity并且MP3播放器的用户界面“被挤掉”的情况下仍然可以播放音乐。
第29章和第30章将介绍如何创建和使用Service。
2.4.4 确保最大兼容性 与大多数操作系统一样
Android也需要打补丁、升级版本和改进。
其中某些变化会影响到SDK换句话说将会有一些新的类、方法或参数出现而在之前的SDK中这些都是没有的。
如果要确保应用程序能够在具有某个或更高版本的
Android环境的设备上运行则需要向描述文件中添加元素它是元素的子元素。
元素有一个名叫minSdkVersion的特性表示你应用程序需要的SDK版本。
1
Android 1.0 SDK 2
Android 1.1 SDK 3
Android 1.5 SDK 4
Android 1.6 SDK 5
Android 2.0 SDK 在省略元素的情况下应用程序的行为与将minSdkVerion设置1相同。
警告
Android Market似乎要求所有人都必须指定minSdkVersion。
如果你想要通过该渠道销售自己的应用程序别忘了指定适当的元素。
设置之后应用程序将只能安装到兼容的设备上。
不一定非要指定最新的SDK不过如果你选择的是比较老一点的SDK那么你可得要小心一些以确保应用程序能够在你宣称的所有SDK版本中运行。
例如在省略的情况下实际上相当于宣称你的应用《
Android 2基础教程》 第2章 项目和目标 7 / 10 程序能够在每个
Android SDK版本中运行。
此时就必须要通过大量测试来确保这一点。
另外还要注意
Android Market有一个bug为此你必须将作为元素的第一个子元素。
2.4.5 版本控制 需要特别指出的是在你通过
Android Market或其他渠道发布应用程序时可能还需要为元素再添加两个特性
android:versionCode和
android:versionName。
这两个特性对升级应用程序有用。
其中
android:versionName特性是一个人类容易看懂的标签是应用程序的版本名或编号。
因此可以使用3.0、System V、5000、3.1等任何你觉得合适的值。
而
android:versionCode特性则是一个整数表示应用程序的版本号。
系统可以使用这个特性来确定你的应用程序是不是比另一个版本更新。
所谓更新指的是“
android:versionCode的值更大”。
在发布新版本时是将实际的版本即
android:versionName的值转换为数字还是给这个特性的值加1完全取决于你。
2.5 模拟器和目标 本节我们花点时间来讨论一下
Android中“目标”target的概念这个概念不太好理解。
在长周期应用程序开发中特别是在使用
Android模拟器测试应用程序时目标是很重要的。
2.5.1 虚拟设备 在使用模拟器之前需要创建一或多个AVD。
这些虚拟的设备可以用来模仿真实的
Android设备如T-Mobile G1或HTC Magic。
你可以告诉模拟器使用哪个AVD然后模拟器就会将自己装扮成该AVD描述的设备。
而在创建AVD时就需要指定目标。
目标表示的是AVD对应哪一类设备。
在本书写作时有5个目标可供选择。
1
Android 1.1设备例如未更新换代的T-Mobile G1。
2
Android 1.5设备不支持Google Maps。
通常是那些移植了自定义
Android的设备。
3
Android 1.5设备支持Google Maps。
4
Android 1.6设备支持Google Maps。
5
Android 2.0设备支持Google Maps。
提示使用
android list targets命令可以查到可用的API目标。
如果你要开发一个使用Google Maps的应用程序那么就必须将相应AVD的目标指定为3《
Android 2基础教程》 第2章 项目和目标 8 / 10 或更大的值。
可以按照需要创建任意多个AVD只要硬盘上有足够的空间就没问题。
每个AVD都是一个完全不同的设备因此在一个AVD上安装应用程序不会影响其他AVD。
要创建AVD可以使用
android create avd命令可以使用Eclipse或使用AVD管理器
Android 1.6中新增的一个GUI工具。
只运行
android命令不带任何参数即可启动AVD管理器如图2-1所示。
在这个界面中你会看到以前创建的AVD、用于创建和删除AVD的New新建和Delete删除按钮以及一个使用选中的AVD启动模拟器的Start开始按钮等。
图2-1在AVD管理器的界面中可以看到已经创建的AVD 在通过这个图形用户界面添加AVD时点击窗口中的New按钮需要提供名称、目标API/Google Maps、SD卡映像文件以及你希望模拟的屏幕大小名叫Skin——皮肤。
图2-2是Create new AVD对话框。
《
Android 2基础教程》 第2章 项目和目标 9 / 10 图2-2创建新AVD的界面 2.5.2 设定目标 在创建了一个新项目后通过
android create project或通过Eclipse需要指定这个项目针对的是哪一类设备。
而这就要用到上一节给出的目标值了。
例如目标设定为3的项目表示在支持
Android 1.5的设备中运行。
最终的应用程序将无法安装到与指定目标不匹配的设备上。
以下是几条与设定目标有关的经验规则。
只关注你真正需要的特性。
如果你只考虑
Android 1.5 API那么可能就需要基于
Android 1.5 API构建应用程序同时让能够运行该应用程序的设备号码尽量最大。
尽可能测试多个潜在的目标。
例如为了支持尽可能多的
Android设备你可能会不由自主地把目标设定为1。
虽然想法很好但你还必须逐个测试目标为1的AVD、目标为2的AVD以此类推。
关注每个
Android版本发布时的新目标。
每个小数点级的版本如2.0或1.6都会伴随着一个新的目标值甚至补丁级的SDK变化如1.5r1与1.5r2都可能带来新目标值。
因此应该尽可能在新目标值下测试应用程序有些人可是在新
Android设备一发布就会抢先试用。
不考虑目标而只在AVD上测试不能取代在硬件上测试。
AVD是方便测试的一种简易环境覆盖面很广甚至包括一些还没有出现的硬件。
但是你确实应该至少要在一种
Android设备上测试自己的应用程序。
原因很简单模拟器的速度与实际设备的速度很可能不一样一般来说根据系统环境不同模拟器的速度可能会快一些也可能会慢一些。
《
Android 2基础教程》 第2章 项目和目标 10 / 10
上一篇:
Android点餐系统 毕业论文
下一篇:
7*30m公路预应力混凝土连续梁桥上部结构设计