第 1 章
Android
入门
Google 于 2005 年并购了成立仅 22 个月的高科技企业 Android,展开了短信、手机检索、定位等业 务,同时基于 Linux 的 Android 平台也进入了开发阶段。Google 在 2007 年 11 月 5 日发布了 Android 的 第一个版本。在刚发布之初,Android 并没有引起业界太多的关注。但随着 Google 组建的开放手机联盟 不断有新生力量加入,Android 这个初出茅庐的小子已成为与 iPhone 分庭抗礼的生力军。
在作者编写本书时,至少有数十家不同规模的手机厂商宣布加入 Android 阵营。基于 Android 的手 机也是琳琅满目。现在让我们进入时空隧道,回到 2008 年 9 月 23 日(北京时间 2008 年 9 月 23 日 22:30) 的美国纽约,Google 和运营商 T-Mobile 共同发布了世界上第一款安装 Android 系统的手机 T-Mobile G1。 由于这款手机的出色表现,使 Android 真正成为了万众瞩目的焦点。正是因为 Android 及其他几项创新, 在 17 个月后的 2010 年 2 月 25 日,美国著名商业杂志《Fast Company》评选的 2010 年全球最具创新力 公司 50 强中,Google 位列移动领域十大最具创新力公司榜首。2011 年 Android 的全球市场占有率首次 超过了 iPhone(iOS),成为了全球使用率最高、最爱欢迎的手机操作系统。 本章内容 Android 的系统构架 搭建 Android 开发环境
Android SDK 中的常用命令行工具(包括 adb、android 和 mkcdsard)
1.1 Android 的基本概念
Android 的中文意思是“机器人”。但在移动领域,大家一定会将 Android 与 Google 联系起来。 Android 本身就是一个操作系统,只是这个操作系统是基于 Linux 内核的。也就是说,从理论上,基 于 Linux 的软件移植到 Android 上是最容易的。Android 是由几十家科技公司和手机公司组成的“开放 手机联盟”共同研发的,而且完全免费开源,这将大大降低新型手机设备的研发成本,甚至已成为“山 寨”机的首选。
1 C h ap ter Android 作为 Google 最具创新的产品之一,正受到越来越多 开发者的追捧。目前 Android 阵营主要包括 ARM、软银移动、中国移动、小米、 的基础上不断创新,让用户体验到最优质的服务。下面欣赏几款具有代表性的 无疑问,就是世界上第一部 Android 键盘),可以通过侧滑拉出。第二款是创下了销售奇迹的 手机的显著特征是下方有一个突起的小“下巴”。除此之外, 手机中一道亮丽的风景。最后一款 子,如图 1-3 所示。Nexus S 是 手机更早升级到 Android 的新版本。 图 1-1 T-Mobile G1 最具创新的产品之一,正受到越来越多的手机厂商、软件厂商、运营商及个人 阵营主要包括 HTC(宏达电)、T-Mobile、高通、三星、 小米、华为等。虽然这些机构有着不同的性质,但它们都在 的基础上不断创新,让用户体验到最优质的服务。下面欣赏几款具有代表性的 Android Android 手机 T-Mobile G1,如图 1-1 所示。这款手机带有一个物理键盘(硬 拉出。第二款是创下了销售奇迹的 HTC Hero,也称为 G3,如图 手机的显著特征是下方有一个突起的小“下巴”。除此之外,HTC Hero 绚丽的 Sense 界面也成为 手机中一道亮丽的风景。最后一款则是带有 Google 字样的 Nexus S(由三星代工),俗称
是 Google 用来测试最新版 Android 的,因此,Nexus S 的新版本。 Mobile G1 图 1-2 HTC Hero 图 1-3 Nexus S 手机厂商、软件厂商、运营商及个人 、高通、三星、LG、摩托罗拉、 华为等。虽然这些机构有着不同的性质,但它们都在 Android 平台 Android 手机。第一款毫 所示。这款手机带有一个物理键盘(硬 如图 1-2 所示。这款 界面也成为 Android (由三星代工),俗称 Google 的二儿 Nexus S 总会比其他厂商的 HTC Hero
1 C h ap ter 欣赏完这么多“超酷”的手机,现在来看一下 Android 到底有什么魔力,可以让众多的粉丝为之疯 狂。据粗略统计,Android 至少有如下 8 件制胜法宝: 开放性。Android 平台是免费、开源的。而且 Google 通过与运营商、设备制造商、开发商等机 构形成的战略联盟,希望通过共同制定标准使 Android 成为一个开放式的生态系统。 应用程序的权限由开发人员决定。编写过 Symbian、Java ME 程序的读者应该能体会到这些程 序在发布时有多麻烦。如果访问到某些限制级的 API,不是出现各种各样的提示,就是根本无 法运行。要想取消这些限制,就得向第三方的认证机构购买签名,而且价格不菲。而 Android 平台的应用程序就幸福得多。要使用限制级的 API,只需要在自己的应用程序中配置一下即可, 完全是 DIY。这也在某种程度上降低了 Android 程序的开发成本。 我的平台我作主。Android 上的所有应用程序都是可替换和扩展的,即使是拨号、Home 这样 的核心组件也是一样。只要我们有足够的想象力,就可以缔造出一个独一无二、完全属于自己 的 Android 世界。 应用程序之间的无障碍沟通。应用程序之间的通信一直令人头痛,而在 Android 平台上无疑是 一种享受。在 Android 平台上,应用程序之间至少有 4 种沟通方式。很难说哪一种方式更好, 但它们的确托起了整个 Android 的应用程序框架。
拥抱 Web 的时代。如果想在 Android 应用程序中嵌入 HTML、JavaScript,那真是再容易不过 了。基于 Webkit 内核的 WebView 组件会完成一切。更值得一提的是,JavaScript 还可以和 Java 无缝地整合在一起。
物理键盘和虚拟键盘双管齐下。从 Android 1.5 开始,Android 同时支持物理键盘和虚拟键盘, 从而可大大丰富用户的输入选择。尤其是虚拟键盘,已成为 Android 手机中主要的输入方式。
个性的充分体现。21 世纪是崇尚个性的时代。Android 也紧随时代潮流,提供了众多体现个性 的功能。例如,Widget、Shortcut、Live WallPapers,无一不尽显手机的华丽与时尚。
舒适的开发环境。Android 的主流开发环境是 Eclipse + ADT+ Android SDK。它们可以非常容易 地集成到一起,而且在开发环境中运行程序要比 Symbian 这样的传统手机操作系统更快,调试 更方便。 虽然 Android 的特点还有很多,但这已经不重要。重要的是,现在 Android 已经成为万众瞩目的国 际巨星,其未来将令人充满期望。 1.1.2 Android 的系统构架 通过上一节的介绍,我们对 Android 的特点已经有了一个初步的了解。本节将介绍 Android 的系统 构架。先来看看 Android 的体系结构,如图 1-4 所示。 从图 1-4 可以看出,Android 分为 4 层,从高到低分别是应用层、应用框架层、系统运行库层和 Linux 内核层。 下面将对这 4 层进行简单介绍:
应用层。该层由运行在 Dalvik 虚拟机(为 Android 专门设计的基于寄存器的 Java 虚拟机,运 行 Java 程序的速度更快)上的应用程序(主要由 Java 语言编写)组成。例如,日历、地图、 浏览器、联系人管理,都属于应用层上的程序。
1 C h ap ter 应用框架层。该层主要由 Manager)等由开发人员直接调用的组件组成。 系统运行库层。Java 本身是不能直接访问硬件的。要想让 以。NDK 是一些由 C/C++ 语言标准库、多媒体库、 对应用框架层提供支持的层。 Linux 内核层。该层主要包括驱动、内存管理、进程管理、网络协议栈等组件。目前 的版本基于 Linux 3.4 内核。
1.2 Android 开发环境的搭建
工欲善其事,必先利其器。开发 找到合适的开发工具是学习 Android 习 Android 保驾护航。 1.2.1 开发 Android 程序需要些什么 开发 Android 程序至少需要如下工具和开发包 JDK(建议安装 JDK1.6 Eclipse Android SDK ADT(Android Development 其中 JDK 的安装非常简单,读者可以在官方网站下载 图 1-4 Android 的体系结构 应用框架层。该层主要由 View、通知管理器(Notification Manager)、活动 )等由开发人员直接调用的组件组成。 本身是不能直接访问硬件的。要想让 Java 访问硬件,必须使用 C/C++语言编写的库,这些程序也是该层的主要组成部分。该层主要包括 语言标准库、多媒体库、OpenGL ES、SQLite、Webkit、Dalvik 虚拟机等。也就是说,该层是 对应用框架层提供支持的层。 内核层。该层主要包括驱动、内存管理、进程管理、网络协议栈等组件。目前 内核。开发环境的搭建
欲善其事,必先利其器。开发 Android 应用程序总不能直接用记事本开发吧(那些超级大牛除外)。 Android 开发的第一步。而更多地了解 Android 的开发环境将会对进一步学 程序需要些什么 程序至少需要如下工具和开发包: JDK1.6 及其以上版本)Android Development Tools,开发 Android 程序的 Eclipse 插件)
的安装非常简单,读者可以在官方网站下载 JDK 的最新版,并按着提示进行安装。 应用层 应用框架层 系统运行库层 Linux 内核层 )、活动管理器(Activity 访问硬件,必须使用 NDK 才可 这些程序也是该层的主要组成部分。该层主要包括 C 虚拟机等。也就是说,该层是 内核层。该层主要包括驱动、内存管理、进程管理、网络协议栈等组件。目前 Android 应用程序总不能直接用记事本开发吧(那些超级大牛除外)。 的开发环境将会对进一步学 的最新版,并按着提示进行安装。Eclipse 应用框架层 系统运行库层 内核层
下载后直接解压即可运行。在 1. 1.2.2 安装 Android SDK 读者可以从下面的地址下载 http://developer.android.com/sdk/index.html#Other Android SDK 目前的安装程序支持 使用的平台对应的 Android SDK 那个不包含 SDK tools 的安装程序,应该下载第一个或第三个(需要解压)。下载 运行 dmg 文件即可。不管使用哪个版本, 镜像和相关文件都没有安装。所以要在后期安装。 现在找到 Android SDK 的安装目录,进到 版的程序是 android.exe)。然后执行这个程序,会弹出如图 (Windows 版类似,只是标题栏不同而已)。 在 Android SDK Manager 窗口中列出了所有可用的组件,这样可以测试各种 者网速足够快(需要连接 VPN 才可以下载),而且硬盘足够大(完全安装需要至少 话,建议全部选中,然后单击右下角的 量。不过要注意,这个安装时间相当漫长,要耐心等待。如果读者只想使用最新的版本,可以只安装 Android 5.1.1 或 Android M。最前面的 经安装成功,组件后面的 Not installed 单击 Install xx packages 按钮后,会弹出如图 1.2.2 节和 1.2.3 节将介绍 Android SDK 和 ADT 的安装。 读者可以从下面的地址下载 Android SDK 的最新版本: http://developer.android.com/sdk/index.html#Other 目前的安装程序支持 Windows、Mac OS X 和 Linux 三个平台,读者可以下载与自己 Android SDK 版本。下载 Windows 版本,直接解压或执行 exe 安装即可(不要下载
的安装程序,应该下载第一个或第三个(需要解压)。下载 Mac OS X 文件即可。不管使用哪个版本,Android SDK 都没有安装完整,只安装了必要的程序,模拟器 镜像和相关文件都没有安装。所以要在后期安装。 的安装目录,进到 tools 子目录,会找到一个 Android 可执行程 )。然后执行这个程序,会弹出如图 1-5 所示的 Android SDK Manager 版类似,只是标题栏不同而已)。 图 1-5 Android SDK Manager 窗口中列出了所有可用的组件,这样可以测试各种 Android 才可以下载),而且硬盘足够大(完全安装需要至少 20G 击右下角的 Install xx packages 按钮进行安装,其中 xx 是选中的 量。不过要注意,这个安装时间相当漫长,要耐心等待。如果读者只想使用最新的版本,可以只安装 。最前面的 Tools 建议安装最新的版本(目前是 24.1.2)。如果某一个组件已 Not installed 会变成 Installed。
按钮后,会弹出如图 1-6 所示的窗口。 1 C h ap ter 的安装。 三个平台,读者可以下载与自己 安装即可(不要下载 Mac OS X 版本,直接 都没有安装完整,只安装了必要的程序,模拟器 可执行程序(Windows Android SDK Manager 窗口 Android 版本。如果读 20G 的硬盘空间)的 是选中的 package 数 量。不过要注意,这个安装时间相当漫长,要耐心等待。如果读者只想使用最新的版本,可以只安装 )。如果某一个组件已
1 C h ap ter 该窗口左侧列出了所有选中的安装项,默认都是不可安装的(每一项前面都有个红叉),如果要选 中所有的安装项,可以选中根节点(对于本例是 选项按钮即可。全部授权安装的效果如图 现在如果 VPN 已经连接,单 窗口下方显示当前的下载进度。 图
图 1-6 Choose Packages to Install 窗口
有选中的安装项,默认都是不可安装的(每一项前面都有个红叉),如果要选 中所有的安装项,可以选中根节点(对于本例是 Android SDK License),然后单击右下角的
选项按钮即可。全部授权安装的效果如图 1-7 所示。
图 1-7 所有安装项全部授权安装
单击 Install 按钮安装即可。这时会在图 1-8 所示的 Android SDK Manager 窗口下方显示当前的下载进度。
图 1-8 正在下载 Android SDK 的相关文件
有选中的安装项,默认都是不可安装的(每一项前面都有个红叉),如果要选 击右下角的 Accept License
安装完后,读者可以进到<Android SDK 例如,图 1-9 所示的目录就是在我自己的机器上安装的所有 如果读者想了解 Android SDK 示的目录结构,这些目录在后面的相关章节会详细介绍。 1.2.3 安装 Eclipse 插件 ADT 在写作本书时,ADT 的最新版本是 菜单项,弹出如图 1-11 所示的窗口。 单击右上角的 Add 按钮,会弹出一个窗口。在 文本框中输入 https://dl-ssl.google.com/android/eclipse 所示的列表中显示 ADT 所包含的组件(需要连接 装即可。 安装完 ADT 后,还需要进行设置 单击 Window > Preferences 菜单项显示 好设置”菜单项,弹出 Preferences 页面。在该页面上方的 SDK Location 按钮,会列出当前安装的所有 Android <Android SDK 根目录>/platforms 目录看到所有已经安装的 所示的目录就是在我自己的机器上安装的所有 Android 版本。 图 1-9 已经安装的所有 Android 版本 Android SDK 根目录的结构,也可以退到 Android SDK 根目录,看到如图 示的目录结构,这些目录在后面的相关章节会详细介绍。 图 1-10 Android SDK 根目录结构
的最新版本是 23,读者可以在 Eclipse 中直接单击 Help>Install New Software... 所示的窗口。 按钮,会弹出一个窗口。在 Name 文本框中输入一个名字,如 ssl.google.com/android/eclipse。然后单击 OK 按钮关闭对话框。这时会在图 所包含的组件(需要连接 VPN 才能显示),然后单击 Next 按钮继续到下一步安 后,还需要进行设置,通常会设置 Android SDK 的路径。如果在 Windows 菜单项显示 Preferences 窗口。如果在 Mac OS X 下,需要单击 Preferences 窗口。选中左侧的 Android 节点,会看到右侧显示如图 SDK Location 文本框中输入 Android SDK 的根目录,然后单 Android 版本。设置完后,单击 OK 按钮即可。 1 C h ap ter 目录看到所有已经安装的 Android 版本。 根目录,看到如图 1-10 所
Help>Install New Software...
文本框中输入一个名字,如 ADT。在 Location 按钮关闭对话框。这时会在图 1-11 按钮继续到下一步安 Windows 平台,需要 下,需要单击 Eclipse→“偏 节点,会看到右侧显示如图 1-12 所示的 单击右下角的 Apply
1 C h ap ter 1.2.4 创建 AVD 在安装完 ADT 和 Android SDK 个 AVD(Android Virtual Devices
图 1-11 Install 窗口
图 1-12 Preferences 窗口
Android SDK 后,如果想在 Android 模拟器中运行 Android App
Android Virtual Devices)。AVD 就是通过软件模拟的 Android 运行环境,可以模拟内存、 Android App,需要至少建立一 运行环境,可以模拟内存、Android
版本、SD 卡、CPU 等 App 运行必须的要素。 要想建立 AVD,需要打开 AVD Manager 的两个图标。左侧的图标用于打开图 Manager。
如果 Eclipse 工具栏中没有这两个图标,可以在 项,打开如图 1-14 所示的窗口。切换到
SDK and AVD Manager 列表项,
现在打开 AVD Manager 窗口,会看到如图 如果要创建新的 AVD,需要 内容输入相关的信息。其中 AVD Name 名字冲突)。Device 主要确定了 本(本例选择了 Android5.1.1)。CPU/ABI Skin 可以不选,或选择其中一个皮肤。不同的皮肤决定 面都保持默认值即可。不过本例中指定了 运行必须的要素。
AVD Manager 窗口。在 Eclipse 工具栏左侧的位置会看到如图 标。左侧的图标用于打开图 1-5 所示的 Android SDK Manager,右侧的图标用于打开
图 1-13 与 ADT 有关的两个图标
工具栏中没有这两个图标,可以在 Eclipse 中单击 Window→Customize Perspective 所示的窗口。切换到 Command Groups Availability 选项卡,在左侧列表中选择
列表项,单击 OK 按钮关闭对话框即可。
图 1-14 Customize Perspective 窗口
窗口,会看到如图 1-15 所示的窗口。列表中是已经创建好的 ,需要单击 Create 按钮,弹出 AVD 创建窗口,读者可以按
AVD Name 可以是任意字符串,表示 AVD 的名字(不要和已经存在的 主要确定了 Android 模拟器的屏幕分辨率和屏幕密度。Target 用于确定 CPU/ABI 选择了 ARM(armeabi-v7a)。这是用软件模拟的 可以不选,或选择其中一个皮肤。不同的皮肤决定 Android 模拟器的样式,例如是否带控制键。后 面都保持默认值即可。不过本例中指定了 SD 卡的存储空间为 200MB。 1 C h ap ter 工具栏左侧的位置会看到如图 1-13 所示 右侧的图标用于打开 AVD Customize Perspective 菜单 ,在左侧列表中选择 Android 所示的窗口。列表中是已经创建好的 3 个 AVD。 创建窗口,读者可以按照图 1-16 所示的 的名字(不要和已经存在的 AVD 用于确定 Android 的版 )。这是用软件模拟的 ARM 处理器。 模拟器的样式,例如是否带控制键。后
1
C
h
ap
ter
图 1-16 Create new Android Virtual Device
设置完后,单击 OK 按钮,就会在图 1.2.5 启动 Android 模拟器 在编译和运行 Android 工程之前,最好先运行一个 版本选择一个 Android 模拟器启动。 要想启动 Android 模拟器,需要在图 如果没有设置皮肤,会弹出如图 图 1-15 AVD Manager
16 Create new Android Virtual Device(AVD)窗口
按钮,就会在图 1-15 所示窗口的列表中显示刚创建的 AVD
工程之前,最好先运行一个 Android 模拟器,否则系统会根据最接近的 模拟器启动。
模拟器,需要在图 1-15 所示的列表中选择一个 AVD,然后单击右侧的
如果没有设置皮肤,会弹出如图 1-17 所示的 Launch Options 对话框。不可设置 Scale display to real size AVD。
模拟器,否则系统会根据最接近的 Android
击右侧的 Start 按钮, Scale display to real size。
如果设置了皮肤,则弹出如图 1 不过大多数情况下,保存默认值即可。最后 图 1-17 Launch Options 窗口(未设置皮肤) 成功启动 Android 模拟器后(可能启动时间比较长,请耐心等待),会显示如图 模拟器。这是锁屏状态,要想解锁, Android Home 窗口。 图 1-19 Android 模拟器启动后的默认状态 1.2.6 让 Android 模拟器飞(X86 可能很多读者按着前面的方法启动
1-18 所示的 Launch Options 对话框,允许设置 Scale display to r 不过大多数情况下,保存默认值即可。最后单击 Launch 按钮即可启动 AVD 对应的 Android
窗口(未设置皮肤) 图 1-18 Launch Options 窗口(已经设置了皮肤) 模拟器后(可能启动时间比较长,请耐心等待),会显示如图 1 模拟器。这是锁屏状态,要想解锁,单击屏幕下方的小锁头图标向上滑动,即可进入如图 模拟器启动后的默认状态 图 1-20 进入 Android 后的 X86 加速) 可能很多读者按着前面的方法启动 Android 模拟器,不管自己的机器配置有多高, 1 C h ap ter
Scale display to real size。 Android 模拟器。 窗口(已经设置了皮肤) 1-19 所示的 Android 击屏幕下方的小锁头图标向上滑动,即可进入如图 1-20 所示的 后的 Home 窗口 模拟器,不管自己的机器配置有多高,Android 模拟器
1 C h ap ter 运行速度,可以通过 X86 加速器来加速 x86 加速器已经随 Android SDK Accelerated_Execution_Manager 目录( 中有很多文件。对于 Windows 来说,里面只有一个 行即可。Mac OS X 版本中可能会有两个 IntelHAXM_1.1.1_for_below_10_9 的 Mac OS X 系统。读者可以根据自己用的 不管使用哪个 众多,需要进一步确定 如果 CPU 不支持虚拟化 速的)。 成功安装 x86 加速器后,再 他设置项不变。再按前面介绍的方法启动 用的是硬件 CPU,而不是用软件模拟的 1.2.7 测试 Android 开发环境是否安装成功 本节将新建一个 Android 工程来测试一下 在弹出的对话框中按照图 1-21 所示输入相应的内容 就可以创建一个 Android 工程。 如果没有 Android Project 菜单项 节点,然后单击 Android Application Project
加速器来加速 Android 模拟器的运行。
Android SDK 一同发布了。现在进入<Android SDK 根目录>/extras/
目录(Windows、Mac OS X 和 Linux 的目录结构相同),会发现该目录 来说,里面只有一个 exe 文件(文件名通常以 IntelHAXM 版本中可能会有两个 dmg 文件:IntelHAXM_1.1.1_for_10_9_and_above IntelHAXM_1.1.1_for_below_10_9.dmg。其中前者用于 Mac OS X10.9 或以上版本,后者用于低于 系统。读者可以根据自己用的 Mac OS X 版本选择安装某个 dmg 程序。 不管使用哪个 OS 平台,CPU 必须支持虚拟化,尤其是 Windows 平台 需要进一步确定。通常 Apple 的机器都会支持 CPU 虚拟化,
不支持虚拟化,或用的非 Intel 的 CPU(如 AMD CPU,是无法使用
后,再重新创建一个 AVD,这回在 CPU/ABI 列表中选择 Intel Atom 前面介绍的方法启动 Android 模拟器,会发现变得非常快了。这是因为 ,而不是用软件模拟的 CPU,所以运行速度大大提升,甚至发现比很多真机还快。
是否安装成功
工程来测试一下 ADT 是否安装成功。单击 New→Android Project 所示输入相应的内容,然后一路点击 Next 按钮,最后
工程。
图 1-21 创建 Android 工程
菜单项,可以单击 New→Other 菜单项,在弹出对话框的树中寻找 Android Application Project 即可。
>/extras/intel/Hardware_ 的目录结构相同),会发现该目录 IntelHAXM 开头),直接执 IntelHAXM_1.1.1_for_10_9_and_above.dmg 和 或以上版本,后者用于低于 10.9 程序。 平台,CPU 的版本 ,这一点不用担心。 是无法使用 x86 加 Intel Atom(x86),其 模拟器,会发现变得非常快了。这是因为 x86 加速器使 ,所以运行速度大大提升,甚至发现比很多真机还快。 Android Project 菜单项, 按钮,最后单击 Finish 按钮, 菜单项,在弹出对话框的树中寻找 Android
创建完 Android 工程后,会在左侧的工程树中显示刚才创建的工程(本例工程名为 1-22 所示。
Android 工程的结构后面再说,这里只运行 单中单击 Run As → Android Application
在窗口上方的列表中列出了所有已经启动的模拟器和已经连接 Android 模拟器和连接了一部 Android 运行即可。如果想在未启动的 Android 钮。这样会首先启动选中的 Android 图 1-22 显示创建的工程 MyApp 成功运行的效果如图 工程后,会在左侧的工程树中显示刚才创建的工程(本例工程名为 工程的结构后面再说,这里只运行 Android 工程。现在选中 Android 工程,然后在右键菜 Android Application 菜单项,会弹出如图 1-23 所示的 Android Device Manager 在窗口上方的列表中列出了所有已经启动的模拟器和已经连接 PC 的 Android 设备(本例启动了一个
Android 设备),读者可以从中选中一个设备,然后单击右下角的 Android 模拟器上运行,可以从窗口下方的列表中选择,然后 Android 模拟器,然后再运行 Android App。
显示创建的工程 图 1-23 Android Device Chooser
图 1-24 所示,说明 Android 开发环境已经安装成功。 图 1-24 MyApp 的运行效果 1 C h ap ter 工程后,会在左侧的工程树中显示刚才创建的工程(本例工程名为 MyApp),如图 工程,然后在右键菜 Android Device Manager 窗口。
设备(本例启动了一个 击右下角的 OK 按钮 模拟器上运行,可以从窗口下方的列表中选择,然后单击 OK 按
ndroid Device Chooser 窗口
1 C h ap ter
1.3 Android SDK 中
在<Android SDK 安装目录 握这些工具的使用方法,但了解这些工具的一些基本使用方法还是会对以后的开发工作起到一定的辅助 作用。本节将介绍几种常用命令行工具的使用方法,这些工具主要包括 用这些命令行工具之前,建议读者将 在任何目录中都可以使用这些工具了。 1.3.1 启动和关闭 ADB 服务(adb start经过测试,模拟器在运行一段时间后, 务用来为模拟器或通过 USB 数据线连接的真机服务)出现异常。这时需要重新对 当然,重启 Eclipse 可能会解决问题,但那比较麻 adb kill-server 在关闭 adb 服务后,要使用如下命令启动 adb start-server 1.3.2 查询当前模拟器/设备的实例 有时需要启动多个模拟器实例, 就需要使用如下命令查询当前有多少模拟器或真机在线 adb devices 执行上面的命令后,会输出如图 其中第 1 列的信息,04b989588291a08f 据线连接的真机,emulator-5554 第 2 列信息都是 device,表示当前设备都在线。如果该 列的值是 offline,表示该实例没有连接到 响应,也就是离线。 1.3.3 安装、卸载和运行程序( 在 Eclipse 中运行 Android 程序必须得有 的发行包,相当于 Windows 中的 装一个 ebook.apk 文件,可以使用如下命令
adb install ebook.apk
假设 ebook.apk 中的 package
adb uninstall net.blogjava.mobile.ebook
关于 package 的概念在以后的学习中会逐渐体会到
唯一标识即可。如果在安装程序之前,该程序已经在模拟器或真机上存在了,需要先使用上面的命令卸 载这个应用程序,然后再安装。或使用下面的命令重新安装
adb install -r ebook.apk
中的常用命令行工具
安装目录>/tools 目录中有很多命令行工具。虽然一般的开发人员并不需要完全掌 但了解这些工具的一些基本使用方法还是会对以后的开发工作起到一定的辅助 作用。本节将介绍几种常用命令行工具的使用方法,这些工具主要包括 adb、android
用这些命令行工具之前,建议读者将<Android SDK 安装目录>/tools 目录加到 PATH 都可以使用这些工具了。
adb start-server 和 adb kill-server)
经过测试,模拟器在运行一段时间后,adb 服务有可能(在 Windows 进程中可以找到这个服务,该服 数据线连接的真机服务)出现异常。这时需要重新对 adb 可能会解决问题,但那比较麻烦。如果想手工关闭 adb 服务,可以使用如下命令: 服务后,要使用如下命令启动 adb 服务: 设备的实例(adb devices) 有时需要启动多个模拟器实例,或在启动模拟器的同时通过 USB 数据线连接真机。在这种情况下 就需要使用如下命令查询当前有多少模拟器或真机在线: 执行上面的命令后,会输出如图 1-25 所示的信息。 04b989588291a08f 表示通过 USB 数 5554 表示 Android 模拟器。 ,表示当前设备都在线。如果该 ,表示该实例没有连接到 adb 上或实例没有
(adb install、adb uninstall 和 am)
程序必须得有 Android 源码工程。如果只有 apk 文件( 中的 exe 文件),该如何安装和运行呢?答案就是使用 adb 文件,可以使用如下命令:
package 是 net.blogjava.mobile.ebook,可以使用如下命令卸载这个应用程序
adb uninstall net.blogjava.mobile.ebook
的概念在以后的学习中会逐渐体会到,现在只要知道 package 是 Android 唯一标识即可。如果在安装程序之前,该程序已经在模拟器或真机上存在了,需要先使用上面的命令卸 载这个应用程序,然后再安装。或使用下面的命令重新安装: 图 1-25 查询模拟器 很多命令行工具。虽然一般的开发人员并不需要完全掌 但了解这些工具的一些基本使用方法还是会对以后的开发工作起到一定的辅助 android 和 mksdcard。在使 PATH 环境变量中,这样 进程中可以找到这个服务,该服 adb 服务关闭和重启。 服务,可以使用如下命令: 数据线连接真机。在这种情况下 文件(Android 应用程序 adb 命令。假设要安 ,可以使用如下命令卸载这个应用程序: Android 应用程序的 唯一标识即可。如果在安装程序之前,该程序已经在模拟器或真机上存在了,需要先使用上面的命令卸 查询模拟器/设备的实例
1 C h ap ter 在卸载应用程序时可以加上-k 命令行参数保留数据和缓冲目录,只卸载应用程序。命令如下所示:
adb uninstall -k net.blogjava.mobile.ebook
如果机器上有多个模拟器或真机实例,需要使用-s 命令行参数指定具体的模拟器或真机。例如,下 面的命令分别在模拟器和真机上安装、重新安装和卸载应用程序。
在 emulator-5554 模拟器上安装 ebook.apk:
adb -s emulator-5554 install ebook.apk
在真机上安装 ebook.apk:
adb -s 04b989588291a08f install ebook.apk
在 emulator-5554 模拟器上重新安装 ebook.apk:
adb -s emulator-5554 install -r ebook.apk
在真机上重新安装 ebook.apk:
adb -s 04b989588291a08finstall -r ebook.apk
在 emulator-5554 模拟器上卸载 ebook.apk(不保留数据和缓冲目录):
adb -s emulator-5554 uninstall net.blogjava.mobile.ebook
在真机上卸载 ebook.apk(保留数据和缓冲目录):
adb -s 04b989588291a08funinstall -k net.blogjava.mobile.ebook
如果想在模拟器或真机上运行已安装的应用程序,除了直接在模拟器或真机上操作外,还可以使用 如下命令直接运行程序。
在 emulator-5554 模拟器上运行 ebook.apk:
adb -s emulator-5554 shell am start -n net.blogjava.mobile.ebook/net.blogjava.mobile.ebook.Main
在真机上运行 ebook.apk:
adb -s 04b989588291a08fshell am start -n net.blogjava.mobile.ebook/net.blogjava.mobile.ebook.Main
其中 Main 是 ebook.apk 的主 Activity,相当于 Windows 应用程序的主窗体或 Web 应用程序的主页 面。am 是 shell 命令。关于 shell 命令将在 1.3.5 节详细介绍。
1.3.4 PC 与模拟器或真机交换文件(adb pull 和 adb push)
在开发阶段或其他原因,经常需要将 PC 上的文件复制到模拟器或真机上,或将模拟机和真机上的 文件复制到 PC 上。使用 adb pull 和 adb push 命令可以很容易地完成这个工作。例如,下面的命令将真 机的 SD 卡根目录下的 camera.jpg 文件复制到 PC 的当前目录,取名为 picture.jpg。又把 picture.jpg 文件 复制到真机的 SD 卡的根目录,取名为 abc.jpg。
从真机上复制文件到 PC:
adb -s 04b989588291a08fpull /sdcard/camera.jpg picture.jpg
从 PC 复制文件到真机:
adb -s 04b989588291a08fpush picture.jpg /sdcard/abc.jpg
如果读者安装了 ADT,可以通过 DDMS 透视图的“File Explorer”视图右上方的几个按钮,方便地 从模拟器或真机上导入、导出和删除文件。
1.3.5 Shell 命令
Android 是基于 Linux 内核的操作系统,因此,在 Android 上可以执行 Shell 命令。虽然在手机上提 供了可以输入命令的 Shell 程序,但在手机上输入程序实在不方便。为了更方便地在模拟器或手机上执 行 Shell 命令,可以使用如下命令在 PC 上进入 Shell 控制台:
1 C h ap ter 是一个井号(#),表示使用 root 用户登录 命令,再输入 ls 命令,可以看到当前 际情况使用相应的命令。 1.3.6 创建、删除和浏览 AVD 设备 在 1.2.4 节介绍了如何在 Eclipse 和删除 AVD 设备。建立 AVD 设备的命令如下:
android create avd -n myandroid1.6 -t 2
其中 myandroid1.6 表示 AVD 2 中的 2 指建立 Android 1.6 的 AVD 输出如下信息来询问是否继续定制
Auto-selecting single ABI armeabi Android 1.6 is a basic Android platform.
Do you wish to create a custom hardware profile [no]
如果读者不想继续定制 AVD
Enter 键。系统会按步提示该如何设置。中括号内是默认值,如果某个设置项需要保留默认值,直接按 Enter 键即可。如果读者使用的是
C:\Documents and Settings\Administrator
如果想改变 AVD 设备文件的默认存储路径,可以使用
android create avd -n myandroid1.6 -t 2
删除 AVD 设备可以使用如下命令
android delete avd -n myandroid1.6
通过下面的命令可以列出所有的
android list avds
用户登录 Shell,也就是拥有了 root 权限。进入 Shell 后,输入
命令,可以看到当前 Android 系统支持的命令文件,如图 1-26 所示。读者可以根据实 图 1-26 Android Shell 控制台 设备(android) Eclipse 中建立一个 AVD 设备。本节将介绍如何直接使用 设备的命令如下: t 2 AVD 设备的名称,该名称可以任意设置,但不能和其他
AVD 设备,1 表示 Android 1.5 的 AVD 设备,在执行完上面的命令后,会 输出如下信息来询问是否继续定制 AVD 设备:
Android 1.6 is a basic Android platform.
eate a custom hardware profile [no]
AVD 设备,直接按 Enter 键即可。如果想定制 AVD 设备,输入
。系统会按步提示该如何设置。中括号内是默认值,如果某个设置项需要保留默认值,直接按 即可。如果读者使用的是 Windows XP,默认情况下 AVD 设备文件放在如下目录 Administrator\.android\avd 设备文件的默认存储路径,可以使用-p 命令行参数,命令如下: t 2 -p d:\my\avd 设备可以使用如下命令: 通过下面的命令可以列出所有的 AVD 设备: 后,输入 cd system/bin 所示。读者可以根据实 直接使用 android 命令建立 设备的名称,该名称可以任意设置,但不能和其他 AVD 设备冲突。-t 在执行完上面的命令后,会 设备,输入 y,然后按 。系统会按步提示该如何设置。中括号内是默认值,如果某个设置项需要保留默认值,直接按 设备文件放在如下目录中: 命令行参数,命令如下:
1.3.7 获取 Android 版本对应的 上一节使用了 android create avd 版本对应的 ID。可以使用下面的命令获取
android list targets
执行上面的命令行,会输出如图 字符串(如 android-2、android-4
1.3.8 创建 SD 卡
在模拟器上测试程序经常需要使用 文件,创建一个 10MB 大小的 SD
mksdcard -l sdcard 10MBsd.img
其中 sdcard 表示 SD 卡的卷标, 小不能小于 8MB,否则无法创建 或直接启动模拟器(使用 emulator
1.4 Android 的学习资源
获得第一手的资源是学习 Android 有最新的开发指南、API、SDK http://developer.android.com 除此之外,通过 Google 搜索也可以找到大量关于 关注的 Android 学习网站。 EOE Android 开发论坛, 安卓网,http://www.hiapk.com 机锋网,http://www.androidin.net 中国移动的开发者社区, 版本对应的 IDandroid create avd 命令创建了 AVD 设备,其中-t 命令行参数需要指定一个与 。可以使用下面的命令获取 Android SDK 中已安装的所有 Android 版本对应的 执行上面的命令行,会输出如图 1-27 所示的信息。前面提到的-t 命令行参数可以指定 4 等)。 图 1-27 显示与 Android 对应的 ID 在模拟器上测试程序经常需要使用 SD 卡。在 PC 上需要使用 mksdcard 命令创建一个虚拟的 SD 卡文件的命令如下: 卡的卷标,10M 表示 SD 卡的大小,单位还可以是 KB。但要注意 ,否则无法创建 SD 卡文件。sd.img 是 SD 卡的文件名。如果要在 Eclipse emulator 命令),需要使用-sdcard 命令行参数指定 SD 卡文件的绝对路径。
的学习资源
Android 的关键。通过如下地址可以访问 Android 的官方页面,在该页面 SDK 和其他资源。 搜索也可以找到大量关于 Android 的学习资源,下面推荐几个国内比较受 开发论坛,http://www.eoeandroid.com。 http://www.hiapk.com。 http://www.androidin.net。 中国移动的开发者社区,http://dev.chinamobile.com。 1 C h ap ter 命令行参数需要指定一个与 Android 版本对应的 ID: 命令行参数可以指定 ID 或相应的 命令创建一个虚拟的 SD 卡 。但要注意,SD 卡的大 Eclipse 中启动模拟器, 卡文件的绝对路径。 的官方页面,在该页面 的学习资源,下面推荐几个国内比较受1 C h ap ter 通过源代码学习将会获得更佳的效果。
1.5 Google Play
写程序不是目的,写完程序我们能从中得到什么才是最终目的。当然,最直接得到的就是经验。可 除此之外呢?相信大多数开发人员都希望从自己的程序中获利。当然,最好 本书的读者是这么想的,本节介绍的 Google Play 是用于发布 Androidhttps://play.google.com/store 在 Android 手机上可以通过 中有免费和收费两类程序)。客户端的主界面如图 图 1-28 Android Market 客户端的主界面
1.6 小结
本章主要介绍 Android 开发环境的搭建。开 和 ADT。在<Android SDK 安装目录 和 Eclipse 来完成开发工作。虽然作者并不建议这样做,但学习一些常用命令的使用方法会对开发工作 起到一定的辅助作用。做完程序后,需要将其发布到访问量较大的网站 付费下载。 通过源代码学习将会获得更佳的效果。 写程序不是目的,写完程序我们能从中得到什么才是最终目的。当然,最直接得到的就是经验。可 除此之外呢?相信大多数开发人员都希望从自己的程序中获利。当然,最好是名利双收。如果正在阅读 本书的读者是这么想的,本节介绍的 Google Play 也许正好适合这些读者的口味。Android App 的在线商店。该在线商店由 Google 创办,地址如下: 手机上可以通过 Android Market 客户端浏览和下载商店中的应用程序(在 中有免费和收费两类程序)。客户端的主界面如图 1-28 所示,浏览和下载游戏程序的界面如图 客户端的主界面 图 1-29 浏览和下载休闲游戏程序的界面 开发环境的搭建。开发 Android 程序至少需要安装 JDK、Eclipse 安装目录>/tools 目录中有一些命令行工具,可以通过这些工具完全脱离 来完成开发工作。虽然作者并不建议这样做,但学习一些常用命令的使用方法会对开发工作 起到一定的辅助作用。做完程序后,需要将其发布到访问量较大的网站(如 Google Play 写程序不是目的,写完程序我们能从中得到什么才是最终目的。当然,最直接得到的就是经验。可 名利双收。如果正在阅读 创办,地址如下: 客户端浏览和下载商店中的应用程序(在 Android Market 浏览和下载游戏程序的界面如图 1-29 所示。 休闲游戏程序的界面 Eclipse、Android SDK 可以通过这些工具完全脱离 ADT 来完成开发工作。虽然作者并不建议这样做,但学习一些常用命令的使用方法会对开发工作 Google Play)供用户免费或