Android 开发入门与实战(第二版)
上QQ阅读APP看书,第一时间看更新

第3章 清点可用的资本——Android SDK介绍

学习目标:

了解Android组成和用途

熟悉文档包含的内容

熟悉一些常用和重要的工具

熟悉SDK附带的Demo及其实现技术

熟悉Android核心开发包和可选开发包

3.1 Android SDK概要

Android SDK(Software Development Kit)不仅提供API库,而且还提供在Windows/Linux/Mac平台下的开发工具,这些工具在编译、测试和调试阶段是必不可少的。

Android SDK主要基于Java语言,也就是说开发者可以通过编写Java代码来开发Android平台上的App,并借助于SDK提供的一些工具将其最终打包成apk文件,然后再使用SDK中的模拟器来进行测试和调试。

3.2 深入探索Android SDK的密秘

当读者按照本书第 2章中的指引搭建完开发环境之后,本地硬盘上会存在一个这样的目录:C:\DevInstall\android-sdk。那么该目录下到底包含哪些文件,以及这些文件的作用是什么,将在接下来的章节中进行阐述。

3.2.1 Android SDK的目录结构

首先来看下SDK的目录结构,这有助于从全局把握SDK,为后面的深入学习打下好的基础。下面展示的是Android SDK 4.1.2的目录结构,如图3-1所示。

下面将对各个目录进行逐一阐述。

(1)add-ons:保存一些附加库,例如Google Map API等。

(2)docs:最新版本SDK API的离线文档。

(3)extras:主要放置一些Support Library和USB Drivers等。

(4)platforms:该目录下以 SDK 版本为单位进一步细分,而且每个子目录都包含对应的 API包,其中data目录保存一些系统资源,skins则是Android模拟器的皮肤,templates是创建项目的默认模板,android.jar是完整的Android库。

(5)platform-tools:包含在开发和调试过程中依赖于平台的工具,该工具支持 Android 平台的最新特性,例如 aapt、adb、aidl和dx等。

(6)samples:SDK的示例代码。

(7)sources:SDK的源码。

(8)System Images:系统镜像——每个平台都需要一个或多个不同的系统镜像,例如ARM和x86,并且Android模拟器必须运行在系统镜像之上。

(9)tools:包含调试工具、测试工具和其他一些实用的工具,例如模拟器主程序emulator、调试工具ddms等。

▲图3-1 Android SDK目录结构

3.2.2 android.jar及其内部结构

android.jar是一个完整Android库的压缩包,其内包含的是编译后的class文件,我们在Windows环境下可以使用解压缩工具将其打开,可以看到其内部结构如图3-2和图3-3所示。

从图3-2和图3-3可以了解其API的包结构的划分,如app、content、database、graphics、hardware等,也就可以大致了解到其模块的结构和划分,有了这种印象,更有助于我们阅读和查找SDK的文档。

▲图3-2 android.jar目录结构

▲图3-3 android.jar内部class列表

3.2.3 SDK文档及阅读技巧

通过解压android.jar文件,大致了解到API的包结构,如果想深入了解各个包内所包含的API以及相应的用法,那我们必须学会阅读和查找 SDK 的文档。使用浏览器打开 docs 目录下的index.html文件,可以看到图3-4所示的界面。

▲图3-4 SDK文档首页

从图3-4中可以看到,其上部有一大堆的链接。读者可能要问,这么多的文档,应该怎么看呢?哪些是必须先弄明白的?哪些应该先知道大概的,今后引用的时候再仔细阅读的?如果没人指点的话,自己学习可能会陷入“文档风暴”中,需要花不少时间才能弄明白各自之间的依赖关系,所以掌握一些文档的阅读技巧会给自己的学习和研究省下不少时间,也能更清晰、有条理地掌握整个文档所要传递的知识和技术信息。现在简要地介绍一种阅读技巧,帮助读者少走弯路,找出学习的技巧。

(1)理解什么是Android。该部分位于在文档的“About Android”模块中,其中对Android有详细的阐述。

(2)了解Application的基本组件,位于:“API Guides/App Components”。

(3)大致浏览“Tools Help”,这部分告诉你常用到的一些工具集,有个大致印象就行,位于:“Tools/Tools Help”。

