零、前言

欢迎来到即时安卓系统开发指南。这本书温和地介绍了安卓操作系统的内部。如果你曾经想知道安卓是如何在幕后工作的,那么这本书就是为你准备的。我经常想知道这个问题,我不得不花几个小时挖掘数千行代码来理解安卓到底是什么。这本书是我目前在这个平台工作三年多的经验总结,希望能缓解安卓系统开发的学习曲线。相反,读者可以专注于核心概念,并在短时间内开始构建有用的安卓修改。这本书将让你开始建立自己的安卓版本。这本书很全面,因为它涵盖了安卓系统开发的各个方面,从下载源代码,到在真实设备上闪烁定制代码。

这本书涵盖了什么

构建安卓让你能够快速下载并构建安卓源代码。对于许多有抱负的安卓系统开发人员来说,这是一个成人礼,这个食谱将帮助你完成这个旅程。

源代码组织与系统启动讲解,由于安卓代码库庞大,有效的开发包括对这段代码了如指掌。这些食谱的开头部分向读者介绍了源代码的各个部分。这些食谱的后面部分详细描述了安卓如何启动。

安卓系统开发中常见的设计模式涵盖了安卓系统代码的常见模式。了解这些模式对于开发高质量的代码至关重要。它还通过描述几个最佳实践来节省精力。

创建系统服务器菜谱指导你完成一个创建自定义系统服务器的完整示例,这是 Android 系统开发中最基本的设计模式之一。从创建一个基本的接口文件到将代码添加到现有的启动序列中,所有的内容都包括在内。

分析安卓系统分区说明安卓模拟器和几个真实设备上系统分区的组织。这些知识是学习如何安全地将新操作系统版本正确闪存到设备的先决条件。

针对特定设备进行编译明白大多数读者会希望在真实设备中测试自己的代码;然而,为特定的设备获得正确的构建需要一些实验和风险。该方法旨在通过指导读者通过明确的步骤来获得正确的构建,从而消除这种风险。

使用快速启动进行闪烁是将新的操作系统版本闪烁到设备的最常见和首选的方法。这个食谱指导读者在设备上安装定制代码的过程,而没有破坏它的风险。

创建类库的目标是希望发送定制内容的读者。一种常见的方法是使用类库作为系统服务器的前端。这个食谱用一个详细的例子描述了这个过程。它还涵盖了用新类库构建自定义 SDK 的过程。

针对一个新的 SDK 构建应用跳到上一个食谱的下一个逻辑问题,那就是:我如何在正常的开发工作流程中实际使用这些新类?这个食谱回答了如何用定制的软件开发工具包版本构建应用的问题。

平台库向读者介绍了另一种设计模式——平台库。这是谷歌推荐的一种技术,在不修改核心框架文件的情况下,在安卓基础中包含额外的代码,除非绝对需要。

系统服务器的本机代码描述了如何在基于 Java 的系统服务器中拥有本机组件。这是高级方法之一,解释了如何将本机代码添加到系统服务器。

分析 ActivityManagerService 深入研究了某些核心系统服务器如何在安卓系统上工作的机制。这对于任何想要修改核心框架文件的读者来说都是至关重要的。我们讨论了这个配方中最重要的系统服务器的几个重要方面,包括如何向活动管理器服务添加新方法。

向框架添加自定义权限是一个非常重要的食谱,它描述了如何正确保护阅读器添加的代码。它描述了安卓权限框架,并解释了如何扩展它以适应额外的权限。

分析 PackageManagerService 通过查看PackageManagerService类继续我们对核心服务的分析,该类是安装在设备上的所有代码和所有权限检查的核心。

修改系统应用解释说,因为安卓系统附带了许多标准的系统应用,所以你有时可能需要给这些应用添加额外的功能,而这个食谱恰恰告诉了读者这一点。

更快构建的技巧和诀窍为我们提供了一些关于如何加快安卓源代码构建的建议,否则会非常痛苦,因为它们往往会花费大量时间。

这本书你需要什么

您将需要安装一台带有任何 Ubuntu 风格(最好是 10.04、10.10 或 11.10)的现代 64 位计算机。更多的内存总是好的,但不低于 4 GB。要将代码闪存到设备上,您还需要一部谷歌的开发者手机。

这本书是给谁的

这本书主要面向希望开始使用安卓系统代码的系统开发人员。因此,假设对 Linux 系统代码有一定的了解。不过,安卓 SDK 开发者也可以使用它,他们希望了解安卓内部是如何工作的,以便编写更好的应用。最后,好奇的读者总是目标受众的一部分。

惯例

在这本书里,你会发现许多区分不同种类信息的文本风格。以下是这些风格的一些例子,以及对它们的含义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“在ANDROID_SRC/frameworks/base/cmds/system_server/library/system_init.cpp实现init1()方法。”

代码块设置如下:

package android.os.packt; 

interface IPacktCrypto 
{ 
  byte [] getMD5(String data); 
}

任何命令行输入或输出都编写如下:

make -jX where X = number of CPU cores + 2

新名词重要词语以粗体显示。你在屏幕上看到的单词,例如在菜单或对话框中,出现在文本中,如下所示:“按住音量增大,然后按住电源

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或可能不喜欢什么。读者反馈对我们开发您真正能从中获得最大收益的标题非常重要。

要给我们发送一般反馈,只需向<[feedback@packtpub.com](mailto:feedback@packtpub.com)>发送电子邮件,并通过您的消息主题提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参阅我们在www.packtpub.com/authors上的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户中下载您购买的所有 Packt 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表 提交 表格链接,并输入您的勘误表详情。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站上,或添加到该标题的勘误表部分下的任何现有勘误表列表中。通过从http://www.packtpub.com/support中选择您的标题,可以查看任何现有的勘误表。

盗版

互联网上版权材质的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决。