一、开始之前

2011 年末,随着我对 Android 开发越来越感兴趣,我试图寻找一本书,希望它能让我的开发更上一层楼。我已经完成了几个应用,并想知道其他人在做什么,我可能已经错过了。当然,谷歌有大量的 Android 文档,但是 Android 文档有一些奇怪的建议;他们建议使用 jUnit3 进行我的单元测试,这感觉像是在倒退。我已经知道了现有的用于 Android 的 jUnit4 测试框架,比如 Roboelectric,所以可能还有其他一些我错过的、我根本不知道的很酷的东西,它们真的可以帮助我写出更好的代码。

这本书试图将开发者为 Android 平台创建的最佳实践的研究汇集在一起,希望你能在一个地方找到你需要的所有信息。

一旦你编写了一个应用,或者成为了 Android 开发团队的一员,你很快就会明白,如果你不考虑如何组织起来,Android 开发就像任何其他语言或环境一样,会变得混乱和低效。这本书将帮助你采取这些步骤,成为一个运转良好、富有成效的团队。

如果你想做以下一件或多件事,你可以考虑阅读这本书:

  • 通过查看最佳实践示例代码,更好地进行 Android 开发。
  • 编写更容易扩展和维护的应用。
  • 编写更安全的应用。
  • 学习如何不仅编写应用的客户端,还编写经常被忽略的服务器端。

Android 简介

Android 是基于 Linux 的智能手机开源操作系统。该公司成立于 2003 年 10 月,2005 年 8 月被谷歌收购。2008 年 10 月发布的 HTC Dream 是第一款运行 Android 的手机。

从开发者的角度来看,Android 应用通常是用 Java 编写的。Google 提供了一个 Android SDK,它提供了必要的库和应用来将 Java 代码转换成可以在 Android 手机上运行的格式。大多数人使用 Eclipse 或命令行来创建 Android 应用。Android Studio 最近作为 Eclipse 的替代产品出现,并有可能在未来一两年内成为首选的 IDE。

Android 是移动设备的首要操作系统,全球超过 75%的设备和 52%的美国市场都在运行它。

在我个人的经历中,曾经有一段时间 Android 开发是红发的继子。所有的开发首先在 iOS 上完成,然后在应用成功后在 Android 上开发。现在安卓手机有了这么大的市场份额,这种情况已经改变了。

谁应该读这本书?

这本书旨在让那些对 Android 有任何熟悉程度的开发人员都能接触到。然而,你的经验程度将决定你认为哪些部分最有用。如果你对 Android 开发完全陌生,或者只是在这里或那里修修补补,这本书应该可以帮助你为未来的 Android 工作培养良好的习惯和实践。如果你发现自己用 Android 做的工作越来越多,那就更是如此。测试、性能分析等等的方法和工具对于培养生产习惯和避免一些经典的陷阱和良好开发的反模式来说是非常好的。如果你最终没有说“我以后再写测试”,那么这本书很适合你。

对于中级或高级 Android 开发人员来说,这本书将带你了解 Android 工具链的当前技术状态的细节;您将看到如何最好地重构和改进现有的代码和应用,它将推动您拥抱一些您可能推迟到现在的高级主题。如果你从未考虑过基于 NDK 的开发,你将在第一时间学会如何正确地做。如果你从来没有必要的资金来做多平台、多手机测试和建模,你可以冒险一试,看看你一直以来都错过了什么。

开始前你需要什么

为了最大限度地利用这本书,预先整理一些日常事务将会消除以后的干扰,并且它将让你直接实现你将在每章中学到的工具和技术。

一个真正的 Android 应用

如果你已经编写了一两个 Android 应用,那么从这本书中获得最佳回报会有所帮助。他们甚至不需要一路走到 Google Play 但理想情况下,如果你经历了这个过程,有真实世界的用户对你的 Android 应用进行了测试,并且你根据他们的反馈或评论进行了修改,这将会有所帮助。

工作开发环境

你需要在你选择的 IDE 上安装 Android SDK:要么用 ADT 工具集安装 EclipseAndroid 开发者工作室;或者对于更喜欢冒险的人来说,像英特尔的 Beacon Mountain 这样的奇特的第三方开发环境。你需要一个实际的设备来跟随我们的一些例子,但是模拟器可以完成书中的大部分代码。

所有的花里胡哨

除了现有的 Android Developer Studio、带 ADT 的 Eclipse 或其他 IDE 之外,您还应该确保拥有 Android SDK 可用的可选库。这些工具包括 SDK 构建工具、与您的 SDK 发布级别相关的 Google APIs、Android 支持库以及适用于您的操作系统的 Web 驱动程序和 USB 驱动程序。

随着每一章的展开,还将向您介绍用于单元测试、手机多样性测试、性能分析等的特定附加工具。我们将在相关章节中逐一讨论这些工具。

示例应用的源代码

我们在每一章中使用的 Android 应用是一个简单的待办事项列表和任务提醒应用。你应该从www.apress.com/9781430258575/下载代码,这样你就可以跟着做了。我们将使用待办事项应用来展示 Android 的最佳实践,在每一章中引导您了解设计模式、性能问题、安全问题等等。

这本书里有什么

这是你在本书过程中可以期待的逐章总结:

  • 第 2 章:我们从第 2 章的模式开始。你可能已经对 Android 的用户界面(UI) 模式有些熟悉,这有助于在多种设备上创建一致的用户体验(UX) 。您还将了解如何使用 ActionBarSherlock 和 NineOldAndroids 等其他库来帮助您的老设备用户获得更及时的 Android 体验。
  • 第 3 章:继 UI 和 UX 模式之后,第 3 章着眼于实现 MVC 和 MVVM 开发人员设计模式,作为标准 Android 设计的替代方案,然后我们深入研究 Android 注释,以及它如何帮助您创建干净易懂的 Android 代码。
  • 第四章: 第四章详细介绍了测试驱动开发(TDD)、行为驱动设计(BDD)和持续集成(CI)的基本敏捷元素,您可以在开发过程中使用它们。我们着眼于 Android SDK 中可用的单元测试,着眼于 Roboelectric、Calabash 和 Jenkins 等工具的好处,以及如何使用它们来创建更高效的敏捷开发环境。
  • 第 5 章: Android 允许你使用 Android NDK 直接合并 C++ 代码,但由于 Java 和 C++ 之间的上下文切换,性能会受到显著影响。然而,有时在 Android 中使用新的或现有的 C++ 代码更有意义,而不必将其移植到 Java。第 5 章探讨了 C++ 是正确答案的原因,以及在 Android 上使用 c++ 的最佳方式。
  • 第 6 章: 第 6 章是对几个行业标准的十大安全列表的最新审视,这些列表让你对 Android 安全的注意事项有了更好的了解。这一章的结尾是一个新的列表,它结合了谷歌和 OWASP 的十大列表中的最佳元素。
  • 第七章:设备测试可能是 Android 开发的克星。无论你想创建自己的测试平台还是使用众多在线服务中的一个第 8 章着眼于驯服设备碎片的实用方法。
  • 第八章:对于商业世界中的大多数 Android 应用,应用的 Android 部分充当后端服务器的客户端。信息通常但不总是通过 REST API 以 JSON 的形式发送。第 8 章深入探讨了如何与 REST 和 SOAP APIs 对话。您将学习如何创建 REST API ,以及为什么 Richardson 成熟度模型对您的 API 的寿命很重要。您还将使用 Google App Engine 创建自己的 web 服务。