(4)环境搭建,位于:“Developer Tools/Download”。读者通过第2章的学习,应该对这部分内容相当熟悉。

(5)进入动手阶段,先按照“传统习惯”实现一个“Hello World”程序,并通过它明白项目的目录结构以及各个目录和文件所起到的作用。期间还得学会对项目的测试和调试,这部分位于:“Developer Tools/Workflow”。Hello World的演示放在下一章。

(6)参考Sample中的“NotePad”代码着手开始稍微复杂点的制作和学习,同时可以参考“API Guides”章节,其中包含如何实现 UI、数据存储和读取、安全问题、资源引用和国际化,每类下面都有相当详细的介绍。

(7)熟悉一下“Reference”的内容,其中按照包、索引、继承关系介绍 API 及其使用方法。同时列举比较典型的视图组件和权限类型,做到心里有数,在以后遇到问题的时候知道去哪里可以查到就行。

3.2.4 先来热身——Android SDK例子解析

在前面介绍Android SDK目录结构的时候,我们看到一个名为“sample”的目录,其下存放的是SDK附带的一些示例演示程序,它们从不同方面展示了SDK的特性,我们下面将逐一剖析这些Demo。在开始之前先介绍下如何将其导入到Eclipse中去。

3.2.4.1 如何将sample代码导入到Eclipse中

(1)开启Eclipse,在菜单栏依次选择“File->New->Other…”选项,弹出如图3-5所示的窗口。

(2)选择“Android”文件夹下的“Android Sample Project”选择卡,然后单击“Next”按钮,弹出图3-6所示的窗口。

▲图3-5 新建项目

▲图3-6 选择SDK版本

(3)勾选“Android 4.1.2”,然后单击“Next”按钮,弹出如图3-7所示的窗口。

▲图3-7 选择示例程序

(4)拉动滚动条选择示例程序,然后单击“Finish”按钮。这样sample代码就成功导入到Eclipse中了。

3.2.4.2 例子解析

1.视图组件应用(SkeletonApp)

该示例展示了在Android中如何使用其提供的视图组件,例如,EditText、Button、ImageView和Menu等,并演示如何操作这些组件,应用运行界面如图3-8所示。

学习Android已经提供的视图组件是必要的,本书第10章将介绍常见的视图组件及其使用方法。

2.API应用示例(API Demos)

该示例展示了很多API实例,包括app、content、graphic和media等,应用运行界面如图3-9所示。

▲图3-8 SkeletonApp运行界面

▲图3-9 API Demos运行界面

在其上可以按分类查看更加详细的内容,通过该示例将了解到其 API 功能非常强大,浏览并熟悉其中包括的所有API,等自己需要编写应用时,便于查找相关源代码。

3.登月游戏示例(Lunar Lander)

该示例展示了类似于登录月球的小游戏,通过方向键和点火时机控制画面上不断下坠的飞船,使它可以安全着陆,应用运行界面如图3-10所示。

从技术实现上分析,其演示了如何使用键盘快捷键,如何实现菜单,如何定制自己的视图组件,如何实现线程等技术点,具体实现方式可以参考其源代码。

4.记事本示例(Note Pad)

一个记事本应用程序,用此程序可以进行新建、编辑、删除等文档编辑操作,应用运行界面如图3-11所示。

▲图3-10 Lunar Lander运行界面

▲图3-11 Note Pad运行界面

5.贪吃蛇游戏示例(Snake)

该示例演示的是一个非常经典的贪吃蛇游戏,用方向键控制蛇的前进方向,吞并和其颜色一样的“食物”后可以成长,应用运行界面如图3-12所示。

从技术实现上分析,实现了自定义视图组件的实现和控制,实现了游戏类应用开发中相关技术。如果想开发游戏类应用,这无疑是最好的起点。

6.主题类示例(Home)

Home是一款主题类软件实现的示例,它实现一套新的主题界面,并将其注册到系统主题中,使得用户按下“Home”键,可以显示主题并选择使用,应用运行界面如图3-13所示。

▲图3-12 Snake运行界面

▲图3-13 Home运行界面

