首页资源分类嵌入式系统安卓 > Android入门到精通详解

Android入门到精通详解

已有 445176个资源

下载专区

文档信息举报收藏

标    签:Android

分    享:

文档简介

Android入门到精通详解.pdf

文档预览

Android入门到精通详解 Android 入门到精通详解 Android入门到精通详解 目录 第一篇 Android 系统结构和 SDK 使用 ...............................................................................4 第 1 章 Android 的系统介绍......................................................................................4 1.1 系统介绍 .......................................................................................................5 1.2 软件结构和使用的工具 ...............................................................................9 第 2 章 Android SDK 的开发环境 ...........................................................................12 2.1 Android SDK 的结构 .....................................................................................13 2.2 Android SDK 环境安装 .................................................................................15 2.3 Android 中运行仿真器环境 ..........................................................................31 2.4 Android 中建立工程 ......................................................................................45 第二篇 Android 应用程序的概述和框架 ..........................................................................56 第 3 章 Android 应用层程序的开发方式 ..................................................................56 3.1 应用程序开发的结构 ...................................................................................57 3.2 API 参考文档的使用 .....................................................................................58 第 4 章 Android 应用程序示例................................................................................63 4.1 HelloActivity 程序的运行 ..........................................................................64 4.2 HelloActivity 的源文件结构 ......................................................................65 4.3 HelloActivity 的编译结构 ..........................................................................69 4.4 SkeletonApp 的程序的运行 .......................................................................69 4.5 SkeletonApp 的源文件结构 .......................................................................71 4.6 SkeletonApp 的编译结构 ...........................................................................73 第 5 章 Android 应用程序的内容..............................................................................74 5.1 Android 应用程序的概念性描述 ...............................................................75 5.2 应用程序包含的各个文件 .........................................................................82 5.3 使用 am 工具启动 Android 应用程序 .......................................................84 第三篇 Android 的 UI 系统实现.........................................................................................86 第 6 章 UI 的基本外形和控制 ...................................................................................86 6.1 控件和基本事件的响应 .............................................................................87 6.2 键盘事件的响应 ...........................................................................................93 6.3 运动事件的处理 ...........................................................................................96 6.4 屏幕间的跳转和事件的传递 .....................................................................100 6.5 菜单的使用 ..................................................................................................106 6.6 弹出对话框 ..................................................................................................109 2 Android入门到精通详解 6.7 样式的设置 .................................................................................................118 第 7 章 控件(Widget)的使用...............................................................................125 7.1 Android 中控件的层次结构 .....................................................................126 7.2 基本控件的使用 .......................................................................................127 7.3 自定义的视图 .............................................................................................138 第 8 章 视图组(ViewGroup)和布局(Layout)的使用.....................................142 8.1 Android 的屏幕元素体系 ............................................................................143 8.2 几种独立使用的视图组 .............................................................................145 8.3 作为简单容器使用的视图组 ............................................................153 8.4 布局(Layout)..........................................................................................159 8.5 网格(Grid)视图组................................................................................167 8.6 列表(List)视图组 .................................................................................172 8.7 使用 Tab 组织 UI ......................................................................................177 第 9 章 2D 图形接口的使用 ....................................................................................182 9.1 使用 2D 图形接口的程序结构。 ..............................................................183 9.2 图像、图形、文本的基本绘制 .................................................................185 9.3 文本的对齐方式 .........................................................................................188 9.4 使用路径效果(PathEffect).....................................................................190 9.5 剪裁效果 .....................................................................................................193 9.6 记录绘制的过程 .........................................................................................195 9.7 动画效果 .....................................................................................................197 第 10 章 OpenGL 3D 图形的使用............................................................................200 10.1 使用 OpenGL 图形接口的程序结构。 ...................................................201 10.2 基本的绘制 ...............................................................................................202 10.3 渲染器的实现 ...........................................................................................204 10.4 3D 动画效果的实现 ..................................................................................207 3 Android入门到精通详解 第一篇 Android 系统结构和 SDK 使用 第 1 章 Android 的系统介绍   1.1 系统介绍 1.2 软件结构和使用的工具 4 Android入门到精通详解 1.1 系统介绍 Android 是 Google 开发的基于 Linux 平台的、开源的、智能手机操作系统。 Android 包括操作系统、中间件和应用程序,由于源代码开放,Android 可以被移 植到不同的硬件平台上。 OHA(Open Handset Alliance,开放手机联盟),为 Google 与 33 家公司联手 为 Android 移动平台系统的发展而组建的一个组织。 HTC 和 Google 合作推出了几款手机:G1、G2、Hero 和 Nexus One,其他的 手机厂商也推出了几款 Android 手机,如下图所示: 5 Android入门到精通详解 图 G1、G2、Hero 和 Nexus One 手机 围绕在 Google 的 Android 系统中,形成了移植开发和上层应用程序开发两个 不同的开发方面。手机厂商从事移植开发工作,上层的应用程序开发可以由任何 单位和个人完成,开发的过程可以基于真实的硬件系统,还可以基于仿真器环境。 Android 1.5 以前的仿真环境,Android 1.6 以后的仿真器环境如下所示: 6 Android入门到精通详解 图 Android 1.5 以前的仿真器环境 7 Android入门到精通详解 图 Android 1.6 以后的仿真器环境 作为一个手机平台,Android 在技术上的优势主要有以下几点:  全开放智能手机平台  多硬件平台的支持  使用众多的标准化技术  核心技术完整,统一  完善的 SDK 和文档  完善的辅助开发工具 Android 的开发者可以在完备的开发环境中进行开发,Android 的官方网站也 提供了丰富的文档、资料。这样有利于 Android 系统的开发和运行在一个良好的 生态环境中。 8 Android入门到精通详解 1.2 软件结构和使用的工具 从宏观的角度来看,Android 是一个开放的软件系统,它包含了众多的源代 码。从下至上,Android 系统分成 4 个层次:  第 1 层次:Linux 操作系统及驱动;  第 2 层次:本地代码(C/C++)框架;  第 3 层次:Java 框架;  第 4 层次:Java 应用程序。 Android 系统的架构如图所示: 第四层:Java应用程序 系统API 第三层:Java框架 C/C++ <--> JAVA 第二层:本地框架和Java运行环境 内核空间 <--> 用户空间 第一层:Linux操作系统及驱动 图 Android 系统的架构 Android 的第 1 层次由 C 语言实现,第 2 层次由 C 和/C++实现,第 3、4 层 次主要由 Java 代码实现。 第 1 层次和第 2 层次之间,从 Linux 操作系统的角度来来看,是内核空间与 用户空间的分界线,第 1 层次运行于内核空间,第 2、3、4 层次运行于用户空间。 第 2 层次和第 3 层次之间,是本地代码层和 Java 代码层的接口。 第 3 层次和第 4 层次之间,是 Android 的系统 API 的接口,对于 Android 应 用程序的开发,第 3 层次以下的内容是不可见的,仅考虑系统 API 即可。 9 Android入门到精通详解 由于 Android 系统需要支持 Java 代码的运行,这部分内容是 Android 的运行 环境(Runtime),由虚拟机和 Java 基本类组成。 对于 Android 应用程序的开发,主要关注第 3 层次和第 4 层次之间的接口。 除了软件本身的代码之外,Android 还提供了一系列工具来辅助系统开发, 这些主要的工具包括:  aapt(Android Asset Packaging Tool):用于建立 zip 兼容的包(zip、jar、apk), 也可用于将资源编译到二进制的 assets。  adb(Android Debug Bridge,Android 调试桥):使用 adb 工具可以在模拟器 或设备上安装应用程序的.apk 文件,并从命令行访问模拟器或设备。也可以 用它把 Android 模拟器或设备上的应用程序代码和一个标准的调试器连接 在一起。  android 工具:android 工具是一个脚本,用于创建和管理 Android Virtual Devices (AVDs)。  AIDL 工具(Android Interface Description Language,Android 接口描述语言 工具),AIDL 工具可以生成进程间接口的代码,诸如 Service 可能使用的接 口。  AVDs(Android Virtual Devices,Android 虚拟设备)  用于配置模拟器,模拟出类似的设备效果  DDMS(Dalvik Debug Monitor Service,Dalvik 调试监视器服务):这个工具 集成了 Dalvik,能够在模拟器或者设备上管理进程并协助调试。可以使用它 杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和 线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。  dx:dx 工具用于将.class 字节码(bytecode)转换为 Android 字节码(保存 在.dex 文件中)这个字节码文件是给 Android 的 Java 虚拟机运行用的。  Draw 9-patch:Draw 9-patch 工具允许使用所见即所得(WYSIWYG)的编 辑器轻松地创建 NinePatch 图形。  Emulator(模拟器):模拟器是一个运行于主机上的程序,可以使用模拟器 来模拟一个实际的 Android 系统的运行,使用模拟器非常适合调试和测试应 用程序。  Hierarchy Viewer(层级观察器):层级观察器工具允许调试和优化用户界面。 它用可视的方法把视图(view)的布局层次展现出来,此外,还给当前界面 提供了一个具有像素栅格(grid)的放大镜观察器。  mksdcard:帮助创建磁盘映像(disk image),可以在模拟器环境下使用磁盘 10 Android入门到精通详解 映像来模拟外部存储卡(例如 SD 卡)。  Monkey:Monkey 是在模拟器或设备上运行的一个小程序,它能够产生随机 的用户事件流,例如:点击(click)、触摸(touch)、挥手(gestures),还包 括一系列系统级事件。可以使用 Monkey 给正在开发的程序做随机的但可重 复的压力测试。  sqlite3:sqlite3 工具能够方便地访问 SQLite 数据文件,这是一个 sqlite 标准 命令行工具。  Traceview:这个工具可以将 Android 应用程序产生的跟踪日志(trace log) 转换为图形化的分析视图。 11 Android入门到精通详解 第 2 章 Android SDK 的开发环境   2.1 Android SDK 的结构 2.2 Android SDK 的环境安装 2.3 Android 中运行仿真器环境 2.4 Android 中建立中程 12 Android入门到精通详解 Android 的 SDK 开发环境使用预编译的内核和文件系统,屏蔽了 Android 软 件架构第三层及以下的内容,开发者可以基于 Android 的系统 API 配合进行应用 程序层次的开发。在 SDK 的开发环境中,还可以使用 Eclipse 等作为 IDE 开发环 境。 2.1 Android SDK 的结构 Android SDK 在 IDE 环境中使用的组织结构如图所示: 安装 插件 ADT 设置SDK Eclipse 开发环境 运行仿真器 建立 工程 Android SDK 底层映像 工具 Windows Linux 示例代码 文档 本机JAVA环境 图 Android 系统的 IDE 开发环境 Android 提供的 SDK 有 Windows 和 Linux(其区别主要是 SDK 中工具不同), 在 Android 开发者的网站上可以直接下载各个版本的 SDK。 Android 的 SDK 命名规则为: android-sdk-{主机系统}_{体系结构}_{版本} 例如,Android 提供 SDK 的几个文件包如下所示:  android-sdk-windows-1.5_r2.zip  android-sdk-linux_x86-1.5_r2.zip  android-sdk-windows-1.6_r1.zip  android-sdk-linux_x86-1.6_r1.zip 13 Android入门到精通详解 SDK 的目录结构如下所示:  add-ons:附加的包;  docs:HTML 格式的离线文档;  platforms:SDK 核心内容;  tools:工具。 在 platforms 中包含了的各个 Android SDK 版本的目录中,包含系统映像,工 具、示例代码等内容。  data/ :包含默认的字体、资源等内容;  images/ :包含默认的 Android 磁盘映像,包括了系统映像(Android system image), 默认的用户数据映像(userdata image),默认的内存盘映像 (ramdisk image)等等,这些映像是仿真器运行的时候需要使用的;  samples/:包含一系列的应用程序,可以在 Android 的开发环境中,根据它 们建立工程,编译并在仿真器上运行;  skins/:包含了几个仿真器的皮肤,每个皮肤对应了一种屏幕尺寸;  templates/:包含了几个用 SDK 开发工具的模板;  tools/:特定平台的工具; Any development tools that are specific to the platform version.  android.jar:Android 库文件的 JAVA 程序包,在编译本平台的 Android 应用 程序的时候被使用。 不同保本的 API 对应着不同的 API 级别,Android 已经发布,并且属于正式 支持的各个版本的 SDK 如下所示: Android 的发布版本 API 级别 Android 1.1 2 Android 1.5 3 Android 1.6 4 Android 2.0 5 Android 2.0.1 6 Android 2.1 7 Android 的 SDK 需要配合 ADT 使用,ADT(Android Development Tools)是 Eclipse 集成环境的一个插件。通过扩展 Eclipse 集成环境功能,使得生成和调试 Android 应用程序既容易又快速。 14 Android入门到精通详解 2.2 Android SDK 环境安装 Android 的 SDK Windows 版本需要以下的内容:  JDK 1.5 或者 JDK 1.6  Eclipse 集成开发环境  ADT(Android Development Tools)插件  Android SDK 其中 ADT 和 Android SDK 可以到 Android 开发者的网站去下载,或者在线 安装亦可,ADT 的功能如下所示:  可以从 Eclipse IDE 内部访问其他的 Android 开发工具。例如,ADT 可以让 你直接从 Eclipse 访问 DDMS 工具的很多功能——屏幕截图、管理端口转发 (port-forwarding)、设置断点,观察线程和进程信息。  提供了一个新的项目向导(New Project Wizard),帮助你快速生成和建立起 新 Android 应用程序所需的最基本文件  使构建 Android 应用程序的过程变得自动化,以及简单易行。  提供了一个 Android 代码编辑器,可以帮助你为 Android manifest 和资源文件 编写有效的 XML 在 Eclipse 环境中使用 Android SDK 的步骤如下所示: 2.2.1. 安装 JDK 基本 Java 环境。 Eclipse 的运行需要依赖 JDK,因此需要下载使用 JDK 的包,并进行安装。 JDK 1.6 版 本 其 文 件 为 jdk-6u10-rc2-bin-b32windows-i586-p-12_sep_2008.exe,点击直接进行安装即可。 2.2.2. 安装 Eclipse Eclipse 集成开发环境是开放的软件,可以到 Eclipse 的网站上去下载: http://www.eclipse.org/downloads/ Eclipse 包含了以下的几个版本  Eclipse 3.3(Europa)  Eclipse 3.4(Ganymede) 15 Android入门到精通详解  Eclipse 3.5(Galileo) 在 Android 的开发中,推荐使用 Eclipse 3.4 和 Eclipse 3.5,Eclipse 3.3 虽然也 可以使用,但是没有得到 Android 官方的验证。 如果使用 Eclipse 3.4,可以去下载 eclipse-SDK-3.4-win32.zip 包;如果使用 Eclipse 3.5,可以去下载 eclipse-SDK-3.5.1-win32.zip 包。这个包不需要安装,直 接解压缩即可,解压缩后执行其中的 eclipse.exe 文件。 2.2.3. 获得 Android SDK Android 的 SDK 是一个比较庞大的部分,包含了 Android 系统的二进制内容、 工具和文档等。得到 Android SDK,可能使用到两种方式:  下载 Android SDK 的包(Archives)  通过软件升级的方式(Setup) 下载 Android SDK 的包:对于 Android SDK 1.6 之前的版本,包括 Android SDK 1.1,Android SDK 1.5,Android SDK 1.6 可以直接从 Android 开发者中下载得到, 每个 SDK 包含 Linux、Windows 和 MAC 三个版本。在 Windows 环境中,使用 Windows 的 版 本 , 例 如 : android-sdk-windows-1.5_r2.zip , android-sdk-windows-1.6_r1.zip,这个包通常用几百 M 的大小。 以这种方式下载的 Android SDK,不需要安装,直接解压缩即可。 目前 Android 系统推荐使用的方式软件升级获得 Android 包:  第一步:获得 android-sdk_r04-windows.zip 从 Android 开发者上,获取 Android SDK 的相关包 android-sdk_r04-windows.zip, 这个包比实际的 Android 的 SDK 要小得多,只有 20 多 M,其中包含了一个 Setup 可 执行程序,获取完整的 SDK 是通过这个可执行程序获得的。解压缩这个包,获得 Android SDK 的基本目录结构,但是其中还没有实际的内容。  第二步:运行 SDK Setup.exe 程序,下载实际的 Android SDK 运行程序,Android SDK 的,出现 SDK 的下载界面: 16 Android入门到精通详解 图 Android SDK 的安装界面 在 Settings 中进行设置,选中 Force ……项,并且选择保存(Save and Apply)。 17 Android入门到精通详解 图 设置安装路径 回到 Installed Packages 中,进行安装,出现 Android 的各个版本的 SDK、工 具、文档的安装界面,如下所示: 图 选择要安装的组件 每个组件可以选择,接受(Accept)表示安装,拒绝(Reject)表示不安装, 接受全部(Accept All)表示安装所有的内容。文档一般安装成最新的版本。 选择后,安装程序将依次安装各个组件。 18 Android入门到精通详解 图 安装界面 下载过程中,每个组件将首先被放置到 temp 中,以一个 zip 包的形式存在。 下载完成后,得到完整的 Android SDK。 2.2.4(1). 在 Eclipse 3.4(Ganymede)中安装 ADT 第一步:启动 Eclipse 选择“Help”>“Software Updates...”准备安装插件。 19 Android入门到精通详解 图 Eclipse 3.4 中选择软件升级 第二步:在打开的对话框中点击“Available Software”,出现 Eclipse 的 现有软件对话框。 图 Eclipse 3.4 中选择要安装的插件 20 Android入门到精通详解 点击右侧自上而下的第 3 个按钮,“Add Site...”准备增加插件。 图 增加 ADT 的路径 在“Add Site”对话框中,输入 Android 插件的路径: https://dl-ssl.google.com/android/eclipse/ 另外的一种方式是点击 Archive„按钮,这样可以不使用网络,直接指定磁 盘中的 ADT 包(目前最新的版本是 ADT-0.9.5.zip)。 第三步:回到安装对话框,可以看到 plugin 的 URL 下面有“Developer Tools”。 选择到“Developer Tools”中, 图 Eclipse 3.4 中选择安装 Android 的 DDMS 和 ADT 然后点击“Install...”按钮,继续运行,如图所示: 21 Android入门到精通详解 图 Eclipse 3.4 中进行安装 Android 的 DDMS 和 ADT 选择 Next 将出现如图的对话框: 图 Eclipse 3.4 中选择同意 Android 的协议 22 Android入门到精通详解 选择接受(accept)并且选择 Finish 完成安装之前的配置,后面的将进入安 装的 Android 组件的阶段。 安装的过程要经过寻找依赖和安装两个阶段,如图所示: 图 Eclipse 3.4 中解决依赖关系和安装 第四步:安装完成,关闭并重新启动 Eclipse。再次进入 Eclipse 3.4 后,将发 现 ADT 已经被安装。 2.2.4(2). 在 Eclipse 3.5(Galileo)中安装 ADT 第一步:启动 Eclipse 选择 “Help”>“Install New Software...”准备安装插 件。 23 Android入门到精通详解 图 Eclipse 3.5 中选择安装新软件 第二步:出现软件升级的对话框 图 Eclipse 3.5 的软件升级的对话框 点击右侧自上而下的第 3 个按钮,“Add Site...”准备增加插件。 24 Android入门到精通详解 图 Eclipse 3.5 中增加 ADT 插件的路径 在“Add Site”对话框中,输入 Android 插件的路径: https://dl-ssl.google.com/android/eclipse/ 另外的一种方式是点击 Archive„按钮,这样可以不使用网络,直接指定磁 盘中的 ADT 包(最新的版本是 ADT-0.9.5.zip)。 第 四 步 : 回 到 软 件 升 级 对 话 框 , work with 的 路 径 变 为 了 https://dl-ssl.google.com/android/eclipse/,后面的列表变为了“Developer Tools”, 其中包含了两个项目:  Android DDMS  Android Development Tools 选择继续进行安装: 25 Android入门到精通详解 图 Eclipse 3.5 中选择安装 Android 的 DDMS 和 ADT 选中后,点击 Finish 将出现安装的详细信息的对话框,如图所示: 26 Android入门到精通详解 图 Eclipse 3.5 中选择安装 Android 的插件 选择 Next 进行下一步的安装。 27 Android入门到精通详解 图 Eclipse 3.5 中选择同意 Android 的协议 选择接受(accept)并且选择 Finish 完成安装之前的配置,后面的将进入安 装的 Android 组件的阶段。安装的过程如图所示: 28 Android入门到精通详解 图 Eclipse 3.5 中选择进行 Android 的插件 第五步:安装完成,关闭并重新启动 Eclipse。再次进入 Eclipse 3.5 后,将发 现 ADT 已经被安装。 2.2.5. 在 Eclipse 中配置 Android SDK 进入安装 ADT 的 Eclipse 环境后,选择“Window”>“Preference”,从左侧 的列表中选择 Android 项: 29 Android入门到精通详解 图 Eclipse 中选择 Android SDK 的路径 左侧的 Android 选项是由于安装了 Android 的 SDK 而出现的。 在 SDK 设置 SDK Location 中,点击“Browse”„按钮;选择 Android,SDK 的目录,点击“OK”按钮。 30 Android入门到精通详解 2.3 Android 中运行仿真器环境 2.3.1. 建立 Android 虚拟设备 为了运行一个 Android 仿真器的环境,首先需要建立 Android 虚拟设备 (AVD)。在 Eclipse 的菜单中,选择“Window”>“Android AVD Manager”, 出现“Android SDK and AVD Device Manager”窗口,界面如图所示: 图 Android SDK 和 AVD 管理器 界面中间的列表表示了目前可以使用的 Android 虚拟设备,在没有虚拟设备 的情况下点击右侧的 New 选择建立一个虚拟设备。 建立新的 Android 虚拟设备的窗口为 Create new AVD,如图所示: 31 Android入门到精通详解 图 建立新的 AVD Android 虚拟设备的建立包含了以下的一些选项:  名字(Name):这个虚拟设备的名称,由用户自定义;  目标(Target):选择不同的 SDK 版本(依赖一目前 SDK 的 platform 目中包含了 哪些版本的 SDK)  SD 卡:模拟 SD 卡,可以选择大小或者一个 SD 卡映像文件,SD 卡映像文件是 使用 mksdcard 工具建立的。  皮肤(Skin):这里皮肤的含义其实是仿真器运行尺寸的大小,默认的尺寸有 HVGA-P(320x480),HVGA-L(480x320)等,也可以通过直接指定尺寸的方 式制定屏幕的大小。  属性:可以由用户指定仿真器运行的时候,Android 系统中一些属性 32 Android入门到精通详解 2.3.2. 运行虚拟设备 在“Android SDK and AVD Device Manager”窗口中,选择一个设备,点击 右侧的 Start,将启动虚拟设备,运行一个 Android 系统,一个 HVGA-P(320x480) 尺寸的运行结果如图所示: 图 使用仿真器的运行 Android 系统 出现窗口的左侧是运行的仿真器的屏幕,右侧是模拟的键盘。设备启动后, 可以使用右侧的键盘模拟真实设备的键盘操作,也可以用鼠标点击(或者拖拽和 长按)屏幕,模拟触摸屏的操作。 除了使用右侧的模拟键盘之外,也可以使用 PC 机的键盘来进行模拟真实设 备的键盘操作。尤其是当仿真器的大小不是标准值的时候,可能不会出现按键的 面板,在这种情况下只能使用键盘的按键来控制仿真器的按键 按键之间的映射关系如下表所示: 仿真器的虚拟按键 键盘的按键 Home HOME 33 Android入门到精通详解 Menu (左软按键) Star (右软按键) Back F2 or Page-up button Shift-F2 or Page Down ESC Call/dial button F3 Hangup/end call button F4 Search F5 Power button F7 Audio volume up button Audio volume down button KEYPAD_PLUS, Ctrl-5 KEYPAD_MINUS, Ctrl-F6 Camera button 切换到上一个布局方向(例如 portrait 和 landscape) 切换到下一个布局方向(例如 portrait 和 landscape) Ctrl-KEYPAD_5, Ctrl-F3 KEYPAD_7, Ctrl-F11 KEYPAD_9, Ctrl-F12 切换 Cell 网络的开关 on/off 切换 Code profiling 切换全屏模式 F8 F9 Alt-Enter 切换跟踪球(trackball)模式 F6 临时进入跟踪球(trackball)模式(当长按按 键的时候) Delete DPad left/up/right/down DPad center click KEYPAD_4/8/6/2 KEYPAD_5 Onion alpha 的增加和减少 KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/) Android 仿真器启动虚拟设备之后,默认就可以使用主机的网络作为自己的 网络、使用主机的音频设备作为自己的声音输出。 2.3.3. 使用 Android 中的工具 在仿真器环境中,可以使用集成的 Android 相关工具。使用的方法是 Window-> Show View -> Other 选项,可以开启 Android 的各个工具。调用的过程 如下图所示: 34 Android入门到精通详解 图 选择 Android 的各个工具 选择 Android 工具的对话框如图所示: 35 Android入门到精通详解 图 选择 Android 工具的对话框 这里可以选择的主要工具有 Device(设备控制)、Emulator Control(仿真器 控制)、File Explore(文件浏览)、Heap(堆内存)、Logcat、Resource Explore (资源浏览)、Threads(线程等)。每个工具开启之后,将出现一个单独的选项 卡。 2.3.4. 使用 logcat Logcat 工具是查看系统 Log 信息的工具,可以获得 Android 系统运行的时候 打印出来的信息。工具的界面如下所示: 36 Android入门到精通详解 图 使用 Logcat 工具显示 LOG Logcat 实际上是一个运行在目标系统的工具,也就是一个 Linux 的命令行程 序,这是界面种是带有 GUI 的效果。Logcat 的窗口中记录的信息也就是实际的 Android 系统打印出来的。包含了时间(Time)、级别(Level)、进程 ID(Pid)、 标签(tag)、Log 内容(Message)等项目。 Logcat 窗口可以设置 Log 的过滤器(Filter),这样可以仅仅获得自己需要的 Log 信息,屏蔽其他的信息。 命令行程序 logcat,位于目标文件系统中该工具位于 system/bin 目录中, Logcat 的使用方法如下所示: # logcat [options] [filterspecs] logcat 工具的选项如下所示: -s 设置过滤器,例如指定 '*:s 37 Android入门到精通详解 -f 输出到文件,在默认情况下是标准输出 -r [] 循环 log 的字节数(默认为 16),需要 –f -n 设置循环 log 的最大数目,默认为 4 -v 设置 log 的打印格式, 是下面的一种: brief process tag thread raw time threadtime long -c 清除所有 log 并退出 -d 得到所有 log 并退出(不阻塞)‫‏‬ -g 得到环形缓冲区的大小并退出 -b 请求不同的环形缓冲区('main'(默认)、'radio'、'events')‫‏‬ -B 将 log 输出到二进制文件中 2.3.5. 使用仿真器控制 选择 Emulator Control 选项可以开启仿真器的控制对话框,它的界面如下所 示: 38 Android入门到精通详解 图 Android 仿真器控制界面 它甚至可以模拟打电话,发短信的过程。例如在 incoming number 中输入电 话号码,然后点击 Call 按钮。这是仿真器的运行界面如图所示: 39 Android入门到精通详解 图 Android 仿真器接收来电 接受电话的程序已经被调用起来,这里显示的电话号码 1-234-56,也是在仿 真器控制的窗口中设置的。 模拟发送短信的界面显示如下所示: 40 Android入门到精通详解 图 Android 仿真器接收短信 2.3.6. 命令行工具 adb、mksdcard 等 有一些 Android 的工具需要在命令行的环境中运行,只是可以选择 Windows 的开始->运行,键入 cmd 并确定,进入命令行的界面中运行。主要的命令行工具 包括 adb 和 mksdcard 等。命令行的工具在 Android SDK 的 tools 目录中,使用命 令行的窗口如图所示: 41 Android入门到精通详解 图 在命令行中使用 adb adb(Android Debug Bridge,Android 调试桥)是 Android 的主要调试工具, 它可以通过网络或者 USB 连接真实的设备,也可以连接仿真器。使用 adb 进行调 试,通常在命令行的界面中。 将出现 shell 提示符,这就是 Android 所运行的 Linux 系统中的 shell 终端, 可以在这个 shell 提示符后执行 Android 系统提供的 Linux 命令。 使用 ls 命令查看 Android 系统根目录: # ls -l drwxrwxrwt root drwxrwx--- system d--------- system lrwxrwxrwx root drwxr-xr-x root drwxr-xr-x root root cache system root root root 2009-06-15 02:17 sqlite_stmt_journals 2009-06-15 02:18 cache 2009-06-15 02:17 sdcard 2009-06-15 02:17 etc -> /system/etc 2009-05-28 02:16 system 1970-01-01 00:00 sys 42 Android入门到精通详解 drwxr-x--- root dr-xr-xr-x root -rwxr-x--- root -rwxr-x--- root -rwxr-x--- root -rw-r--r-- root drwxrwx--x system drwx------ root drwxr-xr-x root root root root root root root system root root 1970-01-01 00:00 sbin 1970-01-01 00:00 proc 9075 1970-01-01 00:00 init.rc 1677 1970-01-01 00:00 init.goldfish.rc 106568 1970-01-01 00:00 init 118 1970-01-01 00:00 default.prop 2009-05-28 02:49 data 1970-01-01 00:00 root 2009-06-15 02:18 dev Android 根目录中的主要文件夹与目标系统的 out/target/product/generic/root 内容相对应,此外 etc、proc 等目录是在 Android 启动后自动建立的,system 映像 被挂接到根文件系统的 system 目录中,data 映像被挂接到根文件系统的 data 目录 中。 使用 ps 命令可以查看 Android 系统的进程: # ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 280 188 c008de04 0000c74c S /init root 2 0 0 0 c004b334 00000000 S kthreadd root 3 2 0 0 c003cf68 00000000 S ksoftirqd/0 root 4 2 0 0 c00486b8 00000000 S events/0 root 5 2 0 0 c00486b8 00000000 S khelper root 10 2 0 0 c00486b8 00000000 S suspend root 42 2 0 0 c00486b8 00000000 S kblockd/0 root 45 2 0 0 c00486b8 00000000 S cqueue root 47 2 0 0 c016f13c 00000000 S kseriod root 51 2 0 0 c00486b8 00000000 S kmmcd root 96 2 0 0 c0065c7c 00000000 S pdflush root 97 2 0 0 c0065c7c 00000000 S pdflush root 98 2 0 0 c006990c 00000000 S kswapd0 root 100 2 0 0 c00486b8 00000000 S aio/0 root 269 2 0 0 c016c884 00000000 S mtdblockd root 304 2 0 0 c00486b8 00000000 S rpciod/0 root 540 1 740 328 c003aa1c afe0d08c S /system/bin/sh system 541 1 808 264 c01654b4 afe0c45c S /system/bin/servicemanager root 542 1 836 364 c008e3f4 afe0c584 S /system/bin/vold root 543 1 668 264 c0192c20 afe0cdec S /system/bin/debuggerd radio 544 1 5392 684 ffffffff afe0cacc S /system/bin/rild root 545 1 72256 20876 c008e3f4 afe0c584 S zygote media 546 1 17404 3496 ffffffff afe0c45c S /system/bin/mediaserver bluetooth 547 1 1168 568 c008de04 afe0d25c S /system/bin/dbus-daemon root 548 1 800 300 c01f3b04 afe0c1bc S /system/bin/installd root 551 1 840 356 c00ae7b0 afe0d1dc S /system/bin/qemud root 554 1 1268 116 ffffffff 0000e8f4 S /sbin/adbd system 570 545 175652 23972 ffffffff afe0c45c S system_server radio 609 545 105704 17584 ffffffff afe0d3e4 S com.android.phone app_4 611 545 113380 19492 ffffffff afe0d3e4 S android.process.acore app_12 632 545 95392 13228 ffffffff afe0d3e4 S com.android.mms app_4 645 545 97192 12964 ffffffff afe0d3e4 S com.android.inputmethod.latin 43 Android入门到精通详解 app_5 655 545 95164 13376 ffffffff afe0d3e4 S android.process.media app_7 668 545 97700 14264 ffffffff afe0d3e4 S com.android.calendar app_11 684 545 94132 12624 ffffffff afe0d3e4 S com.android.alarmclock root 702 540 888 340 00000000 afe0c1bc R ps 从系统的进程中可以看到,系统 1 号和 2 号进程以 0 号进程为父进程。init 是系统运行的第 1 个进程,即 Android 根目下的 init 可执行程序,这是一个用户 空间的进程。kthreadd 是系统的 2 号进程,这是一个内核进程,其他内核进程都 直接或间接以它为父进程。 Zygote、/system/bin/sh、/system/bin/mediaserver 等进程是被 init 运行起来的, 因此它们以 init 为父进程。其中 android.process.acore(Home)、com.android.mms 等进程代表的是应用程序进程,它们的父进程都是 zygote。 使用 adb 连接目标系统终端的方式如下所示: > adb shell 使用 adb 安装应用程序的方法为: > adb install XXX.apk 使用 adb 在主机和目标机之间传送文件的方法为: > adb push {host_path} {target_path} > adb pull {target_path} {host_path} mksdcard 是用来建立 SD 卡映像的工具,用来建立一个 Fat32 格式的磁盘映 像,其使用方法如下所示: mksdcard [-l label] mksdcard 的参数-l 用于指定磁盘映像的标签,size 用于指定磁盘映像的大小, 其后面可以跟 K、M、G 等参数,file 是磁盘映像的文件名称,这个文件也就是在 仿真器运行过程中指定的文件。 mksdcard 的一个使用的示例如下所示: > mksdcard 128M sdcard.img 这表示建立了一个大小为 128M,名称为 sdcard.img 的 Fat32 磁盘映像文件。 2.3.7. 使用设备控制 Device 工具可以用于进一步控制仿真器的运行状况,在其中可以查看 Heap (堆内存)、Threads(线程)的信息,还具有停止某个进程的运行,截取屏幕等 功能。Device 工具的窗口如图所示: 44 Android入门到精通详解 图 Android 的设备工具 点击 Device 窗口工具栏最右侧的 Screen Capture 按钮,可以打开截取屏幕的 窗口,如上图所示。 2.4 Android 中建立工程 2.4.1. 建立工程 Android 的 SDK 环境安装完成后,就可以在 SDK 中建立工程并进行调试了。 建立 Android 工程步骤如下: 选择“File”>“New”>“Project” 选择“Android”>“Android Project”,点击“Next”按钮: 45 选择 the contents for the project。 Android入门到精通详解 图 建立新的 Android 工程 可以选择新建工程或从源代码建立工程,如果从源代码建立工程,那么所指 定的目录中需要具有 AndroidManifest.xml 文件。 46 Android入门到精通详解 图 使用已有的示例建立新工程 可以使用 SDK 的 platforms/android-XXX/samples 中的各个子目录建立工程, 这是 SDK 自带的示例程序,例如,使用 HelloActivity 示例程序。 47 Android入门到精通详解 图 选择工程示例 点击“Finish”按钮,工程将被建立。 2.4.2. 查看和编辑各个文件 建立工程后,可以通过 IDE 环境查看和编辑 Android 应用程序中的各个文件。 不同的文件将使用不同的工具查看。 查看 AndroidManifest.xml 文件的情况,如图所示: 48 Android入门到精通详解 图 查看和编辑 AndroidManifest.xml 文件 显示的内容是以窗口的方式查看和更改 AndroidManifest.xml 中的内容,点击 下面的 AndroidManifest.xml 标签将切换到文本模式,使用文本的形式查看和编辑 AndroidManifest.xml 中的内容。 浏览布局文件,如图所示: 49 Android入门到精通详解 图 查看和编辑布局文件 浏览布局文件是一个更有用的功能,可以直观地查看程序的 UI 布局,点击 标签(布局文件的名称)可以切换到文本模式。利用 IDE 的布局查看器,可以在 程序没有运行的情况下直接查看和组织目标 UI 界面。 查看各个 value 文件和建立数值,如图所示: 50 Android入门到精通详解 图 查看各个 value 文件和建立数值 查看各个 Java 源代码文件,如图所示: 51 Android入门到精通详解 图 Java 源代码文件的编辑界面 Java 源代码采用文本的方式,但是在右边也列出了 Java 源代码中类的层次结 构。在 IDE 的源代码环境开发 JAVA 程序,还具有自动修正、自动增加依赖包、 类方法属性查找等功能。 2.4.3. 运行工程 在 Android 中运行一个工程,可以使用,右键单击工程名称,“选择 Run As” 或者“Debug As”来运行和调试工程: 52 Android入门到精通详解 图 运行 Android 工程 开始运行的时候,如果现在已经有连接到真实的设备或者仿真器设备上,将 直接使用这个设备,否则将启动一个新的仿真设备。 开始运行后,在 IDE 下层的控制台(console)标签中,将出现目标运行的 log 信息,可以获取目标运行的信息。出现类似的 Log 信息: [HelloActivity]Android Launch! [HelloActivity]adb is running normally. [HelloActivity]Performing com.example.android.helloactivity.HelloActivity activity launch [HelloActivity]Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'HVGA' [HelloActivity]WARNING: Application does not specify an API level requirement! [HelloActivity]Device API version is 4 (Android 1.6) [HelloActivity]Uploading HelloActivity.apk onto device 'emulator-5554' [HelloActivity]Installing HelloActivity.apk... [HelloActivity]Success! [HelloActivity]Starting activity 53 Android入门到精通详解 com.example.android.helloactivity.HelloActivity on device [HelloActivity]ActivityManager: Starting: { cmp=com.example.android.helloactivity/.HelloActivity } Intent 图 运行 HelloActivity 程序 在运行的一个仿真设备的时候,可以进一步通过选择“Run As”中的“Run Configurations”进行进一步的配置。 启动后的界面如图所示: 54 Android入门到精通详解 图 选择工程中运行的动作 其中,在 Android 的标签中可以选择启动的工程,启动活动(Launch Action) 选项中可以选择启动的哪一个活动(Android 的一个工程中可以包含多个活动)。 在 Target 标签中可以选择启动的时候使用的设备。 55 Android入门到精通详解 第二篇 Android 应用程序的概述和框架 第 3 章 Android 应用层程序的开发方式   3.1 应用程序开发的结构 3.2 API 参考文档的使用 56 Android入门到精通详解 3.1 应用程序开发的结构 Android 应用程序开发是 Android 开发中最上面的一个层次,它们构建在 Android 系统提供的 API 之上。Android 应用程序的基础是 Android 提供的各个 Java 类,这些类组成了 Android 系统级的 API。 Android 系统API Android预置 应用程序 硬件抽象层 „„ 自开发 自开发 自开发 应用程序 应用程序 应用程序 Android框架层软件 硬件抽象层 Android手机 Android仿真器 图 Android 应用的开发结构 Android 应用程序可以基于两种环境来开发:Android SDK 和 Android 源代码。 Android 系统本身内置了一部分标准应用(也包括内容提供者),在仿真器(包 括 SDK 环境和源代码环境)中已经包含这些内置的程序。 用户自行开发的应用程序和 Android 内置的应用层程序包位于同一个层次, 都是基于 Android 框架层的 API 来构建的,它们的区别仅仅在于他们是否被包含 在默认的 Android 系统中。 57 Android入门到精通详解 3.2 API 参考文档的使用 在开发 Android 应用程序时可以参考 SDK 中提供的参考文档,其内容包含在 Reference 标签中。 参考文档分成两种索引方式:  Package Index(包索引);  Class Index(类索引)。 包索引根据字母顺序列出 Android 的各个包,每个包中包含若干个类、接口 等内容;类索引按照字母顺序列出了所有的类(也包括接口等内容)。在查找一 个类的帮助信息时,如果不知道其属于哪个包,则可以先根据类索引进行查找, 打开类的帮助后,可以反向得知它属于哪个包。 根据包索引,每一个包中包含的主要内容大致如下所示:  Interfaces(接口类);  Classes(类);  Enums(枚举值);  Exceptions(异常)。 每个包中包含的内容,基本上是 Java 语言中标准的内容。 Android 的参考文档中的类是 Android 系统 API 的主要组成部分,主要参考 的内容包括了以下的内容。 根据类索引,每一个类中包含的主要内容大致如下所示:  扩展和实现的内容;  按包名的继承(扩展)关系(可用于反向查找这个类所在的包);  Overview(概览);  XML Attributes(XML 属性);  Constants(常量);  Constructors(构造方法);  Methods(方法)。 在这些帮助内容中,大部分是 Java 语言的基本语法内容,只有 XML Attributes (XML 属性)一项是 Android 专用的。某些重要的类还包含对于类的详细介绍的 图表。 例如,Activity 类的帮助文档的前面的信息如下所示: public class 58 Android入门到精通详解 Activity extends ContextThemeWrapper implements ComponentCallbacks KeyEvent.Callback LayoutInflater.Factory View.On CreateContextMenuListener Window.Callback java.lang.Object ↳ android.content.Context ↳ android.content.ContextWrapper ↳ android.view.ContextThemeWrapper ↳ android.app.Activity Known Direct Subclasses ActivityGroup, AliasActivity, ExpandableListActivity, ListActivity Known Indirect Subclasses LauncherActivity, PreferenceActivity, TabActivity 从 Activity 类中可以看出,类的帮助文档主要包含以下一些内容:  public class:表示只是一个公开的类;  extends [……]:标明了这个类继承的父类(Java 不支持多继承,因此每 个类只有一个唯一的父类),后面的内容表示这个类从祖先开始继承的关 系。这里的类使用的是包含了其所在包名称的全名,因此在这里可以得 知类及其祖先类属于哪个包;  Implements [……]:标明了这个类实现的接口(可以有多个);  Known Direct Subclasses [……]:这个类的直接继承者;  Known Indirect Subclasses [……]:这个类的间接继承者。 从 中 , 可 以 看 出 Activity 类 在 android.app 包 中 , 直 接 继 承 了 android.view.ContextThemeWrapper,并且被 ActivityGroup, ListActivity 等几个类 直接继承。被 LauncherActivity 等几个类间接继承。 类的介绍的主要内容在后面,主要部分是各个类的方法的说明,这些方法也 是在类的使用过程中需要主要关注的内容。 Class Overview (类的介绍) Summary Constants (常量的列表) Inherited Constants (继承的常量的列表,按照继承类的顺序) Public Constructors (公共的构造函数) Public Methods (公共方法的列表) Protected Methods (保护方法的列表) Inherited Methods (继承方法的列表,按照继承类的顺序) 59 Android入门到精通详解 (详细的介绍) 类的帮助中一般只列出了自己的常量、方法、XML 属性等,对于继承得到 的内容(包括方法和常量),按照继承的顺序列出。由于 JAVA 类是单向继承, 因此在这个部分,首先是父类、然后是祖父类,以此类推。 某些与 UI 内容相关的类的帮助文档有一些特殊,主要区别是包含了 XML attributes ( XML 属 性 ) 一 类 。 XML Attributes ( XML 属 性 ) , 是 出 现 在 AndroidManifest.xml 或者布局文件中(*.xml)的属性。 例如 Button 类的参考文档的主要内容如下所示: public class Button extends TextView java.lang.Object ↳ android.view.View ↳ android.widget.TextView ↳ android.widget.Button Known Direct Subclasses CompoundButton CompoundButton A button with two states, checked and unchecked. Known Indirect Subclasses CheckBox, RadioButton, ToggleButton XML attributes See Button Attributes, TextView Attributes, View Attributes Summary Inherited XML Attributes From class android.widget.TextView From class android.view.View Inherited Constants Public Constructors Inherited Methods Button 类的头部信息和普通的类基本相同,但是包含了 XML attributes 一个 项目,在这里包含了 Button Attributes,TextView Attributes,View Attributes,根 据类的继承关系可以得知,这个启示是自己的属性、父类的属性(Button 类的父 类 是 android.widget.TextView ) 、 祖 父 类 的 属 性 ( Button 类 的 祖 父 类 是 android.view.View)。 Button 类刚好没有自己的 XML 属性,但是其父类和祖父类有,展开 Inherited XML Attributes 项 目 的 From class android.widget.TextView 和 From class 60 Android入门到精通详解 android.view.View 可以得到这些属性的列表。每个属性包含了 Attribute Name(属 性名称) Related Method(相关方法) Description(描述)几个项目。 例如,TextView 的几个属性如下所示: android:text setText(CharSequence) Text to display. android:textColor setTextColor(ColorStateList) Text color. android:text 等表示了属性在 XML 文件中的名称,setText()等表示了在 JAVA 源文件中使用的方法,最右侧的内容是这个属性的描述。 点击 XML attributes 中的连接可以进入其详细的内容中查看,这些 XML 属性 的帮助以及相关的值可以在 android.R.styleable 类中查找,这个类也可以直接被调 出,方法为: Package Index → android → android.R.styleable android.R.styleable 中列出了一些类的 XML 属性,例如 TextView 的 capitalize 属性的相关内容如下所示: public static final int TextView_capitalize If set, specifies that this TextView has a textual input method and should automatically capitalize what the user types. The default is "none". Must be one of the following constant values. Constant Value Description none 0 Don't automatically capitalize anything. sentences 1 Capitalize the first word of each sentence. words 2 Capitalize the first letter of every word. characters 3 Capitalize every character. This corresponds to the global attribute resource symbol capitalize. Constant Value: 44 (0x0000002c) 这里列出了属性的值(Value),这些值的本质是整数常量,但是在 XML 中 使用的还是名称。整数值是 Android 内部运作使用的。 XML 属性有些是在布局文件中使用的,也有在 AndroidManifest.xml 中使用 的,或者在其他的 XML 文件中使用。 这在 android.R.styleable 的帮助信息中,以 AndroidManifest 为开头的内容是 在 AndroidManifest.xml 中使用的属性。 例如,AndroidManifestAction 项目是 AndroidManifest.xml 中的 Action 标签中 使用的内容,如下所示: public static final int[] AndroidManifestAction 61 Android入门到精通详解 Attributes that can be supplied in an AndroidManifest.xml action tag, a child of the intent-filter tag. See addAction(String) for more information. Includes the following attributes: Attribute Summary android:name The name of an action that is handled, using the Java-style naming convention. See Also AndroidManifestAction_name Attribute Summary 中的 android:name 引用的内容是 AndroidManifest.xml 中 的 Action 标签可以使用的 android:name 属性。 相比各种类的帮助信息,接口(Interface)的帮助信息更加简单一些。一般 的接口是需要被实现才能够使用的。 例如,View.OnClickListener 的帮助信息前面的内容如下所示: public static interface View.OnClickListener android.view.View.OnClickListener Known Indirect Subclasses CharacterPickerDialog, KeyboardView 这里的,android.view.View.OnClickListener 表示了 View.OnClickListener 这个 接口在 android.view 这个包中。对于一个接口,Indirect Subclasses 的含义为实现 (implements)这个接口。 View.OnClickListener 的帮助信息后面的内容同样列出这个接口中包含的成 员方法,如下所示: Summary Public Methods abstract void onClick(View v) Called when a view has been clicked. 这些方法是要求接口的实现者来实现的,如果一个类实现了 View.OnClickListene 这个接口,其中就必须要有这个接口的 onClick()函数。 62 Android入门到精通详解 第 4 章 Android 应用程序示例   4.1 HelloActivity 程序的运行 4.2 HelloActivity 的源文件结构 4.3 HelloActivity 的编译结构 4.4 SkeletonApp 的程序的运行 4.5 SkeletonApp 源文件结构 4.6 SkeletonApp 编译结构 63 Android入门到精通详解 在软件开发的最初阶段,通常使用一个 Hello World 程序作为最简单的示例, 本部分介绍一个 Android 中最简单应用程序,通过这部分内容可以了解到 Android 程序的文件结构和编译后的结构。 4.1 HelloActivity 程序的运行 HelloActivity 是 一 个 简 单 的 Android 应 用 程 序 , 其 工 程 文 件 名 称 为 HelloActivity,在 Android 的源代码和 SDK 中,都包含了这个包。 HelloActivity 的图标和运行情况如图所示。 图 HelloActivity 的图标和运行情况 这个程序有一个简单的活动(Activity),用于启动一个新的界面,并在界面 上显示 “Hello,World!”字符串。 64 Android入门到精通详解 4.2 HelloActivity 的源文件结构 HelloActivity 工程的源文件的结构按照目录树的方式如下所示: HelloActivity/ |-- Android.mk |-- AndroidManifest.xml |-- res (工程管理文件) (工程描述文件) (资源文件) | |-- layout | | `-- hello_activity.xml (布局文件) | `-- values | `-- strings.xml |-- src (字串资源文件) (Java 源代码文件) `-- com `-- example `-- android `-- helloactivity `-- HelloActivity.java HelloActivity 工程中另有一个 tests 目录,其中也具有自己的 Android.mk 和 AndroidManifest.xml 文件,这是另一个工程,是 HelloActivity 工程的测试程序。 4.2.1.Android.mk 文件 Android.mk 文件是 Android 的工程管理文件,这个文件只在源代码开发的时 候使用,在 SDK 的开发中不需要使用,它包含在工程的根目录中,其内容如下 所示: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := samples # Only compile source java files in this apk. LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := HelloActivity 65 Android入门到精通详解 LOCAL_SDK_VERSION := current include $(BUILD_PACKAGE) # Use the following include to make our test apk. include $(call all-makefiles-under,$(LOCAL_PATH)) Android.mk 文件是 Android 编译过程中通用的工程管理文件,本地程序、 本地库和 Java 程序包都使用这个文件。这个文件仅仅在基于源代码开发的情况 中使用,在 Java 应用程序工程的管理中,该文件不用定义过多的内容,其中关键 的内容是使用 include $(BUILD_PACKAGE)表示从当前目录编译 Java 应用程序 包 。 LOCAL_PACKAGE_ NAME 定 义 的 是 这 个 程 序 的 APK 包 的 名 称 。 LOCAL_MODULE_TAGS 表示这个包的类型。 这个包的 LOCAL_MODULE_TAGS 定义成了 samples,这将编译 APK 包, 但是不安装在系统中。使用不同的值,可以决定是否编译和安装,例如使用 eng, 将安装到目标系统中。 最后一行的 include $(call all-makefiles-under,$(LOCAL_PATH)),表示包含 本目录的子目录中的 Android.mk 文件,本例中也就是 tests 目录中的内容。 4.2.2.AndroidManifest.xml 文件 AndroidManifest.xml 文件是这个 Android 应用程序的工程描述文件,包含了 宏观上的内容,如下所示: application(表示应用程序)标签中包含了一个 activity(表示活动)。活动是应 用程序中的一个组件,一个应用程序中也可以包含若干个组件。包名定义为 com.example. android.helloactivity , 表 示 将 从 src 目 录 的 66 Android入门到精通详解 com/example/android/helloactivity 中寻找程序中的 Java 源代码。活动名称将被定 义为 HelloActivity,表示活动的代码是上述源代码目录中的 HelloActivity.java 文 件 。 intent-filter 中 的 内 容 指 定 了 程 序 的 启 动 方 式 , 这 里 category 中 的 android.intent.category.LAUNCHER 表示活动将在 Android 的桌面(Android 默认 的桌面程序名称也是 LAUNCHER)上出现。 这里指定 application 的 android:label 为"Hello,Activity!",这和桌面图标下面 的文字以及活动启动后上面的标题文字是一致的。本例没有指定图标,所以桌面 上的图标使用的是默认图标。 在 AndroidManifest.xml 文件中为一个活动指定 label(标签)和 icon(图标) 的方法 如下所示: android:label 指定为字符串、android:icon 指定为图标后,将使用 res/drawable 中对应名称的图片文件作为图标(本例中将使用 icon_name.png)。 activity 和 application 都具有 android:label 和 android:icon 等属性,由于活动 是程序的单元,且应用可以包含多个活动,因此程序首先将使用 activity 中的这 些标签,如果没有则使用上一级的 application 中标签的定义 4.2.3.源代码文件 HelloActivity 工程只有一个源代码文件 HelloActivity.java,位于这个工程 src 目录下的 com/example/android/helloactivity 中,内容如下所示: package com.example.android.helloactivity; import android.app.Activity; // 定义包名 // 引入包含的包 import android.os.Bundle; public class HelloActivity extends Activity { public HelloActivity() { } @Override public void onCreate(Bundle savedInstanceState) { // 重载 onCreate()方法 布局文件 super.onCreate(savedInstanceState); setContentView(R.layout.hello_activity); // 使 用 hello_activity.xml 67 Android入门到精通详解 } } 这 里 的 类 HelloActivity 继 承 实 现 了 Android 系 统 API 提 供 的 活 动 类 (Activity),使用 setContentView(R.layout.hello_activity)指定了当前活动的布局, 这里表示将从 res/layout 目录中找到 hello_activity.xml 文件作为本例的布局文件使 用。 4.2.4.布局文件 hello_activity.xml 是本程序中的布局文件,在 Java 源文件中使用了此文件。 本文件在 res/layout 目录中,其内容如下所示: 在这个布局文件中,只定义了一个 UI 元素——EditText,就是在界面上出现 的占据全屏的可编辑文本框。在这里定义了这个可编辑文本框的初始化字符串为 "@string/hello_activity_text_text",这个值在另外的资源文件中被定义,本例就是 string.xml。 4.2.5.其他资源文件 string.xml 是本例中的一个资源文件,其内容如下所示: Hello, World! 这里定义了名称为“hello_activity_text_text”的字符串的内容为 Hello,World!, 这就是出现在屏幕上的字符串。 68 Android入门到精通详解 4.3 HelloActivity 的编译结构 在 Android 的 SDK 环境开发中,HelloActivity 工程经过编译后,SDK 环境下 开发生成的所有目标文件均在当前工程目录中,包含了 assets、bin、gen 等目录。 在 gen 目录中,包含了以类的层次关系为结构的资源文件。例如,gen/com/ example/android/helloactivity 目录中的 R.java 就是 HelloActivity 中的资源文件。 在 bin 目录中,目录结构按照类的关系组织,com/example/android/helloactivity 子目录包含了经过编译后的各个 Java 类,以.class 为后缀。 在 bin 目录中包含的 classes.dex 文件是编译后的,可以在 Dalvik 虚拟机上运 行的 Java 的字节码文件,生成的 HelloActivity.apk 文件是最终的 APK 文件,可 以在兼容的 Android API 的目标系统中安装,进而运行程序。 HelloActivity.apk 经过解压缩后,包含了下面的一些内容: HelloActivity.apk/ |-- AndroidManifest.xml (经过 aapt 处理的工程描述文件) |-- META-INF | |-- CERT.RSA | |-- CERT.SF | `-- MANIFEST.MF |-- classes.dex (Dalvik 的字节码) |-- res | `-- layout | `-- hello_activity.xml (经过 aapt 处理的布局文件) `-- resources.arsc 4.4 SkeletonApp 的程序的运行 SkeletonApp 是 Android 中一个应用程序的框架,这个程序比 HelloActivity 复杂一些,这个程序的运行结果如图所示: 69 Android入门到精通详解 图 SkeletonApp 程序的运行 这个程序包含了两个按钮和菜单,两个按钮分别用于清除编辑文本框中的内 容,菜单的功能和两个按钮时是相同的,点击菜单按钮将出现菜单,菜单是 Android 中的标准组件。 70 Android入门到精通详解 图 使用 SkeletonApp 程序中的按钮和菜单 4.5 SkeletonApp 的源文件结构 SkeletonApp 工程的源文件的结构按照目录树的方式如下所示: SkeletonApp/ |-- Android.mk |-- AndroidManifest.xml |-- res (工程管理文件) (工程描述文件) (资源文件) | |-- drawable | | `-- violet.jpg (图片文件) | |-- layout | | `-- skeleton_activity.xml (布局文件) | `-- values | |-- colors.xml | |-- strings.xml | `-- styles.xml |-- src (颜色资源文件) (字串资源文件) (样式资源文件) (Java 源代码文件) 71 Android入门到精通详解 `-- com `-- example `-- android `-- skeletonapp `-- SkeletonActivity.java 在 SkeletonApp 中,资源目录 res 中的 values 目录中除了 strings.xml 文 件,还包含了 colors.xml 和 styles.xml 文件,这两种文件也是 Android 中的标准资 源文件。 colors.xml 文件的内容如下所示: #f00 #80000000 styles.xml 文件的内容如下所示: 资源目录 res 还包含了 drawable 目录,表示可以绘制的内容,这里的 violet.jpg 是一个 jpeg 的文件。 在布局文件 skeleton_activity.xml 中的部分内容引用了以上的资源

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。