入门 Android从入门到精通
廾发简介 Android提供多种连接选项,包括wiFi、蓝牙和通过蜂窝( cellular)连接的无线数据传输(例如GPRS、EDGE和3G)。Aη droid 应用程序屮一项流行的技术是链接到 Google地图,以便在应用程序屮显示地址。 Android软件栈还提供对基于位置的服务(例如 GPS)和加速计的支持,不过并不是所有的 Android设备都配备了必需的硬件。亏外还有摄像支持 过去,移动应用程序努力冋桌面应用程序看齐的两个领域分别是图形/媒休和数据存储方法。Andrσid通过提供对2D和3D图形 的内置攴持,包括 OpenGL库,解决了图形方面的挑战。由于 Android平台包括流行的开源 SQLite数据库,因此缓解了数据 存储的负担。图1显示一个简化的 Android软件层次结构。 图1. Android软件层次结构 Applications Built-in(phone, contacts, browser), Third-party/Custom Application frame Telephone Mgr, Location Mgr, Notification Mgr, Cantent providers, Windowing Resource Mgr, etc Libraries Andriod runtime Graphics, media, database, WebKit, etc Dalvik virtual machine Linus Kemel Power. File system, drivers, process, management, etc. 应用程序架构 如前所述, Android运行在Linux内核上。 Android应用程序是用java编程语言编写的,它们在一个虚拟机(VM)中运行。 需要汴意的是,这个VM并非您想象中的]vM,而是 Dalvik virtual machine,这是一种开源技术。每个 Android应用稈序都 在 Dalvik vm的一个实例中运行,这个实例驶留在一个由Lnux内核管理的进程中,如下图所小。 Linux Kernel Linux process Dalvik virtual machine Android application 廾发简介 Android应用程序由一个或多个组件组成 活动 具有可视UI的应用程序是用活动实现的。当用户从主屏幕或应用程序片动器选择一个应用程序时,就会开始一个动作 服务 服务应该用于任何需要持续较长时间的应用程序,例如网络监熀器或吏新检查应用程序。 内容提供程序 可以将內容提供程序看作数据库服务器。内容提供程序的任务是管理对持久数据的访问,例如 SQLite数据库。如果应用 稈序非常简单,那么可能不需要创建内容提供稈序。如要构建一个较大的应用稈序,或者构建需夏为多个活动或应用程 序提供数据的应用程序,那么可以使用内容提供程序实现数据访问。 广播接收器 Android应用程序可用丁处哩一个数据元素,或者对一个事件(例如接收文本消息)做出响应 Android应用程序是连同一个 Androidmanifest xm文件一起部署到设备的。 Androidmanifest xm包含必要的配置信息,以 便将亡适当地安装到设备。它包括必需的类名和应用稈序能够处理的事件类型,以及运行应用稈序所需的许可。例如,如果应用稈 序需要访问网络一例如为了下载一个文件一那么 manifest文件中必须显式地列出该许可。很多应用程序可能启用了这个特定 的许可。这种声明式安全性有助于减少恶意应用程序掼害设备的可能性。 卜一节讨论构建 Android应用程序所需的开发坏境。 所需的工具 开始开发 Android应用稈序的最简捷的方式是下载 Android sDk和 Eclipse IdE(参见参考資料)。 Android开发可以在 Microsoft@ Windows6、 Mac os x或 Linux上进行。 本文假设您使用的是 Eclipse Ide和用于 Eclipse的 Android Developer tools插件。 Android应用程序是用Java语言编写 的,但是是在 Dalvik vm(非Java虚拟机)中编译和执行的。在 Eclipse中用Java话言编程书常简单; Eclipse提供一个丰 富的Java环境,包括上下文敏感帮助和代码提小εJava代码通过编译后, Android Developer Tools可确保适当地将它打包, 包括 Android manifest.xm文件。 然没有 Eclipse和 Android Developer Tools插件乜可以开发 Android应用程序,但是那样就需要熟悉 Android sdk Android sDk是作为一个ZIP文件发布的,可以将该文件解压到硬盘上的一个目录中。由于有多个SDK更新,建议有意识地纽 织开发环境,以便在不同的SDK安装之间轻松地切换。SDK包括: android,Jar Java归档文件,其屮包含构建应用程序所需的所有的 Android sDk类。 documention htm和docs目录 本地和网上提供的SDK文档。这些文档的主要形式为 Javadocs,以便于在SDK中导航人量的包。文档还包括一个高 级开发指南和 Android社区的链接。 Samples目录 samples子目录包含各种应用程序的源代码,包括 Api demo,该应用程序演示了很多API这个示例应用程序可以作为 Android应用程序川发的良好起点。 Tools目录 包含所有用于构建 Android应用程序的命令行具。最常用、最有用的具是adb实用程序( Android Debug bridge) usb driver 该目录包含将开发环境迕接到支持 Android的设备(例如G1或 Android dey1解锁开发手机)所需的驱动程序。只 有 Windows平台的川发人员才需要这些文件。 Android应用程序可以在实际的设备上运行,也可以在 Android sdk附带的 Android emulator上运行。图3显示 Android Emu|ator的主屏幕。 图3. Android emulator 廾发简介 困岛751PM B ts. Browser adb实用程序支持一些可选命令行参数,以提供强大的特性,例如复制文件到设备或从设各复制文件。可以使用she川命令行参数 连接到于机本身,并发送基本的Shel命令。图4显示在通过UsB线连接到 Windows笔记本电脑的一个实际设备上运行的 adb shell命令 图4.使用 adb shell命令 EACAWINDOW5\system32\cmd, eke M:\tools>adb -d shell s netcfg netcfg 12"B8.1 255.日.因。 日阳gg49 1:1359:3 anny10Ng.日. 8x99-58082 255-252 5xc00agi Dc2 ronet 5x09351802 v1anUP192.1682.15255255.255.日國xB143 cho专TH cho SPATH sbin e/system/ hin e/s ystem bine/system/xbin s au a cd /data/app d /data/app systen:system 615 2089-83-22 18:38 com. nai flashlight. apk ing googlecon R留e:m #FFFFFF #000000 主屏幕布局有一个定义为a-1 white的肯景色。在 strings.xm文件中,可以看到a11 white被定义为一个值为# FFFFFF的 RGB三元组,即纯白。 布局包含一个 Textview,这实际上是一块静态文本。它是不可编辑的,文本被设为黑色,并通过 gravity属性设为水平居中。 该应用程序有一个名为 FlashLight.java的Java源文件,如以下清单所示 清单3. Flashlight. java package com. msi flashlight import android app. activity; import android os Bundle public class FlashLight extends activity i /** Called when the activity is first created. * public void oncreate(Bundle savedInstancestate)i super oncreate (savedInstancestate); setContentview(r layout main) 廾发简介 该代码是直接来自 New Project向导的模板代码 它是]ava包 com. msi flashlight的一部分。 它有两个 Import 一个用于 activity类 个用于 bundle类 当该活动发起后, onCreate方法被调用,传入一个 savedInstancestate。对于我们来说,不必关心这个 bundle。只有 在暂停然后恢复浯动时才会用到。 onCreate方法覆盖了同名的 activity类方法。它调用超类的 on Create方法。 对 setcontentview()的调用将关联 main. xn文件中定义的UI布局。 main. xh和 strings.xm中的任何内容都 自动映射到R.java源文作中定义的常量。任何时候都不要直接编辑这个文件,因为它随着每次杓建而改变 运行该应用程序可以看到一个白色屏幕,其屮有黑色文本。 看 图回智751PM FlashLIght Android FlashLight MENU 下面显示用于F| ashLight应用程序的 Android Manifest xm|文件。 清单4.用于F| ashLight的 Androidmanifest xml action android: name="android intent. action. MAIN"/> category android: name="android intent. category. LAUNCHER"/> 该文作是由用于 Eclipse的 Android Developer Tools插件自动创建的。您不需要做任何事情。 当然,这个应用程序并不是很强人。但是妇果希望读点书,又不想打扰正在睡觉的爱人,或者如果需要在断电时去地下室查看俣险 丝盒,那么这个应用程序还是很方便的 结束语 在本文中,您阅读了对 Android的简介,并构建了一个小型的应用稈序。希望本文中的例子能激起您进一步探索 Android平台的 兴趣ε Android有望成为对市场产生深远影响的开源平台,它的用处将远远超越移动电话。 手札上的 手机上的 developerWorks. 使用 Android、 Scala和 Eclipse创建移动应用程序 Android操作系统为移动开发提供强大、开放的平台。它利用了Java吶编稈语言和ε clipse工具 平台的威力。现在,还可以将 Scala编程语言加入到其中。在本文中,您将看到如何使用 Scala作 为 Android上的主要开发语言,从而可以使用一种更貝表达力、更加类型安全的编程语言编写移动 应用稈序。 先决条件 在本文中,我们将创建一个在 Android设备上运行的移动应用程序。您将需要安装 Android sDK;本文使用V1.5SDK。应用 程序代码将用 Scala编程语言编写。如果您从来没用过 Scala,那么没冇关系,因为夲文将解释 Scala代码。但是,即使您不熟 悉 Scala,建议您至少熟悉Java语言。本文使用 Scala2.7.5进行开发ε对于 android和 Scala都提供了很好的 Eclipse插 件。木文使用 Eclipse v3.4.2和 Android Development Tools(ADT)V0.9.1以及 Scala ide插件V2.7.5。清参阅参考 资料,获得所有这些工具 设置 编写 Android应用程序听起来像是一个复杂的命题。 Android应用程序在它们自己的虚拟杋中运行: Dalvik虚拟机。但是, Android应用稈序的构建路径是开放的。下面表明了我们将使用的基本簧略。 图1. Android上 Scala的构建路径 X scala X class XY scalac dex KYdex APK Scala Yclass 其思想是,我们首先将所有 Scala代码编译成Java类文件。这是 Scala编译器的工作,所以这方面没什么太复杂的事情。接下 来,获取java类文件,使用 android dex编译器将类文件编译成 Android设备上的 DalvikVIM使用的格式。这就是所谓的 dexing,也是 Android应用程序的常规编译路径。通常,要经历从」java文件到. class文件再到.dex文件的过程。在本文, 惟一不同的是我们从. scala文作开始。最后,,dex文件和其他应用程序资源被压缩成一个APK文件,该文件可安装到 Android 设备上。 那么,如何让这一切发生?我们将使用 Eclipse做大部分工作。但是,此外还有一个较复杂的步骤:要让代码运行,还需要来自标 准Scaa库中的代码。在典型的Scaa安装屮,这是/ib/ scala-library jar屮一个单独的JAR。但是,这个JAR包括一些不 受 Android支持的代码。有些代码需要稍作调整,有些代码则必須移除。scaa- - library. jar的定制构建是运行得最好的,至少目 前是这样。清参阅参考资料,了解这里使用的定制杓建。我们将把这个JAR称作 Android库JAR。 有了这个JAR,剩下的事情就很容易了。只需使用 Eclipse的ADT插件创建一个 Android项目。然后将一个 Scala特性 ( nature)添加到项目中。用前面谈到的 Android库替代标准的 Scala厍。最后,将输出目录添加到类路径中。现在,可以开始 了。主 Scala站点对此有更详细的描述(请参阅参考资料)。现在,我们有了基本的设置,接下来看看我们将使用 Scala创建的 Android应用程序。 Uni七 s Conve卫七er 现在,我们知道如何利用 Scala代码,将它转换成将在 Android设备上运行的二进制格式,接下来可以使用 Scala创建一个移