从技术现实上分析,该示例很详细地演示了如何开发主题类应用。通过该示例的学习,读者可以轻松掌握主题类应用开发步骤和一些注意事项。

7.软键盘(Soft Keyboard)

该示例介绍如何将软键盘绑定到输入框的输入事件上,当聚焦到输入框时,将自动弹出软键盘,如图3-14所示。

8.JetBoy

这是一款俱备声音支持的游戏示例,其模拟演示了如何在游戏中集成 SONiVOX 的audioINSIDE技术,这项技术是SONiVOX捐赠给开放手机联盟的,以使其可以更加出色地播放背景音乐和情景音乐。

该示例是一款发射子弹击碎飞来的障碍物的游戏,发射子弹、击碎障碍物等都有其背景音乐,体验非常棒,如图3-15所示。

▲图3-14 Soft Keyboard运行界面

▲图3-15 JetBoy运行界面

通过该示例的学习和体验,如果需要介入多媒体游戏效果开发,这无疑是非常好的入门范例。

本节逐一介绍和演示了 Android SDK 附带的几个实例,并从技术的角度分析其使用到的技术点,使得读者可以更有针对性地选择感兴趣的示例进行学习和研究,下面将继续介绍Android SDK中另外一个文件夹tools下包含的内容。

3.2.5 SDK提供的工具介绍

Android SDK包括各种各样的定制工具,可以帮助读者在Android平台上开发移动应用程序。其中最重要的工具是Android模拟器和Eclipse的Android开发工具插件,但SDK也包含了各种在模拟器上用于调试、打包和安装的工具,针对不同的使用场景,能带来很多便利,下面将逐一介绍这些工具及其使用方法。

1.Android模拟器(Android Emulator (emulator.exe))

一个运行在计算机上的虚拟移动模拟器,可以使用模拟器在一个实际的Android运行环境下设计、调试和测试用户的应用程序。

2.集成开发插件环境(Android Development Tools Plugin for the Eclipse IDE,ADT)

用于Eclipse集成开发环境的Android应用开发工具插件,它为Eclipse集成开发环境增加了强大的功能,使创建和调试Android应用程序变得更加简单和快速。如果使用Eclipse来开发Android应用,ADT插件将带来极大的帮助,具体作用如下。

· 可以从Eclipse集成开发环境内部访问别的Android开发工具。通过它可以进行包括截屏、管理端口转发(Port-Forwarding)、设置断点、查看线程和进程信息的一系列操作。

· 它提供一个新的项目向导,用于快速创建一个新的Android应用需要的所有基本文件。

· 它使构建Android应用的过程自动化和简单化。

· 它提供一个Android代码编辑器,用以为Android的manifest和资源文件编写有效的XML。

3.调试监视服务(Dalvik Debug Monitor Service (ddms.bat))

它集成在Dalvik(Android平台的虚拟机)中,用于管理运行在模拟器或设备上的进程,并协助进行调试。可以用它来去除进程、选择一个特定程序来调试、生成跟踪数据、查看堆和线程数据、对模拟器或设备进行屏幕快照等。

4.Android调试桥(Android Debug Bridge (adb.exe))

它用于向模拟器或手机设备安装应用程序的apk文件和从命令行访问模拟器或手机设备。也可以用于将标准的调试器连接到运行在Android模拟器或手机设备上的应用代码。

5.Andorid资源打包工具(Android Asset Packaging Tool (aapt.exe))

可以通过aapt工具来创建apk文件,这些文件包含Android应用程序的二进制文件和资源文件。

6.Android接口描述语言(Android Interface Description Language (aidl.exe))

它用来生产二进制间接口代码,例如在一个服务中可能就会用到。

7.SQLite3数据库(sqlite3 (sqlite3.exe))

Android应用程序可以用来创建和使用SQLite数据文件,而开发者和使用者也可以方便地访问这些SQLite数据文件。

8.跟踪显示工具(Traceview (traceview.bat))

它可以生成跟踪日志数据的图形分析视图,这些跟踪日志数据由Android应用程序产生。

9.创建SD卡工具(mksdcard (mksdcard.exe))

创建SD卡工具帮助创建磁盘镜像,这个磁盘镜像可以在模拟器上模拟外部存储卡(如SD卡)。

10.DX工具(dx (dx.bat))

DX工具将class字节码重写为Android字节码(存储在dex文件中)。

11.生成Ant构建文件(activityCreator (activitycreator.bat))

生成Ant构建文件是一个脚本,用于生成Ant构建文件。Ant构建文件用来编译Android应用程序。如果在安装了ADT插件的Eclipse环境下开发,就不需要这个脚本了。

12.Android虚拟设备(Android Virtual Devices AVD)

每个Android虚拟设备(AVD)模拟单一的虚拟设备来运行Android平台,这个平台至少要有自己的内核、系统图像和数据分区。开发者可以创建并保持多种虚拟器配置,每种配置环境有其自己的平台版本,硬件配置以及SD卡和用户数据,当然还可以有不同的显示外观等个性化设置,而你在运行的时候只需要指定需要使用哪个即可现实多平台下的模拟测试。

3.3 Android典型包分析

参考SDK文档可以看到,其中有按照包结构查看文档,通过这种方式可以很清晰地了解整个API结构,但是我们觉得还是有必要再对其核心包中的模块及第三方包加以说明,这样可以更方便地找到自己需要的东西。

3.3.1 开发基石——Android API核心开发包介绍

这些是基本包,它们是通过Android SDK来编写应用程序的基石。这里是从最底层到最高层列出并加以简要说明。

· android.util 包含一些底层辅助类,例如,特定的容器类、XML辅助工具类等。

· android.os 提供基本的操作服务、消息传递和进程间通信IPC。

· android.graphics 作为核心渲染包,提供图形渲染功能。

· android.text, android.text.method, android.text.style, android.text.util 提供一套丰富的文本处理工具,支持富文本、输入模式等。

· android.database 包含底层API处理数据库,方便操作数据库和数据。

· android.content 提供各种服务访问数据在手机设备上,程序安装到手机设备和其他的相关资源,以及内容提供展示动态数据。

· android.view,核心用户界面框架。

· android.widget 提供标准用户界面元素,list(列表),buttons(按钮),layout managers(布局管理器)等,是组成我们界面的基本元素。

· android.app 提供高层应用程序模型,实现使用Activity。

· android.provider 提供方便调用系统提供的content providers的接口。

· android.telephony 提供API交互和手机设备的通话接口。

· android.webikit 包含一系列工作在基于Web内容的API。

3.3.2 拓展开发外延——Android可选API介绍

除了上面介绍的核心API外,Android还有很多可选API。Google和Sun公司相同,把部分高端应用作为可选API供手机生产商定制不同的硬件支持模块。在JME中Sun公司是以JSR方式公布,Google采用了optional API,包含但不限于以下这些模块。

1.Location-Based Services 定位服务

Android操作系统支持GPS API-LBS,可以通过集成GPS芯片来接收卫星信号,通过GPS全球定位系统中至少 3 颗卫星和原子钟来获取当前手机的坐标数据,通过转换成为地图上的具体位置,这一误差在手机上可以缩小到10米。

同时,Google 推出一种基于基站式的定位技术——MyLocation,可以更快速地定位,与前者GPS定位需要花费大约1分钟相比,基站定位更快。

2.Media APIs 多媒体接口

Android平台上集成了很多影音解码器以及相关的多媒体API,通过这些可选API,厂商可以让手机支持MP3、MP4、高清晰视频播放处理等。

3.3D Graphics with OpenGL 3D图形处理OpenGL可选API

Android平台上的游戏娱乐功能,如支持3D游戏,或应用场景就需要用到3D技术,手机厂商根据手机的屏幕,以及定位集成不同等级的3D加速图形芯片来加强基于Android平台手机的娱乐性。

4.Low-Level Hardware Access 低级硬件访问

这个功能主要用于控制手机底层方面操作。由于设计底层硬件操作,将主要由各个手机硬件厂商来定制,支持不同设备的操作管理等,如蓝牙BlueTooth、Wi-Fi无线网络支持等。

3.4 本章小结

本章主要介绍了Android SDK的相关内容,包括其文档解读,示例解读,以及相关API介绍。通过本章的学习,可以比较清晰地把握Android SDK的全貌,熟悉其提供的相关示例,以及附带的工具使用。