英特尔平台上的安卓应用开发教程(一)

原文:Android Application Development for the Intel Platform

协议:CC BY-NC-SA 4.0

一、面向英特尔架构的嵌入式应用开发概述

嵌入式系统是计算机技术的一个新兴领域,它结合了多种技术,如计算机、半导体、微电子和互联网,因此在我们的现代世界中得到越来越多的应用。随着计算机和通信技术的快速发展以及互联网的日益普及,嵌入式系统在后 PC 时代获得了巨大成功和广泛应用,尤其是作为物联网的核心组成部分。它们渗透到现代生活的每一个角落,从日常生活,如自动家庭恒温器,到工业生产,如制造业中的机器人自动化。从移动电话、MP3 播放器和 PDA 到汽车、飞机和导弹,嵌入式系统可以在军事和国防、医疗保健、科学、教育和商业服务中找到。

本章提供了嵌入式系统的概念、结构和其他基本信息,为嵌入式应用开发奠定了理论基础,其中 Android 操作系统的应用开发成为开发人员的最大兴趣。

嵌入式系统简介

自 1946 年第一台计算机 ENIAC 问世以来,计算机制造工艺已经从真空管、晶体管、集成电路和大规模集成电路(LSI)发展到超大规模集成电路(VLSI),从而产生了更紧凑、更强大、更节能但更便宜(每单位计算能力)的计算机。

20 世纪 70 年代微处理器问世后,计算机使用领域发生了革命性的变化。微处理器是微型计算机的基础,个人电脑使它们变得更加便宜和实用,允许许多私人用户拥有它们。在这个阶段,计算机满足了各种各样的需求:它们足够多才多艺,能够满足各种各样的需求,例如计算、娱乐、信息共享和办公自动化。随着微型计算机的采用,越来越多的人希望将它们嵌入到特定的系统中,以智能地控制环境。例如,微型计算机被用在工厂的机床上。它们用于通过配置外围传感器来控制信号和监控运行状态。当微型计算机被嵌入到这样的环境中时,它们就是嵌入式系统的原型。

随着技术的进步,更多的行业需要特殊的计算机系统。结果,用于特定环境的专用计算机系统和通用计算机系统的发展方向和目标产生了分歧。通用计算机系统的技术要求是快速、大规模和多样化的计算,而技术发展的目标是更快的计算速度和更大的存储容量。然而,嵌入式计算机系统的技术要求更多地是针对目标的智能控制,而技术发展的目标是与目标系统密切相关的嵌入式性能、控制和可靠性。

嵌入式计算系统以完全不同的方式发展。通过强调特定处理器的特性,他们将传统电子系统转变为现代智能电子系统。图 1-1 展示了一款嵌入式电脑处理器,英特尔凌动 N2600 处理器,2.2 × 2.2 cm,旁边是一枚硬币。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-1。

Comparison of an embedded computer chip to a US penny. This chip is an Intel Atom processor

嵌入式计算机系统和通用计算机系统的出现是现代计算机技术的一个里程碑。通用计算机和嵌入式系统的对比见表 1-1 。

表 1-1。

Comparison of General-Purpose Computers and Embedded Systems

| 项目 | 通用计算机系统 | 嵌入式系统 | | --- | --- | --- | | 五金器具 | 高性能硬件、大容量存储介质 | 多样化的硬件、单处理器解决方案 | | 软件 | 大型复杂的操作系统 | 精简、可靠的实时系统 | | 发展 | 高速、专业化的开发团队 | 广泛的发展部门 |

如今,嵌入式系统因其移动性而成为人们生活中不可或缺的一部分。如前所述,它们在现代生活中无处不在。智能手机是嵌入式系统的一个很好的例子。

移动电话

移动设备,尤其是智能手机,是近年来增长最快的嵌入式领域。手机软件开发衍生出了很多新名词,比如泛嵌入式开发、移动开发等。手机不仅无处不在,而且功能强大,价格实惠,应用多样化。除了基本的电话功能,它们还包括但不限于集成 PDA、数码相机、游戏控制台、音乐播放器和可穿戴设备。

消费电子和信息设备

消费电子和信息家电是嵌入式系统的附加大应用领域。属于这一类别的设备包括个人移动设备和家庭/娱乐/视听设备。

个人移动设备通常包括 PDA 等智能手机,以及移动互联网设备(mid)等无线互联网接入设备。理论上,智能手机也属于这一类;但由于它们数量庞大,因此被列为一个部门。

家庭/娱乐/视听设备主要包括类似互动电视的网络电视;数字成像设备,例如数码相机、数码相框和视频播放器;数字音频和视频设备,例如 MP3 播放器和其他便携式音频播放器;以及诸如手持游戏控制台、PS2 控制台等电子娱乐设备。平板电脑(tablets)是一种新型嵌入式设备,自苹果公司 2010 年发布 iPad 以来,已经成为消费者的最爱。

消费电子的可负担性真正体现了嵌入式系统设计的性价比。

嵌入式系统的定义

到目前为止,通过给出的例子,您已经对嵌入式系统有了大致的了解。但是什么是嵌入式系统呢?目前,业界对嵌入式系统有不同的概念。

根据 IET 工程技术协会的定义,嵌入式系统是用于控制、监控或辅助设备、机器或工厂运行的装置。智能手机作为嵌入式系统的重要组成部分,具有以下特点:

有限的资源

大多数嵌入式系统的资源极其有限。一方面,这里所指的资源是硬件资源,包括 CPU 的计算速度和处理能力、可用物理存储器的大小以及存储代码和数据的 ROM 或闪存的容量。另一方面,资源也是软件提供的功能。与通用操作系统相比,嵌入式操作系统具有相对简单的功能和结构。嵌入式系统的资源限制导致设计不够充分,而不是功能强大。

实时性能

嵌入式系统的实时性意味着任务通常必须在某个可预测的时间内执行,并且必须确保最大执行时间限制。

实时分为软实时和硬实时。软实时具有不太严格的要求;即使在某些情况下无法满足时间限制,也不会对系统造成致命影响。例如,媒体播放器系统是软实时的。系统应该在一秒钟内播放 24 帧,但是当系统在一些过载情况下出现故障时,这也是可以接受的。硬实时有严格的要求。在所有情况下,必须绝对确保任务的执行;否则后果将是灾难性的。例如,飞机自动驾驶仪和导航系统是硬实时系统。他们必须在一定的时限内完成特定的任务;否则可能会发生重大事故、碰撞或撞车。

许多嵌入式系统(手机、游戏机等等)不需要实时保证。但是实时性是一些嵌入式系统的关键,例如大型钢厂的轧钢系统和大型变电站的实时报警系统。在这些应用中,系统必须在给定时间对特定信号做出响应。

稳健性

一些嵌入式系统要求高可靠性。可靠性也称为稳健性,即在异常或危险情况下持续运行的能力。例如,当嵌入式系统遇到输入错误、网络过载或故意攻击时,系统必须足够健壮,不会挂起或崩溃,而是照常运行。

集成硬件和软件

通用计算机动态安装软件。该软件可以根据用户的需求进行安装和卸载。但是对于嵌入式系统来说,软件和硬件通常被集成在一起,打包出售。对于总是通过互联网连接的设备,如智能手机和物联网(例如可穿戴设备),这一趋势正在发生变化。在这些情况下,原始设备制造商(ODM)可以定期进行软件更新。

嵌入式软件通常内置于硬件 ROM 中,并在系统启动时自动运行。在正常情况下,如果没有特殊工具的帮助,用户不能轻易修改或删除软件,以确保嵌入式系统的完整性。由于硬件和软件的集成,嵌入式系统通常没有一般计算机系统必须解决的知识产权问题。例如,由于软件的安装方式,在手机和数码相机等消费电子产品上进行软件盗版几乎是不可能的。但是,这一特性也导致系统软件升级缓慢,因为很难做到。

功率限制

通用计算机通常直接连接到交流电源。因此,通用计算机硬件和软件设计者可以假设电源是取之不尽的。但是对于不能直接连接到交流电源的嵌入式系统,例如手机、电动玩具和相机,唯一的电源是电池。这意味着它们的功耗受到限制,因此能效非常重要。冷却是另一个关键因素。一般来说,在特定时间段内更多的功耗会导致产生更多的热量,这在某些情况下会导致问题,例如电池着火、由于过热导致的组件故障以及电力的快速损失。

开发调试困难

相对于通用计算机的软硬件开发,嵌入式系统开发具有更高的技术要求。例如,嵌入式软件的开发者在开发阶段通常必须理解硬件和硬件层的工作原理和机制。为了调试代码,这些开发人员通常必须使用在线模拟、ROM 监视器和 ROM 编程工具,这些在桌面开发中是不会出现的。

嵌入式系统的典型架构

图 1-2 显示了一个典型的嵌入式系统的配置图,由两个主要部分组成:嵌入式硬件和嵌入式软件。嵌入式硬件主要包括处理器、内存、总线、外围设备、I/O 端口和各种控制器。嵌入式软件通常包含嵌入式操作系统和各种应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-2。

Basic architecture of an embedded system

输入和输出是任何开放系统的特征,嵌入式系统也不例外。在嵌入式系统中,硬件和软件经常协作处理来自外部的各种输入信号,并通过某种形式输出处理结果。输入信号可以是人体工程学设备(如键盘、鼠标或触摸屏)或另一个嵌入式系统中传感器电路的输出。输出可以是声音、光、电或其他模拟信号的形式,或者是数据库的记录或文件。

典型硬件架构

基本的计算机系统组件——微处理器、内存和输入输出模块——通过系统总线相互连接,以便所有部件进行通信和执行程序(见图 1-3 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-3。

Computer architecture

在嵌入式系统中,微处理器的角色和功能通常与通用计算机中 CPU 的角色和功能相同:控制计算机操作、执行指令和处理数据。在许多情况下,嵌入式系统中的微处理器也称为 CPU。内存用于存储指令和数据。I/O 模块负责处理器、内存和外部设备之间的数据交换。外部设备包括辅助存储设备(如闪存和硬盘)、通信设备和终端设备。系统总线为处理器、内存和 I/O 模块提供数据并控制信号通信和传输。

基本上有两种类型的架构适用于嵌入式系统:冯诺依曼架构和哈佛架构。

冯·诺依曼建筑

冯·诺依曼建筑(也称为普林斯顿建筑)是由约翰·冯·诺依曼首先提出的。这种架构最重要的特点就是软件和数据使用同一个内存:即“程序是数据,数据是程序”(如图 1-4 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-4。

Von Neumann architecture

在冯·诺依曼体系结构中,指令和数据共享同一总线。在这种体系结构中,信息的传输成为计算机性能的瓶颈,影响数据处理的速度;因此,它通常被称为冯·诺依曼瓶颈。实际上,缓存和分支预测技术可以有效地解决这个问题。

哈佛建筑

哈佛建筑最初是以哈佛 Mark I 计算机命名的。与冯诺依曼架构相比,哈佛架构处理器有两个突出的特点。首先,指令和数据存储在两个独立的内存模块中;指令和数据不能在同一个模块中共存。第二,两条独立的总线被用作 CPU 和存储器之间的专用通信路径;两辆公共汽车之间没有联系。哈佛架构如图 1-5 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-5。

Harvard architecture

由于 Harvard 架构具有独立的程序存储器和数据存储器,因此可以提供更大的数据存储器带宽,是数字信号处理的理想选择。大多数为数字信号处理(DSP)设计的系统都采用哈佛架构。冯诺依曼架构具有简单的硬件设计和灵活的程序和数据存储,通常是通用和大多数嵌入式系统的选择。

为了有效地执行存储器读/写,处理器不直接连接到主存储器,而是连接到高速缓存。通常,哈佛架构和冯诺依曼架构之间的唯一区别是单或双 L1 高速缓存。在哈佛架构中,L1 缓存通常分为指令缓存(I 缓存)和数据缓存(D 缓存),但冯诺依曼架构只有一个缓存。

嵌入式系统的微处理器体系结构

微处理器是嵌入式系统的核心。通过将微处理器安装到特殊的电路板上,并添加必要的外围电路和扩展电路,可以创建一个实用的嵌入式系统。微处理器结构决定指令、支持外围电路和扩展电路。微处理器种类繁多:4 位、8 位、16 位、32 位和 64 位,性能从 MHz 到 GHz,从几个引脚到几千个引脚不等。

一般来说,有两种类型的嵌入式微处理器体系结构:精简指令集计算机(RISC)和复杂指令集计算机(CISC)。RISC 处理器使用一个小的、有限的、简单的指令集。每条指令使用标准字长,执行时间短,有利于指令流水线的优化。为了补偿命令功能,CPU 通常配备大量通用寄存器。CISC 处理器具有强大的指令集和不同的指令长度,这有利于指令的流水线执行。RISC 和 CISC 的比较在表 1-2 中给出。

表 1-2。

Comparison of RISC and CISC

|   | 精简指令集计算 | 复杂指令集电脑(complex instruction set computer) | | --- | --- | --- | | 指令系统 | 简单高效的指令。通过组合指令实现不常见的功能。 | 丰富的指令系统。通过特殊指令执行特定功能;高效处理特殊任务。 | | 存储瀑作 | 限制存储器操作并简化控制功能。 | 具有多个存储器操作指令并执行直接操作。 | | 程序 | 汇编程序需要大量的内存空间,并且具有特殊功能的复杂程序。 | 具有相对简单的汇编器,并具有对科学计算和复杂运算进行简单有效编程的特点。 | | 中断 | 只在指令执行的适当位置响应中断。 | 仅在执行结束时响应中断。 | | 中央处理器 | 单元电路少,体积小,功耗低。 | 电路单元功能丰富,功能强大,面积大,功耗高。 | | 设计周期 | 特点是结构简单,布局紧凑,设计周期短,易于应用新技术。 | 结构复杂,设计周期长。 | | 使用 | 特点是结构简单,指令规则,控制简单,易学易用。 | 特点是结构复杂,功能强大,特殊功能容易实现。 | | 适用范围 | 确定每个特定区域的指令系统,这更适用于特殊机器。 | 变得更适合通用机器。 |

RISC 和 CISC 有不同的特点和优势,但在微处理器领域,RISC 和 CISC 之间的界限开始模糊。许多传统的 CISC 吸收了 RISC 的优点,并使用类似 RISC 的设计。英特尔 x86 处理器就是其中的典型。它们被认为是 CISC 建筑。这些处理器通过解码器将 x86 指令翻译成类似 RISC 的指令,并遵守 RISC 设计和操作,以获得 RISC 架构的好处并提高内部操作效率。处理器的内部指令执行称为微操作,表示为微操作,缩写为μ-op(或写为μ-OP 或μop)。相比之下,x86 指令被称为宏操作(macro-op),整个机制如图 1-6 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-6。

Micro and macro operations of an Intel processor

通常情况下,一个宏操作可以被解码成一个或多个微操作来执行,但有时解码器可以将几个宏操作组合起来生成一个微操作来执行。这个过程被称为 x86 指令融合(宏操作融合)。例如,处理器可以组合 x86 CMP(比较)指令和 x86 JMP(跳转)指令来产生单个微操作——比较和跳转指令。这种组合有明显的好处:指令更少,间接增强了处理器执行的性能。这种融合使得处理器能够最大化指令之间的并行性,从而提高处理器的执行效率。

目前,大多数嵌入式系统中使用的微处理器有五种体系结构:RISC、CISC、MIPS、PowerPC 和 SuperH。细节如下。

RISC:高级 RISC 机器(ARM)架构

高级 RISC 机器(ARM)是一种 RISC 微处理器的通称。ARM 由英国公司 ARM Holdings 设计。该公司专门从事 RISC 芯片的设计和开发。作为知识产权的供应商,该公司本身并不制造其芯片,而是将其设计许可给其他合作伙伴生产。世界各大半导体厂商购买 ARM 设计的 ARM 微处理器内核,根据不同的应用领域添加合适的外部电路,打造自己的 ARM 微处理器芯片。

CISC: x86 体系结构

x86 系列 CPU 是台式机中最受欢迎的 CPU。x86 架构被认为是 CISC。该指令集是英特尔为其第一个 16 位 CPU (i8086)专门开发的,IBM 在 1981 年推出世界上第一台 PC 时采用了该指令集。随着英特尔推出 i80286、i80386、i80486、奔腾和其他产品,它继续使用 x86 指令集来确保传统应用可以运行,并保护和集成多样化的软件资源。因此,这些 CPU 被称为 x86 架构。

除了 Intel 之外,AMD、Cyrix 和其他制造商也生产了基于 x86 指令集的 CPU。那些 CPU 可以运行各种针对 Intel 处理器开发的软件,所以在业界被称为 x86 兼容产品,属于 x86 架构。英特尔专门推出了面向嵌入式系统的英特尔凌动 x86 32 位处理器。第二章描述并展示代号为 Bay Trail 的 64 位英特尔凌动处理器的优势。

Note

IA-32、IA-64、英特尔 64、IA-32、IA-64 和英特尔 64 是英特尔的架构类型,适用于其处理器以及兼容的 CPU。

IA-32(英特尔架构-32)是指英特尔的 32 位架构处理器。数字 32 是处理器的工作宽度;它一次可以处理 32 位二进制数据。如果其他处理器(例如,AMD 32 位 CPU)与此架构兼容,则它们属于 IA-32 架构。

IA-64(英特尔架构-64)是英特尔的 64 位架构。凭借 64 位的工作宽度,其微架构与 x86 架构完全不同。IA-64 与 x86 软件不兼容,因此 x86 软件必须使用各种形式的仿真才能在 IA-64 上运行,这往往导致效率低下。该架构由惠普创建,由惠普和英特尔共同开发。英特尔安腾是典型的 IA-64 处理器。

Intel64 是一种 64 位 x86 架构,工作宽度为 64 位。在 AMD 推出之后,英特尔推出了一款名为 EM64T 的兼容处理器,正式更名为 Intel64。几乎所有的英特尔 CPU 现在都是英特尔 64:至强、酷睿、赛扬、奔腾和凌动。与 IA-64 架构相反,它也可以运行 x86 指令。

MIPS 架构

没有互锁管道级(MIPS)的微处理器也是 RISC 处理器。其机制是充分利用软件来避免管道中的数据问题。它最初是由斯坦福大学的约翰·汉尼斯教授领导的研究小组在 20 世纪 80 年代初开发的,后来由 MIPS Technologies 公司商业化。

与 ARM 一样,MIPS Technologies 通过智能产权(IP)内核向半导体公司提供 MIPS 微处理器内核,并允许他们进一步开发 RISC 架构中的嵌入式微处理器。核心技术是多发布能力:将处理器中的闲置处理单元拆分出来,虚拟化为另一个核心,提高处理单元的利用率。

PowerPC 体系结构

PowerPC 是 RISC 体系结构中的 CPU。它来源于 POWER 架构,其基本设计来自于 IBM PowerPC 601 微处理器性能优化增强的 RISC (POWER)。20 世纪 90 年代,IBM、苹果和摩托罗拉成功开发了 PowerPC 芯片,并创造了基于 PowerPC 的多处理器计算机。PowerPC 体系结构具有可伸缩性、便利性、灵活性和开放性:它定义了指令集体系结构(ISA),允许任何人设计和制造 PowerPC 兼容的处理器,并自由使用为 PowerPC 开发的软件模块的源代码。PowerPC 具有从移动电话到游戏控制台的广泛应用,广泛应用于通信和网络领域,如交换机、路由器等。苹果 Mac 系列使用 PowerPC 处理器长达十年,直到苹果改用 x86 架构。

超级

SuperH (SH)是一款性价比极高的紧凑型嵌入式 RISC 处理器。SH 架构最早由日立开发,归日立和 st 微电子所有。现在已经被瑞萨接手了。SuperH 包括 SH-1、SH-2、SH-DSP、SH-3、SH-3-DSP、SH-4、SH-5 和 SH-X 系列,广泛用于打印机、传真机、多媒体终端、电视游戏机、机顶盒、CD-ROM、家用电器和其他嵌入式系统。

嵌入式系统的典型结构

嵌入式系统的典型硬件结构如图 1-7 所示。微处理器是系统的中心,有存储设备、输入输出外设、电源、人机交互设备和其他必要的支持设施。在实际的嵌入式系统中,硬件通常是为应用量身定制的。为了节省成本,外围设备可以非常紧凑,并且只保留基本的外围电路用于处理器和应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-7。

Typical hardware structure of an embedded system

随着集成电路设计和制造技术的发展,集成电路设计已经从晶体管集成,到逻辑门集成,再到现在的 IP 集成或片上系统(SoC)。SoC 设计技术将流行的电路模块集成在单个芯片上。SoC 通常包含大量外围功能模块,如微处理器/微控制器、存储器、USB 控制器、通用异步收发器(UART)控制器、A/D 和 D/A 转换、I2C 和串行外设接口(SPI)。图 1-8 是基于 SoC 的嵌入式系统硬件结构示例。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-8。

Example of an SoC-based hardware system structure

可编程芯片上系统(SoPC)提倡用可编程逻辑技术将电子系统集成到硅芯片上。因此,SoPC 是一种特殊类型的 SoC,因为整个系统的主要逻辑功能是由单个芯片实现的。因为它是一个可编程系统,它的功能可以通过软件改变。可以说,SoPC 结合了 SoC、可编程逻辑器件(PLD)和现场可编程门阵列(FPGA)的优点。

嵌入式系统硬件的发展方向之一是以 SoC/SoPC 为中心,通过最少的外部元件和连接器构建一个硬件应用系统,以满足应用的功能需求。

典型软件架构

像嵌入式硬件一样,嵌入式软件架构高度灵活。简单的嵌入式软件(如电子玩具、计算器等)可能只有几千行代码,执行简单的输入和输出功能。另一方面,复杂的嵌入式系统(如智能手机、机器人等)需要更复杂的软件架构,类似于台式电脑和服务器。简单的嵌入式软件适用于低性能的芯片硬件,功能非常有限,需要繁琐的二次开发。复杂的嵌入式系统提供更强大的功能,需要为用户提供更方便的界面,需要更强大的硬件支持。随着硬件集成和处理能力的提高,硬件瓶颈已经逐渐松动甚至被打破,所以嵌入式系统软件现在趋于功能齐全和多样化。典型的、完整的嵌入式系统软件具有如图 1-9 所示的架构。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1-9。

Software architecture of an embedded system

嵌入式软件系统自下而上由四层组成:

  1. 硬件抽象层
  2. 操作系统层
  3. 系统服务层
  4. 应用层
硬件抽象层

硬件抽象层是嵌入式系统硬件和操作系统之间的软件抽象层,是操作系统的一部分。一般来说,HAL 包括引导程序、板支持包(BSP)、设备驱动程序和其他组件。类似于个人电脑中的 BIOS,引导装载程序是在操作系统内核执行之前运行的程序。它完成硬件的初始化,建立存储空间的映像,从而使硬件和软件环境达到一个合适的状态,以便最终调度系统内核。从最终用户的角度来看,引导加载程序用于加载操作系统。BSP 实现了硬件操作的抽象,使操作系统能够独立于硬件,并使操作系统能够在不同的硬件架构上运行。

必须为每个操作系统创建唯一的 BSP。例如,Wind River VxWorks BSP 和 Microsoft Windows CE BSP 对于嵌入式硬件开发板来说具有类似的功能,但它们具有完全不同的架构和接口。在讨论各种桌面 Windows 或 Linux 操作系统时,很少提到 BSP 的概念,因为所有的 PC 都采用统一的 Intel 架构;操作系统可以轻松地移植到各种基于英特尔架构的设备上,无需任何更改。BSP 是嵌入式系统中一个独特的软件模块。此外,设备驱动程序使操作系统能够屏蔽硬件组件和外围设备之间的差异,并为操作硬件提供统一的软件接口。

操作系统层

OS 是用于统一管理硬件资源的软件系统。它抽象出许多硬件功能,并以服务的形式提供给应用。调度、文件同步和联网是操作系统提供的最常见的服务。操作系统广泛应用于大多数桌面和嵌入式系统。在嵌入式系统中,操作系统有其独特的特征:稳定性、定制性、模块化和实时处理。

常见的嵌入式 OS 有嵌入式 Linux,Windows CE,VxWorks,MeeGo,Tizen,Android,Ubuntu,以及一些特定领域使用的操作系统。嵌入式 Linux 是为移动和嵌入式产品量身定制和修改的通用 Linux 内核。Windows CE 是微软为各种嵌入式系统和产品推出的可定制嵌入式操作系统。来自 Wind River 的嵌入式实时操作系统(RTOS)VxWorks 支持 PowerPC、68K、CPU32、SPARC、I960、x86、ARM 和 MIPS。它具有出色的实时性和可靠性,广泛应用于通信、军事、航天、航空和其他需要高度复杂的实时技术的领域。尤其是 VxWorks 被 NASA 用在火星探测器上。

系统服务层

系统服务层是操作系统提供给应用的服务接口。使用这个接口,应用可以访问操作系统提供的各种服务。在某种程度上,它起到了连接操作系统和应用的作用。这一层通常包括文件系统、图形用户界面(GUI)、任务管理器等等。GUI 库为应用提供了各种 GUI 编程接口,这使得应用能够通过应用窗口、菜单、对话框和其他图形形式而不是命令行与用户进行交互。

应用层

应用位于软件层次结构的顶层,实现系统功能和业务逻辑。从功能角度来看,应用中所有级别的模块都旨在执行系统功能。从系统的角度来看,每个应用都是一个独立的操作系统进程。通常,应用在低特权处理器模式下运行,并使用操作系统提供的 API 系统调度与操作系统进行交互。

嵌入式应用开发的特殊困难

正如本章前面提到的,嵌入式系统通常是资源受限的、实时的和健壮的。这些特点使得在嵌入式系统上开发应用比在通用计算机上开发更困难。

嵌入式系统的资源受限特性意味着它们比通用系统拥有更少的资源、更低的 CPU 运行速度和处理能力以及更少的 RAM。嵌入式系统将代码和数据存储在 ROM 或闪存中,而不是硬盘上,容量比硬盘小。与通用计算机相比,大多数专用嵌入式系统,尤其是嵌入式操作系统,也具有非常简单的功能。这些资源限制要求嵌入式硬件开发人员为芯片和外设选择更合理的配置。他们必须比开发桌面环境时更仔细地考虑资源利用。

嵌入式交互对应用开发提出了特殊的要求。一般桌面计算机使用 GUI 窗口、图标、菜单和指针(WIMP),包括常见的交互元素,如按钮、工具栏和对话框。WIMP 对交互硬件要求严格;例如,它要求显示器具有一定的分辨率和尺寸,鼠标或类似设备必须支持指点操作。然而,许多嵌入式系统的交互硬件并不符合 WIMP 的要求。例如,MP3 播放器的显示屏太小,分辨率不够;ABS 没有显示屏;而且大多数嵌入式系统都没有鼠标或者触摸屏来完成指点操作(比如基本的手机都没有触摸屏)。因为嵌入式应用的交互非常特殊,我们不能完全采用 WIMP 接口。

嵌入式系统特殊的用户体验和可靠性特征增加了应用开发的难度。例如,用户期望嵌入式系统的启动时间比通用计算机短得多。与通用计算机系统相比,嵌入式系统也更难保证可靠性。当任务出现问题时,嵌入式系统没有任务管理器、Kill 命令或类似的工具来终止出错的进程。显然,嵌入式系统对错误的容忍度低于一般系统。

嵌入式系统一般不支持本机代码开发。通用计算机上的软件开发通常有原生开发、编译和运行。它不适合嵌入式系统,因为它们没有足够的资源来运行开发和调试工具。所以嵌入式系统软件通常采用交叉编译开发,在另一个硬件平台上生成执行代码。

交叉编译开发环境构建在主机上,而嵌入式系统被称为目标机器。主机上的交叉编译、汇编和链接工具创建可执行的二进制代码,这些代码在主机上是不可执行的:只能在目标机器上执行。可执行文件被下载到目标机器。主机上的开发环境并不完全反映目标机器上的环境,因此对目标机器的调试和故障诊断可能很耗时。嵌入式系统的非本地开发模型给应用开发带来了一定的挑战。

摘要

本章讨论了嵌入式系统的原理、SoC 的架构以及 ARM 和 x86/x64 等平台的优缺点。个人电脑的应用开发者经常忽略硬件,而完全专注于他们的软件,因为这两个实体是相当独立的。然而,开发者不能忽视嵌入式系统硬件。由于 SoC 的独特功能、有限的资源以及硬件和软件的集成,开发人员需要了解硬件和硬件层的工作原理和机制,以便为 SoC 设计高效的应用(例如,ARM 和 x86 具有不同的硬件)。下一章将详细讨论英特尔嵌入式硬件平台,包括英特尔凌动处理器、英特尔嵌入式芯片组、SoC 和参考平台。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Open Access This chapter is licensed under the terms of the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License ( http://​creativecommons.​org/​licenses/​by-nc-nd/​4.​0/​ ), which permits any noncommercial use, sharing, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons licence and indicate if you modified the licensed material. You do not have permission under this licence to share adapted material derived from this chapter or parts of it. The images or other third party material in this chapter are included in the chapter’s Creative Commons licence, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons licence and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.

二、英特尔嵌入式硬件平台

Keywords Embed System Trust Platform Module Arithmetic Logic Unit Stream SIMD Extension Intel Atom

通用计算机上的应用开发人员通常可以忽略硬件,而完全专注于他们的软件,因为这两个实体已经变得相当独立。然而,开发者不能忽视嵌入式系统硬件。由于嵌入式系统的特殊功能、有限的资源以及硬件和软件的集成,您需要了解硬件和硬件层的工作原理和机制,以便为嵌入式环境设计高效的应用。

作为芯片创新的全球领导者,英特尔一直在为通用计算机和嵌入式系统设计高性能处理器和相关硬件。本章重点介绍面向嵌入式系统的英特尔技术,为后续应用开发铺平道路。

英特尔凌动处理器

从 2008 年开始,英特尔专门为嵌入式和移动设备设计了英特尔凌动处理器。作为最小和最低功耗的处理器,它使用全新的嵌入式设备微架构来降低功耗,同时保持与英特尔酷睿 2 处理器的指令集兼容性。

英特尔凌动处理器是当前基于英特尔的嵌入式系统架构。它与英特尔架构指令软件兼容。与面向台式机系统的英特尔处理器相比,其尺寸、功耗和其他特性更适合嵌入式应用。

当今一代英特尔凌动处理器可提供高能效性能,为一系列计算设备提供动力。轻薄的智能手机和平板电脑。智能汽车。创新的医疗保健设备。智能城市基础设施监控。面向云的高性能微服务器。这些只是英特尔凌动处理器创新以超低功耗推动更高性能的部分方式——连接人们、丰富生活、推动物联网。

英特尔凌动处理器 E3800 产品家族(前身为 Bay Trail)提供了一系列多核片上系统(SoC)选项。基于业界领先的 22 纳米制程技术,这些 SOC 将英特尔架构内核、图形、内存和 I/O 接口集成到一个单芯片解决方案中,可提供出色的计算、图形和媒体性能。

英特尔凌动处理器架构

在英特尔凌动 Clover Trail 平台之前,英特尔凌动处理器基于一个代号为 Saltwell 的微架构,该架构应用了两个发布宽度和有序流水线;它还支持英特尔超线程技术。微架构如图 2-1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-1。

Intel Atom architecture

前端区域是优化的管道,包括

  • 32 KB,8 路组关联,一级高速缓存
  • 分支预测单元和即时翻译后备缓冲器(ITLB)
  • 两个指令解码器,每个解码器每个周期最多解码两条指令

在每个周期内,前端最多可以向指令队列发送两条指令进行调度。同样,在每个周期中,调度器最多可以通过双向端口向整数或 SIMD/浮点执行区发送两条指令。(单指令,多数据[SIMD])将在下一节介绍。)

整数或 SIMD/浮点区域的端口具有以下绑定功能:

整数执行区

  1. 端口 0:算术逻辑单元 0 (ALU0)、移位/旋转单元和加载/存储单元。
  2. 端口 1:算术逻辑单元 1、位处理单元、跳转单元和 LEA。
  3. 循环 0 中“装载使用”的有效等待时间。

SIMD/浮点执行区

  1. 端口 0: SIMD 算术逻辑单元、混洗单元、SIMD/浮点乘法单元和除法单元。
  2. 端口 1: SIMD 算术逻辑单元和浮点加法器。
  3. 在 wide 浮点执行区,SIMD 算术逻辑单元和洗牌单元是 128 位宽,但 64 位整数 SIMD 计算仅限于端口 0。
  4. 浮点加法器可以在 128 位数据路径中执行加法压缩单精度(ADDPS)/减法压缩单精度(SUBPS),而其他浮点加法运算在 64 位数据路径中执行。
  5. 浮点/SIMD 运算的安全指令识别算法可以直接执行新的、更短的整数算术指令,而无需等待旧的浮点/SIMD 指令(这可能会导致一些异常)。
  6. 浮点乘法流水线也支持存储负载。
  7. 具有加载/存储引用的浮点加法指令通过两个端口分配。

指令队列执行静态分区,以便调度来自两个线程的执行指令。调度器可以从两个线程中选择一条指令,并将它们分配给端口 0 或端口 1 执行。硬件在两个线程上选择预取/解码/分派,并根据每个线程的准备情况执行下一次执行。

Silvermont:下一代微体系结构

英特尔的 Silvermont 微体系结构采用 3D 三栅极晶体管设计,并与英特尔的 22 纳米 SoC 工艺共同优化。通过利用这一行业领先的技术,Silvermont 微体系结构包括

  • 一个新的无序执行引擎,可实现同类最佳的单线程性能。
  • 一种全新的多核和系统结构体系结构,可扩展至多达八个内核,可实现更高的性能、更低的延迟和更高效的无序支持,从而使系统更加平衡,响应速度更快。
  • 新的英特尔架构指令和技术带来增强的性能、虚拟化和安全管理能力,以支持广泛的产品。这些指令基于英特尔现有的 64 位支持和英特尔架构软件安装基础的广度。
  • 增强的电源管理功能,包括新的智能突发技术、低功耗 C 状态和利用英特尔 3D 晶体管的更宽动态工作范围。英特尔突发技术 2.0 支持单核和多核,可提供出色的响应能力,并可提高能效。

微架构如图 2-2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-2。

Silvermont microarchitecture

Silvermont 提供了以下优势和功能:

  • 高性能而不牺牲能效:无序执行流水线、改进了指令延迟和吞吐量的宏操作执行流水线,以及智能流水线资源管理
  • 功率和性能:高效的分支处理、精确的分支预测器和快速恢复流水线
  • 更快、更高效地访问内存:低延迟、高带宽高速缓存、无序内存事务以及多个高级硬件预取器、平衡内核和内存子系统

英特尔凌动处理器的特性

如本节所述,英特尔凌动处理器具备面向移动互联网设备(MID)、上网本、上网机和嵌入式系统的特性。

小外形尺寸

最新的英特尔凌动处理器 Z3740(代号 Bay Trail)封装尺寸仅为 17 mm × 17 mm,是一款多核 SoC,将下一代英特尔处理器内核、显卡、内存和 I/O 接口集成到一个解决方案中。它也是英特尔首款基于 22 纳米处理器技术的 SoC(见图 2-3 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-3。

Intel Atom processor Z3xxx Series

低功耗

如前所述,嵌入式系统的功耗有限。英特尔凌动处理器采用节能技术,如增强型英特尔 SpeedStep 技术(EIST)、 1 低热设计功耗、动态高速缓存调整和深度睡眠。采用英特尔凌动处理器的设备散热非常有限,远低于常见的“全功率”设备。

需要注意的是,不同的英特尔凌动处理器系列具有不同的低功耗处理策略。例如,N 系列不支持 EIST,也不在待机状态下进行自动降频。

面向移动和嵌入式设备的动态低压技术

许多移动和嵌入式系统由电池供电;因此,电压不具有交流电源系统的稳定性,交流电源系统的电压保持在一定范围内。英特尔凌动处理器还采用了动态调整每个处理器活动状态的工作电压的技术,并支持面向移动和嵌入式系统的英特尔移动电压定位(IMVP)-6 标准。

高性能

英特尔凌动处理器是一款嵌入式微处理器,能够提供传统通用处理器的性能,并提供类似于英特尔奔腾 4 处理器的性能。高性能主要体现在以下几个方面:

  • 四核支持四核/四线程乱序处理和 2mb L2 缓存,通过允许多个应用和服务同时运行,使设备运行更快,响应更灵敏。
  • 英特尔突发技术 2.0 允许系统在必要时挖掘额外的内核,从而使 CPU 密集型应用运行得更快、更流畅
  • 使用 22 纳米处理器技术提高了性能:
    • 在导通状态下最大化电流,以获得更好的性能
    • 最大限度地减少关闭状态下的泄漏,从而提高能效
  • 支持 64 位操作系统
  • 支持 CPU 和 IP(显卡)之间的动态功率共享,允许更高的峰值频率
  • 总 SoC 能量预算根据应用需求动态分配
  • 支持细粒度的低功耗状态,这提供了更好的电源管理并延长了电池寿命
  • 支持深度睡眠状态下的高速缓存保留,从而降低闲置功耗,缩短唤醒时间
  • 提供超过 10 小时的有效电池寿命
SSE3 指令集增强了数字媒体的处理能力

CAD 工具、3D/2D 建模、视频编辑、数字音乐、数字摄影和游戏等软件应用都需要大规模浮点并行计算。它们被称为浮点密集型应用。比如视频处理经常需要两个 n 长的数据集相乘,所以常用的算术指令要运算 n 次(n 个周期)。为此,SIMD 建筑被创造出来。与传统处理器相比,SIMD 处理器有更多的算术单元,由一个控制器控制,同时在每个数据集(也称为矢量数据)中进行相同的数据操作,以实现空间并行。在图 2-4 所示的例子中,如果 CPU 使用 8 个处理单元,n /8 条 SIMD 指令就可以完成计算,运算时间缩短为原来的 1/8,速度提高了 8 倍。SIMD 的本质是从一个数据过程转移到一个数据集过程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-4。

Realization procedure of SIMD instructions

英特尔处理器中的流式 SIMD 扩展(SSE)加速了流式浮点计算,并大大提高了浮点密集型应用的性能。英特尔凌动处理器支持 SSE3 和 SSSE3(补充流式 SIMD 扩展 3;补充上证 3)。SSE 指令集的版本历史如表 2-1 所示。

表 2-1。

Development History of the SSE Instruction Set

| 版本 | 同SOUTH-SOUTH-EAST | SSE2 | SSE3 | SSSE3 | SSE4 | 钽电容 | | 日期 | One thousand nine hundred and ninety-nine | Two thousand | Two thousand and four | Two thousand and six | Two thousand and seven | Two thousand and eight | | 说明 | Seventy | One hundred and forty-four | Thirteen | Thirty-two | Forty-seven | Two hundred and fifty-six | | 提高 | 单精度矢量流量操作 | 双精度向量 128 位向量整数 | 复数运算 | 解码 | 视频加速图形模块协处理器加速 | SSE 扩展浮点运算 |
英特尔虚拟化技术(英特尔 VT)

英特尔凌动处理器支持英特尔 VT,这是一种 CPU 虚拟化技术。英特尔 VT 允许一个 CPU 模拟多个 CPU 的并行运行,让一个平台运行多个操作系统,并支持应用在独立的空间中独立运行,从而提高应用效率。

英特尔超线程技术(英特尔 HT 技术)和多核技术

全新英特尔 Z3xxx 凌动处理器支持英特尔超线程技术,产生的额外功耗不到 10%。同时,N 系列采用了双核架构。英特尔超线程技术和多核技术使处理器能够并行执行两个指令线程,并提供线程级并发应用,从而在当今的多任务环境中提高性能和系统响应。英特尔凌动处理器中的英特尔超线程技术和多核技术比单线程微处理器具有更高的执行效率。

英特尔凌动处理器使用的其他技术

此外,英特尔凌动处理器还采用了其他一些通常不为人所知的技术,这些技术可以提高处理器的性能:

  • 智能高速缓存:英特尔凌动处理器使用更智能、更高效的高速缓存和总线技术来有效支持数据共享,并提供增强的性能、响应和节能能力。
  • 功耗优化的前端总线:英特尔凌动处理器支持高达 1910 MHz 的频率(E3845 ),可满足苛刻应用的需求。此外,英特尔架构指令(宏操作)融合技术允许在低功耗状态下更快地执行指令。
  • 增强的数据预取技术:该技术可以有效地预测哪些数据将被具体使用,并提前自动加载到 L2 缓存中。
  • 突发模式:突发模式作为增强的硬件技术,在 Z5xx 系列之后的英特尔凌动处理器中使用。它会根据系统负载自动设置处理器性能水平,而不会影响散热设计,因此用户可以按需选择处理器性能。
  • 低成本:为了满足嵌入式系统的需求,英特尔凌动处理器采用了低成本的设计策略,其中之一就是应用英特尔架构的有序执行。与通用台式机处理器的无序执行相比,英特尔凌动处理器中的有序执行设计可以减少晶体管数量和制造成本,但会导致性能下降。为了弥补较低的性能,英特尔凌动处理器使用了更高的工作频率。

除了这些特性之外,与其他嵌入式处理器相比,英特尔凌动处理器还具有一些独特的优势。由于基于英特尔架构,英特尔凌动处理器拥有大量兼容的基于英特尔架构的软件应用。其中许多应用可以轻松无缝地迁移到基于英特尔凌动处理器的设备上。

总的来说,低功耗、小尺寸、低成本、低散热系数和高性能使得英特尔凌动处理器更适合嵌入式系统应用。由于采用低功耗、无铅、无卤素制造工艺,英特尔凌动处理器也非常环保。

英特尔嵌入式芯片组

芯片组是计算机主板的核心组件之一,它最大限度地将复杂的电路和组件集成在几个芯片内。芯片组决定了主板的功能、级别、档次。如果它不能与 CPU 一起正常工作,芯片组会严重影响整体性能,甚至会导致硬件故障。如果说 CPU 或微处理器是大脑,芯片组就是设备的神经系统。

计算机系统结构的典型示例如图 2-5 所示。CPU 通过具有高频率的 FSB 连接到主存储器 RAM、图形和其他组件。网络适配器和其他组件连接到中速总线(PCI 总线的频率比 FSB 低得多)。北桥(主机桥芯片)实现高速前端总线和中速总线的连接。COM、LPT 和 USB 等低速设备以及低速 ISA 总线通过南桥(标准总线桥芯片)连接到低速总线。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-5。

Example of computer system architecture

这种结构的变体包括,例如,没有 ISA 总线的计算机。北桥和南桥集成在一些英特尔凌动系列处理器中,如后续章节所述。图 2-5 中的系统架构可以帮助你了解芯片组的主要组件及其功能。

Tip

PCI 和 ISA 两种类型的 PC 总线标准是 PCI 和 ISA。外围组件互连(PCI)是本地总线的标准,由英特尔于 1992 年推出。PCI 总线有 32 位或 64 位,速度有 33 MHz 或 66 MHz。32 位、33 MHz PCI 总线的带宽为 32/8 × 33 MHz = 132 MB/s。工业标准体系结构(ISA)基于 IBM PC 总线,是 20 世纪 80 年代初开发的总线标准。总线宽度为 8/16 位,工作频率为 8 MHz,远低于 PCI。大多数新计算机不支持 ISA 总线。

芯片组中的主要芯片及其功能如下:

  • 北桥芯片:决定主板系统的 CPU 类型、时钟速度、总线频率、内存类型、最大容量、性能、显卡插槽规格(ISA/PCI/AGP 插槽)、ECC 纠错支持等等。北桥在芯片组中起主导作用,所以也被称为主机桥。
  • 南桥芯片:南桥芯片提供对键盘控制器(KBC)、实时时钟控制器(RTC)、通用串行总线(USB)、Ultra DMA/33 (66) EIDE 数据传输模式、高级能源管理(ACPI)等的支持。它决定了扩展槽和扩展接口的类型和数量(如笔记本的 USB2.0/1.1、IEEE1394、串口、并口、VGA 输出接口)。南桥也被称为标准公交桥。
  • 其他芯片:一些芯片组结合了 3D 加速显示(集成图形芯片)、AC’97 音频解码和其他功能,并决定了计算机系统的显示性能和音频播放性能。

最新的英特尔凌动处理器包括采用突发技术的第七代英特尔 GPU,可提供改进的图形和媒体体验。新处理器支持高达 2,560 × 1,600 的 60 Hz 高分辨率显示器,并通过 Miracast 支持英特尔无线(英特尔 WiDi)技术。媒体编码和解码的高性能、低功耗硬件加速支持无缝视频播放。

英特尔片上系统(SoC)

与桌面设备不同,由于体积和空间的限制,嵌入式系统中的处理器、芯片组、显卡、主板和其他组件不能独立制造、配置和组装;否则,它们会太大,消耗太多的能量,具有不切实际的复杂设计,并且具有类似于台式机的不稳定布局。因此,目前大多数嵌入式系统都采用 SoC 设计。通过在单个芯片上集成微处理器/微控制器、存储器、总线、频率发生器和 A/D 或 D/A 转换的外围功能模块,SoC 提供了小尺寸、高能效、高可靠性和简单外围电路设计的优势。英特尔已经逐步将 SoC 作为英特尔凌动处理器的发展方向。最近的设计描述如下。

梅菲尔德

2012 年发布的 Medfield 是英特尔首款面向智能手机的 SoC 处理器。Medfield 平台的核心是 SoC 芯片(代号 Penwell)。事实上,以前的 Moorestown 平台需要双芯片解决方案来实现相同的功能。作为一个真正的 SoC,Medfield 不同于英特尔凌动处理器的单芯片布局,但与以前的芯片组相当。因此,它变成了一个更紧凑、更节能的处理器。Medfield SoC 处理器采用层叠封装(POP),整个芯片面积约为 12 × 12 mm,Medfield SoC 的内部架构如图 2-6 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-6。

Internal architecture of Penwell SoC

首款专为智能手机打造的 Medfield SoC 采用英特尔凌动处理器 Z2460。计划是在未来的 Medfield SoCs 中使用最新的英特尔凌动处理器。例如,第二个 Medfield SoC 的计划是采用英特尔凌动处理器 Z2610,并具有主流平板电脑的应用。Medfield SoC 采用 32 nm 处理器;集成了单核英特尔凌动处理器、512 KB L2 高速缓存、Imagination Technologies 的 PowerVR SGX540 GPU 和双通道 LPDDR2 内存控制器;并且支持 30 fps 1080p 视频解码。英特尔凌动处理器的最高频率被限制在 1.6 GHz。Z2460 可以将最低频率降低到 100 MHz,具有 1.3 GHz 的标准工作频率,在加速模式下仅工作在 1.6 GHz。作为第二个 Medfield SoC 内核,Z2610 保持 1.6 GHz 时钟速度运行。

英特尔凌动处理器 Z2460 在 100 MHz 时钟速度(最低频率)下功耗为 50 mW600 MHz 时钟速度时为 175 mW 在 1.3 GHz 时钟速度(标准频率)下为 500 mW 在 1.6 GHz 时钟速度(最高频率)下为 750 mW。与台式机处理器相比,Z2460 的功耗非常低。

如今,Android OS 完全支持 Medfield。英特尔与谷歌合作开发用于编译 ARM 和英特尔架构应用的软件。

海湾小径

Bay Trail 是基于 Silvermont 架构构建的全新英特尔多核 SoC,来自英特尔面向移动和桌面设备的强大处理器家族。Bay Trail 采用英特尔行业领先的三栅极 22 纳米工艺技术制造。

Bay Trail 是一款多核 SoC,将下一代英特尔处理器内核、显卡、内存和 I/O 接口集成到一个解决方案中。它也是英特尔首款基于 22 纳米处理器技术的 SoC。这款多核英特尔凌动处理器提供了卓越的计算能力,与前代产品相比更加节能。除了最新的英特尔架构核心技术,它还提供了广泛的平台特性,如图形、连接、安全性和传感器,使开发人员能够创建具有无限用户体验的软件。

基于英特尔架构的 64 位 Android 操作系统

一般来说,64 位和 32 位处理器之间没有太大的区别。但是计算密集型应用(稍后,本章将讨论在 64 位处理器上运行更快的软件工作负载)在从 32 位迁移到 64 位时可以看到显著的改进。几乎在所有情况下,64 位应用在 64 位环境中的运行速度都比 32 位应用在 64 位环境中的运行速度快,这是开发人员关心它的一个足够好的理由。利用平台功能可以提高执行大量计算的应用的速度。

64 位与 32 位 Android

64 位架构意味着整数寄存器和指针的宽度是 64 位。64 位操作系统的三个主要优势如下:

  • 寄存器数量增加
  • 扩展地址空间
  • 增加的内存

不难想象在不太遥远的将来,64 位芯片的 Android 手机。因为 Android 内核是基于 Linux 内核的,而 Linux 多年来一直支持 64 位技术,所以 Android 要完全支持 64 位处理,唯一需要做的就是让 Dalvik VM 兼容 64 位。Dalvik 应用(仅用 Java 编写)无需任何更改就可以在 64 位设备上运行,因为字节码是独立于平台的。

本地应用开发人员可以充分利用底层处理器提供的功能。例如,英特尔高级矢量扩展指令集(英特尔 AVX)已经扩展到在 64 位处理器上支持 256 位指令大小。

内存和 CPU 寄存器大小

与 CPU 相比,内存非常慢,与 CPU 处理一条指令所需的时间相比,读取和写入内存可能需要很长时间。CPU 试图通过多层缓存来隐藏这一点,但是即使是最快的缓存层与内部 CPU 寄存器相比也很慢。更多的寄存器意味着更多的数据可以完全保存在 CPU 内部,从而减少内存访问并提高性能。

这有多大的区别取决于所讨论的特定代码,以及编译器在优化代码以充分利用可用寄存器方面的能力。当英特尔架构从 32 位迁移到 64 位时,寄存器数量翻了一番,从 8 个增加到 16 个,这极大地提高了性能。

64 位指针允许应用寻址更大的 RAM 地址空间:通常,在 32 位处理器上,程序可用的可寻址内存空间在 1 到 3 GB 之间,因为只有 4 GB 是可寻址的。即使有 1–3gb 可用,单个程序也无法使用所有可寻址的内存,除非它采用将程序分成多个进程的技术,这需要大量的编程工作。在 64 位操作系统上,这没有关系,因为可寻址的内存空间非常大。

内存映射文件越来越难以在 32 位架构上实现,因为超过 4 GB 的文件越来越常见。如此大的文件不容易被内存映射到 32 位体系结构—一次只能将文件的一部分映射到地址空间。为了访问这样的文件,映射部分必须根据需要换入和换出地址空间。这是一个问题,因为如果由操作系统正确实现,内存映射是最有效的磁盘到内存的方法之一。

64 位指针也有一个很大的缺点:大多数程序使用更多的内存,因为指针需要被存储,它们消耗两倍的内存。在 64 位 CPU 上运行的相同程序比在 32 位 CPU 上运行的程序占用更多的内存。因为指针在程序中非常常见,这可能会增加缓存大小并对性能产生影响。

寄存器数量会极大地影响应用的性能。与 CPU 上的寄存器相比,RAM 速度较慢。CPU 缓存有助于提高应用的速度,但是访问缓存会导致性能下降。

性能提升的程度取决于编译器对 64 位环境的优化程度。能够在少量内存中完成大部分处理的计算密集型应用的性能会显著提高,因为大部分应用可以存储在 CPU 寄存器中。

相比之下,未经优化的应用的计算机性能可能会下降,因为 64 位指针需要两倍的带宽。但是,在移动环境中,操作系统和安装的应用应该经过精心设计以避免这种情况。在 64 位环境中运行较慢的大型程序的一个著名例子是 Oracle JVM。

ARM 和 Intel 64 位 CPU 都有 32 位兼容模式。尽管 32 位应用可以在 64 位处理器上运行,但使用 64 位优化编译器进行编译可以让它们利用 64 位环境的架构优势。

英特尔嵌入式系统参考平台

所谓的英特尔嵌入式系统参考平台是一系列使用英特尔凌动处理器和 SoC 的硬件设备。这种硬件组合具有紧凑的尺寸、低功耗、高性能、低成本以及适用于图形处理和其他专业领域的出色芯片组。因此,它可以广泛应用于各种嵌入式设备,如上网本、上网本、平板电脑、手机和 mid。

物联网(IoT)和下一代计算单元(NUC)

物联网(IoT)和下一代计算单元(NUC)是英特尔移动处理器的最新应用领域。如图 2-7 所示,英特尔 NUC 套件 DE3815TYKHE 采用面向智能系统的英特尔凌动处理器,是面向注重价值的企业和组织的小型设备。这种低成本、低功耗的解决方案为 NUC 外形带来了许多第一次:无风扇散热解决方案,实现了极致的静音和可靠性;板载闪存存储,实现了小尺寸软件解决方案;内置屏幕的内部平板显示器连接;视频图形阵列(VGA)端口,实现了传统安装中的显示器兼容性;串行端口接头,用于需要硬件握手稳定性的外设;看门狗定时器,实现了弹性系统可用性;内部集成电路(I2C)和脉宽调制(PWM)信号,用于与传感器和其他支持物联网的嵌入式设备接口。凭借其三年的供货能力,英特尔 NUC 套件 DE3815TYKHE 将为长时间的开发和生产周期提供支持。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-7。

Intel NUC Kit DE3815TYKHE

凭借其垂直工业设计以及对 Linux 和 Windows 嵌入式操作系统的支持,这款英特尔 NUC 被设计为推动瘦客户机市场发展的基本构建模块。这款 NUC 是一款内置闪存、USB3 支持和音频耳机支持的无风扇套件,非常适合在学校、呼叫中心和其他安装了大量 VGA 显示器的地方使用。

采用英特尔凌动处理器 E3815 的英特尔 NUC 套件 DE3815TYKHE 还提供了功耗、性能、经济性和软件兼容性的理想组合,以驱动轻型数字标牌、销售点和信息亭解决方案等应用。凭借内置的 4 GB 嵌入式多媒体卡(eMMC)存储,许多嵌入式应用将受益于更低的整体系统级 BOM 成本。通过内置的看门狗定时器,还可以为这些和其他无人值守解决方案启用高可用性弹性,从而防止停机。这款 NUC 为基于硬件的数据加密提供了独立的可信平台模块设备,是机密信息受到威胁的应用的必备设备。

面向物联网的英特尔伽利略开发套件

如图 2-8 所示,英特尔 Galileo 开发板是采用英特尔架构的 Arduino 兼容开发板新系列中的首款产品。对于新设计师和希望将设计提升到更高水平的人来说,该平台易于使用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-8。

The Intel Galileo board

英特尔 Galileo 主板是一款基于英特尔 Quark SoC X1000 应用处理器(一款 32 位英特尔奔腾品牌的 SoC)的微控制器主板。这是首款基于英特尔架构的主板,其硬件和软件引脚与 Arduino Uno R3 的屏蔽板兼容。

该平台通过支持 Microsoft Windows、Mac OS 和 Linux 主机操作系统,简化了英特尔架构的开发。它还带来了 Arduino 集成开发环境(IDE)软件的简单性。

英特尔 Galileo 主板还与 Arduino 软件开发环境软件兼容,这使得易用性和介绍变得轻而易举。除了 Arduino 硬件和软件兼容性之外,英特尔 Galileo 主板还具有多个 PC 行业标准 I/O 端口和特性,可将本机使用和功能扩展到 Arduino shield 生态系统之外。一个全尺寸 mini-PCI Express 插槽、一个 100 Mb 以太网端口、一个 Micro-SD 插槽、一个 RS-232 串行端口、一个 USB 主机端口、一个 USB 客户端端口和 8 MB NOR 闪存是主板上的标准配置。

真正的英特尔处理器和 SoC 周围的本机 I/O 功能为制造商社区和学生提供了功能齐全的产品。对于寻求简单且经济高效的开发环境来开发基于英特尔凌动处理器和英特尔酷睿处理器的复杂设计的专业开发人员来说,它也非常有用。

智能手机

随着智能手机变得无处不在,客户对顶级设备的需求增加了,设计和可用性变得越来越重要。

Lenovo K900

如图 2-9 所示,联想 K900 是首款采用英特尔凌动处理器的大屏幕智能手机。K900 是世界上首批将 5.5 英寸 IPS 显示屏与每英寸 400+像素的 1080 像素全高清分辨率性能相结合的智能手机之一,所有这些都是在最新的触摸电容大猩猩玻璃 2 下实现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-9。

Lenovo K900 smartphone

联想 K900 运行在英特尔凌动 Z2580 处理器上,这是一款双核芯片,运行频率高达 2.0 GHz,并利用英特尔超线程技术来提高性能效率。这款采用英特尔技术的设备还配备了运行 PowerVR SGX 544MP2 GPU 的英特尔图形媒体加速器引擎。联想为 K900 配备了大光圈 f1.8 镜头,使其成为第一款在其相机上提供如此大光圈的智能手机。结合其他规格,K900 现在是智能手机中数码相机的合法替代品。

Vexia 拉链手机

Vexia Zippers 手机,如图 2-10 所示,运行在 Android 4 操作系统上,由英特尔凌动处理器提供支持。它还配备了双 SIM 卡和一个 500 万像素的摄像头,因此您可以拍摄高清照片和视频。它的拉链界面使这款智能手机独一无二,你可以根据自己的生活方式进行个性化设置。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-10。

Vexia Zippers phone

中兴大 X2*

中兴大 X2 如图 2-11 所示,其先进的双核英特尔凌动处理器 Z2580 在 Android 操作系统上运行超线程技术,可提供即时性能。用户可以享受更快的网页加载速度、应用启动时间和内容下载时间,以及图形功能和快速响应的多任务处理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-11。

ZTE Grand X2 Smartphone

中兴新的旗舰智能手机还配备了一个 8 MP 社交智能相机,是市场上拍摄时间最短的相机之一,每秒可拍摄 24 帧,没有快门延迟。它通过实时 2x 轴稳定以及人脸和智能场景识别,在充满挑战的环境中确保高图像质量。

药片

平板电脑是英特尔凌动处理器的主要应用领域之一。作为一台配备平板触摸屏的完整计算机,平板电脑没有常见的键盘和鼠标输入设备,而是在触摸屏上使用手写笔、数字笔和手指输入。自 2010 年苹果发布 iPad 以来,平板电脑占据了巨大的市场份额。接下来详细介绍几款采用英特尔凌动处理器的著名平板电脑。

三星 Galaxy Tab 3 10.1

如图 2-12 所示,三星 Galaxy Tab 3 10.1 由三星在 Computex 2013 上发布,并于 2013 年 7 月在美国上市。它的屏幕为 10.1 英寸,分辨率为 1280×800。Tab 3 10.1 采用了 1.6 GHz 的英特尔凌动 Z2560 双核处理器和 1 GB RAM,并配有 16 GB 的存储空间。这款平板电脑有一个 3.2 MP 的后置摄像头和一个 1.3 MP 的前置摄像头。它还有一个 SD 卡插槽。在撰写本文时,该设备运行的是 Android 4.2.2。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-12。

Samsung Galaxy Tab 3 10.1

戴尔 Venue 7/8 英寸平板电脑

如图 2-13 所示,戴尔 Venue 7 于 2014 年初推出,采用 7 英寸屏幕,分辨率为 1280×800。它运行在英特尔凌动 Z2560 双核处理器上,主频为 1.6 GHz,包括 2 GB RAM 和 16 GB 内部存储。该设备包括一个用于可扩展存储的 SD 卡插槽,并有一个 300 万像素的后置摄像头和一个 VGA 前置摄像头。在撰写本文时,这款平板电脑运行的是 Android 4.3。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-13。

Dell Venue 7/8" Tablet

钢 Iconia A1-830*

宏碁 Iconia A1-830 拥有 7.9 英寸显示屏,分辨率为 1024×768,于 2014 年初上市。它采用英特尔凌动 Z2560 双核处理器,主频为 1.6 GHz。该设备有 1 GB 的内存和 16 GB 的内部存储空间。它包括一个用于可扩展存储的 SD 卡插槽。前置摄像头 5 MP,后置摄像头 2 MP。在撰写本文时,这款平板电脑运行的是 Android 4.4.2。

asus memo pad fhd 10 *

如图 2-14 所示,华硕 MeMO Pad FHD 10 采用最新的英特尔凌动 Z2560 处理器(1.6 GHz)、2 GB 内存、178°宽视角、1920 × 1200 全高清 IPS 显示屏和 10 点多点触控显示屏,可提供生动的视觉效果,从而改善游戏体验。华硕 MeMO Pad FHD 10 重 580 克,薄 9.5 毫米。它有一个 microSD 扩展槽。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2-14。

ASUS Memo Pad

随着英特尔和谷歌的合作,每年都有越来越多采用英特尔凌动处理器的 Android 平板电脑发布。

车载信息娱乐系统

车载信息娱乐(IVI)系统是在汽车、卡车和飞机等交通工具中提供导航、娱乐和网络计算服务的设备。尤其是汽车制造商越来越将 IVI 系统视为其产品的一个关键区别点。司机和乘客开始期望在他们的汽车上看到他们在其他设备上看到的同样类型的创新,如移动电脑和手机。宝马、英菲尼迪、日产,当然还有其他已经宣布使用英特尔凌动处理器的平台。毫无疑问,英特尔凌动处理器将在这一充满希望的领域扮演重要角色。

其他应用平台和领域

除了上述领域,英特尔凌动处理器和相应的芯片还可应用于广泛的领域、平台和设备。

云计算

在云计算模式中,内容和基础设施驻留在云(网络)中。云内容消费者只需要一个轻量级的瘦客户端浏览器设备就可以参与其中。云计算的本质是,如果基础设施成本分摊给足够多的人,更多的人可以参与并受益于云内容和服务。基于英特尔凌动处理器的设备价格相对较低,非常适合云计算客户。

由于采用英特尔凌动处理器的设备能够使用英特尔架构代码库,因此也将有助于扩大云内容消费者群体。第二代 64 位英特尔凌动 C2000 产品系列 SoC 专为微服务器和冷存储平台(代号为 Avoton)以及入门级网络平台(代号为 Rangeley)而设计。这些新 SoC 是该公司基于 Silvermont 微架构的首款产品,这是领先的 22 纳米三栅极 SoC 工艺中的新设计,可显著提高性能和能效。

英特尔还推出了英特尔以太网交换机 FM5224 芯片,该芯片与 Wind River 开放式网络软件套件相结合,为服务器带来软件定义网络(SDN)解决方案,以提高密度和降低功耗。

机器人学

机器人技术是改善生产流程、提升定制产品生产能力和确保产品质量的公认关键。机器人自动化在历史上一直非常昂贵,具有非常长期的成本效益回报和巨大的进入壁垒。幸运的是,高性能英特尔凌动处理器能够满足机器人的大部分自动化计算要求,并凭借其经济高效和低功耗特性在机器人应用领域占据领先地位。实验室测试表明,基于英特尔凌动处理器的设备在不连接的情况下电池续航时间长达 8 小时,可以轻松地为移动机器人设备供电。

威斯康辛州的 Smith Childs Farms,Inc .为机器人拖拉机配备了英特尔凌动处理器。几台这种更小、更灵活的拖拉机可以同时在一块地里工作,由坐在桌前的农民控制。他们使用 GPS 导航设备、车载传感器和一系列复杂的算法,同时对土壤进行采样,并分配所需的精确数量的种子和肥料。史密斯·查尔兹农场有限公司的老板丹尼斯·史密斯说:“在黄金种植季节,你甚至可以看到农民在夜间工作,而不用担心有没有光线,因为拖拉机上的传感器在黑暗中也能‘看’得很清楚。”

无线传感器网络

英特尔凌动处理器用于创建智能无线传感器网络,这是嵌入式系统的一个主要应用领域。

英特尔在其亚利桑那州钱德勒的工厂部署了无线传感器网络。许多电池供电的无线传感器节点监控功耗和环境参数,如温度、湿度、照明和实验室空间。大量的小型无线传感器形成了一个自配置的动态路由网络。这些传感器与智能处理和分析传感器数据的服务器路由器通信。每个服务器路由器都是一个小型无线计算平台,配有基于英特尔凌动处理器的处理器、内存、闪存、I/O 和无线电组件,可处理来自多达 40 个传感器的网络数据。

这种灵活的自我配置网络体系结构易于安装,并且成本效益高。它还可以很容易地扩展到办公楼、商业设施和工厂,或者根据楼层面积进行更改。该系统为英特尔设施经理提供了一个全新的视角,帮助他们最大限度地降低电力成本。

学问

英特尔凌动处理器和相关硬件有助于生产低功耗、经济高效且环保的迷你/微型计算设备,这些设备在发展中国家和过去服务不足的市场中被广泛采用。这些系统支持本地化和远程学习,为这些国家和地区的国民教育做出贡献。

背包新闻和便携式录像

基于英特尔凌动处理器的设备具有超长电池续航时间、充足的存储容量和便捷的互联网连接,是新一代业余和临时视频记者进行现场报道(如体育赛事、演讲和辩论比赛以及专题研讨会的在线网络直播)的理想设备。录制视频的编辑和处理不能直接在此类设备上实现,但可以通过英特尔凌动处理器出色的互联网连接轻松传输到后端台式机或服务器,从而使用分布式处理解决方案实现快速、经济的视频录制。

RFID 现场工具

射频识别(RFID)是一个很有前途的行业。这种标签用于库存控制和监管链跟踪,将在医疗保健、药品管理和交付以及运输行业发挥重要作用。RFID 标签优于传统条形码的一个优点是标签询问器可以从几十米或更远的距离读取和写入标签。迄今为止,标签询问器一直是定制设备,需要与后端库存系统进行昂贵的、特定于供应商的集成。采用英特尔凌动处理器的设备不仅能够提供手持式询问器的移动性和连接性,还能够与英特尔架构后端库存和管理系统无缝兼容,从而显著降低这些系统的拥有成本。

摘要

第一章和第二章讨论了嵌入式平台、SoC 架构和硬件平台的历史,为系统和应用开发人员提供了不同的类别。从下一章开始,本书介绍了英特尔硬件平台上的 Android 应用开发。开发 Android 系统应用需要一些特殊的开发、调试和性能分析工具。在开发 Android 应用之前,您需要了解 Android 系统应用的开发过程,这就是您开始的地方。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Open Access This chapter is licensed under the terms of the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License ( http://​creativecommons.​org/​licenses/​by-nc-nd/​4.​0/​ ), which permits any noncommercial use, sharing, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons licence and indicate if you modified the licensed material. You do not have permission under this licence to share adapted material derived from this chapter or parts of it. The images or other third party material in this chapter are included in the chapter’s Creative Commons licence, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons licence and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder. Footnotes 1

请访问 ark 查看处理器规格查找器。英特尔。如欲了解更多信息,请联系您的英特尔代表。

三、面向英特尔架构的 Android 应用开发流程和工具链

Keywords Tool Chain Android Application Integrate Development Environment Host Machine Target Machine

本章介绍英特尔硬件平台上的 Android 应用开发。开发 Android 系统应用需要一些专门的开发、调试、性能分析工具,开发环境和对象格式也不同于通用桌面电脑。在开发 Android 应用之前,我们需要了解 Android 系统应用的开发流程。

Android 为应用开发提供了一整套工具链(工具集)。Android 操作系统的早期版本支持 ARM 硬件平台,并从 Android 2.3(姜饼)开始支持英特尔凌动硬件平台。为了支持基于英特尔凌动架构的应用开发,英特尔添加了重要的插件、库和其他辅助模块,以便与 Android 工具链协同工作。此外,为了帮助开发人员获得英特尔硬件的性能优势,英特尔提供了编译器和英特尔?? 图形性能分析器等开发工具。

本章描述了在英特尔凌动平台上开发 Android 应用的一般流程和方法。使用特殊的英特尔工具实现优化性能和低能耗的方法将在后续章节中介绍。

Android 应用开发

以下部分描述了 Android 系统的开发环境、开发过程、调试和模拟。

Android 应用的开发环境

正如我们前面提到的,通用计算机的软件开发总是通过本机编译或开发来实现的。一般来说,嵌入式系统与本地开发环境不兼容,因此软件开发通常采用交叉开发。

交叉发展

典型的交叉开发配置如图 3-1 所示。交叉开发环境建立在开发机器或主机上。通常主机是一台通用计算机,如 PC。相应的嵌入式系统称为目标机。目标机器可以是多种嵌入式设备中的任何一种,比如手机、平板电脑等等。它们也可能是嵌入式系统制造商提供的专用评估板或基于软件的开发仿真器。在开发期间,使用主机上的交叉编译、汇编和链接工具来产生可在目标机器上执行的二进制代码;然后,可执行文件被下载并在目标机器上运行。交叉开发方法不仅是编译所需要的,也是调试所需要的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-1。

Cross-development configuration of embedded systems

嵌入式系统采用交叉开发的主要原因是本地编译通常不能在目标机器上有效地完成。首先,在开发过程中,目标机器的硬件经常不可用或不稳定。第二,目标机器平台上缺乏完整的原生编译工具。第三,目标机性能不足,导致编译缓慢。嵌入式系统上的软件编译比桌面计算机上的更耗时,因为它不仅需要编译应用,还需要编译库依赖项和 OS 内核。例如,在基于英特尔奔腾 4 处理器的电脑上编译 Linux 内核需要 10 多分钟。决定编译速度的主要硬件因素包括 CPU 速度、内存容量和文件系统 I/O 速度。在这些因素上,嵌入式系统的表现通常不如个人电脑。这导致目标机器上本机编译的低效率。嵌入式系统通常采用交叉开发方法,如交叉编译(包括交叉链接)和交叉调试。

由于主机和目标机在配置、功能、系统结构和操作环境方面的差异,它们通常通过串行端口、并行端口、USB 或以太网连接电缆进行连接。包括编码器、编译器、连接器、调试工具和软件配置管理工具的工具集安装在主机上。

通常,主机和目标机在以下方面有所不同:

  • 不同的结构:通常,主机是 Intel 架构的系统,而目标机可能是 Intel 或非 Intel 架构的系统结构,如 ARM 或 MIPS。
  • 处理能力不同:通常情况下,主机的处理速度和存储能力都优于目标机。
  • 不同的操作系统:通常,通用操作系统运行在主机上,而 Android 操作系统运行在目标机上。
  • 输出方式不同:与主机相比,目标机的输入输出功能能力较差。

对于某些 Android 系统来说,这些特征可能不存在或者微不足道。以英特尔凌动系统的开发为例。主机和目标机使用相同的系统英特尔架构结构。当然,指令集可能有所不同。例如,主机(如英特尔酷睿2 双核处理器)可能兼容 SSE4,而英特尔凌动处理器仅支持 SSE3。我们应该在编译时考虑目标机器的指令集。考虑到大多数英特尔凌动系统的资源有限,我们推荐交叉开发方法。

编程语言

在过去的四十年中,已经为通用计算机应用开发了几十种编程语言。从 FORTRAN、C/C++、ADA 和 Java 到 C#NET。许多因素决定了编程语言的适用性。各有各的特点,综合比较是不可能的。每种语言的性能取决于执行环境。考虑到多重因素和实际开发状况,Android 系统常用的语言有 C/C++、Java、Python 等,偶尔会用到汇编语言。编程一个复杂的 Android 系统需要多种语言的结合。常用编程语言如表 3-1 所示。

表 3-1。

Commonly Selected Programming Languages

| 水平 | 常见编程语言 | | --- | --- | | 应用软件 | C/C++,Java,。网络,脚本,Python | | 普通程度 | C/C++,汇编 | | 驱动程序级别 | C/C++,汇编 | | 引导代码,硬件抽象层(HAL) | 汇编,C/C++ |

由 Sun Microsystems 于 1995 年 5 月推出的 Java 是一种跨平台的面向对象编程语言,包括 Java 编程语言和 Java 平台(JavaSe、JavaEE、JavaME)。Java 的风格与 C 和 C++ 非常相似。它是一种纯面向对象的编程语言,继承了面向对象 C++ 的核心内容,摒弃了 C++ 语言中的指针(被引用代替)、运算符重载、多重继承(被接口代替)等导致错误频发的问题。添加的垃圾收集器用于收集未被引用的对象占用的内存,因此程序员不需要担心内存管理。在 Java 1.5 版本中,Sun 增加了其他语言特性,如泛型编程、类型安全枚举类、可变长度扩充和自动装箱/自动取消装箱。

Java 不同于普通的编译和执行计算机语言,因为它是一种解释性的计算机语言。Java 编译器产生的是二进制字节码而不是机器码,可以直接在本地执行。编译后的 Java 程序通过 Java 虚拟机(JVM)被解释成可直接执行的机器代码。JVM 可以解释不同平台上的执行字节码,以实现“一次编译所有执行”的跨平台特性但是解释字节码需要一定的时间,这在一定程度上会降低 Java 程序的运行效率。为了减轻这一负担,谷歌在 2014 年推出了 Android Run Time (ART)作为 Dalvik 版本 2,该版本首次在 KitKat (Android 4.4)中作为预览功能提供。未来的 64 位 Android 将基于 ART。总的来说,Java 是简单的、面向对象的、分布式的、解释性的和健壮的。它是一种可移植的、高性能的、多线程的和动态的编程语言。考虑到 Java 的各种优势,它是 Android 应用开发的首选。

选择了一种语言,你不一定要使用它的所有功能。虽然我们选择了 Java 作为 Android 的开发工具,但是 Android 系统的开发过程不同于传统的(桌面)Java SDK。Android SDK 使用了 Java SDK 的大部分,但放弃了一些部分。比如接口,java.awt 包只有 java.awt.font 引用,如果一个 java 游戏迁移到 Android 平台,可能需要移植。

我们提到过 Java 是一种跨平台的解释性计算机语言。这一特性使高迁移能力不受平台限制,但它也有一些缺点,其中之一是开发人员不能使用与平台或架构相关的特性或潜力。但这可以通过编译 C/C++ 和汇编语言,由机器相关的目标代码来实现。这在性能优化期间更加明显。为了使用机器硬件的特性并挖掘其性能潜力,我们通常需要使用 C/C++ 和汇编语言来编写优化的应用。虽然这类代码在所有代码中所占比例很小,但编程复杂度却远高于 Java。因此,这种代码只在极少数情况下使用。我们会看到 Android 应用开发采用了以改进的 Java 为主,C 和汇编语言为支撑的混合编程模式。

我们将分两部分讨论这种编程方法。对于开发 Android 应用的一般功能,我们将使用 Java。但是为了优化性能,我们将使用混合语言编程方法。

Android 应用开发流程

一般来说,开发 Android 软件需要和通用软件一样的步骤:设计、编码、编译、链接、打包、部署、调试、优化。对于某些 Android 系统,还需要测试和验证步骤。就过程而言,它可以分为五个阶段:编码、构建、部署、调试和调优。典型的开发过程如图 3-2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-2。

Development process for Android software

编码

编码是软件开发过程的第一步。可以使用各种编辑器编写软件源代码。Android 开发期间,这项工作主要是编辑。java 代码和。xml 源文件。

建筑

构建阶段的任务是将代码转换成 Android 硬件上的可执行程序。该阶段包括编译、链接和打包等子步骤,如图 3-3 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-3。

Software construction stage

构建的第一步是构建,这意味着将所有源代码文件翻译成目标文件。一些目标文件是与机器相关的,例如对应于机器的执行指令的 C/C++ 目标文件。但是有些不是特定于机器的,例如 Java 目标源代码不是机器可执行的指令。在 Android 应用开发期间,这些文件通常带有后缀。班级。在安卓系统上,。类被翻译成。德克斯文件。

第二步是包装。打包的目的是将所有目标文件和附属文件合并并安装到目标计算机上的一个文件夹中。至于安卓,。dex 文件和资源文件都打包到一个。可以存储在目标计算机外部的 apk 文件。包装操作通常用特殊的包装工具来完成。

部署

部署是软件开发的最后一个阶段,是从主机上复制安装包、解压缩并安装到 Android 设备的内存中。

Android 采用了基于 USB 线缆的 ISP 部署。如图 3-4 所示,主机通过 USB 线连接到目标机。Android 操作系统在目标机器上运行,而 Windows 或 Linux 操作系统在主机上运行。生成的文件包(。apk)被复制到目标机器中文件系统的一个目录中,然后被解压缩和安装以完成部署。这个过程可以使用命令行终端或 Eclipse 中的 DDMS 来完成。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-4。

Android application deployment

在联机编程模式下,主机和目标机之间的文件复制方向是不同的。并且不同的术语用于文件复制。比如下载/上传在 Android 里叫做 push/pull。Push 表示将文件从主机复制到目标机,pull 表示将文件从目标机复制到主机。

调试和优化阶段

这个阶段主要是对软件进行调试和优化操作。

即使是最有经验的软件工程师也不能完全避免程序中的错误。掌握调试技术对于软件开发至关重要。调试 Android 软件代码的效率不是很高,因为即使你只需要更改一行代码,你仍然需要经历所有的构建、打包和部署过程。PC 用户可能会接受每天一次的崩溃。但试想一下,如果 ATM、医疗操作系统或卫星上的最终 Android 系统产品存在 bug,后果会有多严重。

后续章节中讨论了很多 Android 软件的调试技术和技巧。许多方法在通用计算机软件中很少使用。

软件产品的最低目标是保证其正常运行。但这个目标对 Android 软件来说还不够好,Android 软件资源有限,对空间和性能的要求比桌面系统更严格。为了满足这些要求,Android 软件必须以性能优化的方式确保正常运行。这些目标可能是矛盾的,开发者很难实现所有的目标。因此,他们做出妥协,通常强调性能要求。

提高应用的性能是一个耗时的过程。哪些函数消耗了大部分执行时间通常并不明显。因此,我们需要使用专门的工具来分析代码,以准确理解性能瓶颈,并向我们提出改进建议。这个过程通常称为代码剖析,所使用的工具称为剖析器或性能分析器。

使用分析器来提高性能的原则是优化软件中经常被调用的部分。例如,如果 50%的时间花在字符串函数上,我们将这些函数优化 10 %,那么我们可以将软件的执行时间减少大约 5%。通过使用概要分析器,您可以准确地测量执行过程中花费的不同时间部分,以了解哪些区域可以优化。一些评测器可以针对特定类型的处理器提出改进建议。例如,英特尔Vtune放大器识别代码中的热点,可以进一步优化以提高整体性能。

Android 系统的调试和仿真

调试 Android 软件有一些特殊的挑战,因此开发了一些方法和设备来帮助开发人员完成调试过程。最常见的调试方法包括以下各节中描述的方法。

系统模拟器

早期的系统模拟器是用指令集模拟器实现的,即使用软件模拟系统架构的技术。换句话说,软件是用来解释机器代码来模拟某个处理器的。现代系统模拟器包括除 CPU 模拟之外的模拟外设。模拟外设用于实现系统仿真结果。有些书称模拟器为虚拟机或模拟器。

指令集仿真包括同构仿真和异构仿真。同构模拟意味着使用一个处理器上的软件来模拟具有相同架构的虚拟机。目前,常见的微软虚拟 PC 或 VMware 模拟基于英特尔架构的处理器的执行,使其成为一种同构模拟。异构仿真意味着在一个处理器上仿真另一个处理器的执行。大多数指令集仿真器都是异构仿真类型。例如,设备仿真器在英特尔架构处理器上模拟 ARM 处理器的执行。一些常见的系统模拟器如表 3-2 所示。

表 3-2。

Common System Simulators

| 模拟器的名称 | 模拟目标平台 | 评论 | | --- | --- | --- | | 微软虚拟个人电脑/虚拟服务器 | 英特尔架构 |   | | 虚拟机 | 英特尔架构 | 兼容 Windows、Mac 和 Linux | | 博奇斯 | 英特尔架构 | 开源项目 | | 设备仿真器 | 手臂ˌ武器ˌ袖子ˌ装备 | SMDK2410 开发板的仿真 | | 天空之眼 | 手臂ˌ武器ˌ袖子ˌ装备 | 中国制造 | | VirtualBox Advance | 手臂ˌ武器ˌ袖子ˌ装备 | 模拟任天堂 GBA 游戏玩家 | | Oracle VM Virtualbox | X86 和 AMD64/Intel64 虚拟化 | GPL 许可,并可免费获得 |

在 Android 系统上调试程序时,主机(通常是 PC)运行系统模拟器,目标机的软件在系统模拟器中运行,因此不需要额外的硬件。主机和目标机在同一台机器上实现,被称为“一机两用”。还记得之前提到的交叉开发环境吗?我们说目标机器不一定是真实的设备,因为它可能是基于软件的模拟器。在交叉开发过程中,模拟器取代了实际的目标机器。仿真器不仅节省了硬件开销,而且使调试更加方便。

Android 开发工具捆绑了 Android 虚拟设备,这是一个用于创建 ARM 和 x86 模拟器的管理器。仿真器模仿目标设备的硬件和软件配置。图 3-5 显示了一个在 Windows 中运行的 AVD 的截图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-5。

AVD (Android Virtual Device) interface

安卓模拟器也叫金鱼。每个 AVD 模拟一组运行 Android 平台的移动设备,包括内核、系统映像、数据分区以及 SD 卡、用户数据和显示器。Android 模拟器基于 Qemu,这是一个流行的开源虚拟化项目。Android 模拟器的源代码在 external/qemu 目录下。

AVD 模拟目标机器的常见组件,如 CPU、屏幕、键盘、音频输出、摄像头,以及 GPS、触摸和重力加速度等传感器。例如,采用英特尔架构的 avd 包括对应于每个 API 级别的英特尔 x86 系统映像。当然,与真实设备相比,AVD 有某些缺点,包括:

  • 无法拨打或接听实际电话;但是它可以通过控制台模拟电话呼叫(拨入和拨出)
  • 无 USB 连接
  • 无法捕捉数码照片或视频
  • 无法捕捉音频输入,但支持输出(重放)
  • 缺少对扩展耳机的支持
  • 无法确定电池电量或交流电源的充电状态
  • 无法确定是否插入或取出了 SD 卡
  • 不支持蓝牙

此外,AVD 可以模拟主机和目标机之间的 USB 和网络连接。AVD 使用主机作为默认网关和 NAT(地址转换器)来连接网络。换句话说,如果您可以在主机上访问互联网,那么您也可以在模拟 AVD 的目标机上访问互联网。

其他调试工具

Android 系统除了系统模拟器还有其他调试工具。虽然这些工具在 Android 中没有用到,但是你应该对它们有一个基本的了解,才能有一个完整的了解。

交叉调试

当操作系统支持交叉调试 Android 应用时,您应该尝试使用这种方法。交叉调试类似于交叉编译:被调试的程序在目标机器上运行,而调试的显示、监视和控制在主机上完成。

交叉调试只能在联机模式下执行。主机需要通过 USB 电缆、网络或 JTAG-ICE 连接到目标机。调试服务器通常运行在目标机器上,在 GNU 工具链中被称为存根。在主机上运行调试过程的前端实际上是客户端。前端与向调试服务器发出请求的开发人员进行交互。调试服务器接收前端的命令,控制应用的执行,并将结果发送到前端显示,如图 3-6 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-6。

Software environment for cross-debugging

例如,如果您在前端设置一个断点来观察变量的值,调试服务器将接收断点设置请求,并在程序的相应位置插入一个中断。当应用到达断点时,调试服务器接管控制权,挂起应用,并将相应变量的值发送回前端,然后前端显示该值。

许多开发工具支持交叉调试,例如 GNU 调试器。Android Debug Bridge (adb)是一个常用的调试工具,也支持交叉调试。adb 调试器基于客户机/服务器模型。它的工作原理是本地工作平台充当调试客户端,而安装远程应用的机器充当调试服务器的角色。使用 adb 时,远程应用(在目标机器上)的调试过程可能与本地调试不同。Adb 管理设备,模拟状态,并执行以下操作:

  • 设备和仿真器中的快速代码更新,如应用或 Android 系统更新
  • 在设备上运行 shell 命令
  • 管理设备或仿真器的预定端口
  • 在设备或模拟器上复制或粘贴文件

亚行的一些常见业务包括:

命令行

这个命令允许您进入设备或仿真器的 Linux shell 环境,在这里您可以执行许多 Linux 命令。如果只想执行一个 shell 命令,可以输入:

亚行 shell[命令]

对于[command],输入您想要执行的特定命令,例如:adb shell dmesg,它输出内核的调试信息。注意:Android adb 的 Linux shell 已经被简化,所以它与许多常见的 Linux 命令不兼容。我们将在接下来的章节中讨论命令行。

Adb 可以命令行形式独立运行,也可以作为插件集成到您喜欢的 IDE(集成开发环境)中,如 Eclipse。图 3-7 是在 Eclipse 中调试一个 Android 应用的截图。Adb 提供了许多常见的调试工具,如断点设置、观察变量、单步执行和检查调试输出。调试过程与本地应用的调试过程相同。许多开发人员甚至不知道应用是在目标机器上运行还是在主机上运行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-7。

Android application debugging in Eclipse

在接下来的部分中,我们将展示使用 adb 命令和 Eclipse 调试的例子。

典型的开发工具链

Android 软件开发的各个阶段都有相应的工具来帮助开发者完成任务。开发工具组被称为工具链或工具集。表 3-3 中列出了典型的工具链。

表 3-3。

Typical Tool Chains for Android Software Development

| 发展阶段 | 功能描述 | 典型例子 | | --- | --- | --- | | 编辑 | 编写和编辑源代码 | vi、Emacs、Windows 记事本 | | 编译和链接 | 将源程序编译和链接成可执行的二进制文件 | gcc、icc(英特尔编译器) | | 遮雨板 | 将可执行的二进制程序刻录到 Android 系统的 ROM 或闪存中,以确保系统自动启动 | J-fFlash,Sjflash | | 排除故障 | 项目运行状态的动态跟踪;检查程序的执行并识别程序错误背后的原因 | Gdb、adb、内核调试器 | | 最佳化 | 分析程序性能,帮助开发人员创建占用空间少、速度更快、效率更高的程序 | gprof、英特尔 vtune〔??〕??〕放大器 | | 测试 | 帮助测试人员识别程序中的错误,降低人力资源成本 | 这是什么 | | 核查 | 验证程序的逻辑正确性和常见错误,尤其是在恶劣的测试和调试环境下 | 应用验证程序 | | 模拟/仿真 | 模拟和仿真 Android 硬件的运行环境,帮助开发者开发和调试 | Qemu、VirtualBox 和 VMware Player |

许多工具集是可用的,由不同的公司和组织提供,每个工具集都有自己的特点。Icc、Vtune 放大器和 idb 由 Intel 提供,而 gcc、gdb 和 gproof 由自由软件组织 GNU 提供;而 CETK、应用验证器、设备仿真器都是微软提供的。其中一些工具是免费的,比如 GNU 工具集。其他工具,如微软工具集,必须购买。这些工具运行在不同的平台上。例如,Jflash 运行在 Linux 平台上,而大多数微软工具都基于 Windows(包括桌面 Windows OS 和 Android OS-Windows CE/Mobile)。而且有的甚至是跨平台工具;例如,GNU 工具集可以在多个平台上运行,比如 Linux、Windows 和 Mac 操作系统。

这些工具集的使用方式分为两类:一类是命令行,另一类是集成开发环境(IDE)。命令行工具集由命令行中输入的单个命令执行。在 ide 的情况下,所有的功能都集成到一个工具中,包括编辑、编译、链接、部署和调试,因此整个开发过程可以在一个应用中执行。大多数 GNU 工具运行在命令行上。可能使用最广泛的 IDE 是 Microsoft Visual Studio。Anjuta DevStudio 是一个基于 Linux 的 IDE。Android 开发工具 Eclipse 是一个可以在包括 Windows 和 Linux 在内的多种操作系统上运行的 IDE。在本书中,我们将使用 Windows 版本。

GNU 工具集可以在多种平台上运行;它们的开放性、使用范围大、与其他工具的兼容性,使其成为 Android 应用开发的普遍选择。

Tip

GNU、GPL 和 LGPL GNU 是迄今为止最大、最著名和最有影响力的自由软件组织。它是由理查德·斯托尔曼在 1985 年创建的,他创立了自由软件基金会(FSF)来脱离商业软件。在使用 GNU 软件之前,您必须遵守 GNU 软件许可证。

GPL 是 GNU 通用公共许可证的缩写,是 GNU 软件许可证的一种。GPL 允许公众享受运行、复制和共享软件的自由,获得源代码,改进软件并与公众共享。GPL 还规定,只要被改动内容的一部分或全部来自 GPL 编译的程序,那么被改动软件的共享就必须符合 GPL 的要求,这意味着你需要发布被改动的源代码,并且不得对改进软件的共享增加限制。GPL 是开发和发布 Linux 操作系统和相关软件的催化剂。

LGPL,意思是宽松的 GPL,也是 GNU 软件许可证之一。它是 GPL 的变体。不同的是,用户在 LGPL 授权的自由软件上享受私人使用。开发的新软件可以是专有的,而不是免费的。在使用自由软件之前,用户必须获得 LGPL 或 GPL 的其他变体。LGPL 最初用于一些 GNU 程序库(软件库)。所以它被称为库 GPL。Mozilla 和 OpenOffice.org 是 LGPL 时代开发的软件的例子。

GNU 开发工具是免费的。任何同意 GPL 许可的人都可以下载它们。GNU 还为 Android 系统和英特尔架构系统上的软件开发提供了完整的工具链。这些工具包括编译器、汇编器、链接器和调试工具。它们可以独立于命令行运行,也可以集成到 Eclipse 之类的 IDE 中。GNU 工具链在表 3-4 中列出。

表 3-4。

GNU Tool Chains

| 功能 | 成分 | 描述 | | --- | --- | --- | | 编辑 | 六、Emacs、ed | 用于编辑源代码的文本编辑器 | | 编译和链接 | (同 groundcontrolcenter)地面控制中心 | 一套多编程语言编译器 | | 排除故障 | 基因组数据库 | 调试器 | | 最佳化 | 证明 | 用于分析程序性能并帮助开发人员创建运行速度更快的程序的优化工具 | | 项目管理 | 制造 | 软件编译自动化管理工具 | | 制度建立 | 汽车工具 | 构建项目所需的所有材料和文件 |

下面将进一步解释这些组件。

编者ˌ编辑

任何文本编辑工具都可以用来编写和编辑源代码。Linux 平台有两类编辑器:一类包括 ed、ex 等行编辑器;另一个包括全屏编辑器,如 vi、Emacs 和 gedit。行编辑器只能对一行进行操作,而全屏编辑器可以编辑整个屏幕的代码,编辑后的文件被显示出来,从而克服了行编辑的缺点,使用起来更加方便。全屏编辑器比行编辑器具有更大的功能集。

在 IDE 中,编辑器被集成到工具中,不需要单独用来编写源代码。

编译器和链接器

编辑过程包括语法、语义和词汇分析、中间代码的生成和优化、符号表管理和错误管理。GNU 编辑器是 gcc。Gcc 被认为是 Linux 的标准编译器。

Gcc 最初是 GNU 的 C 语言编辑器。现在它支持 C、C++、Object-C、FORTRAN、Java 和 ADA。在某种程度上,gcc 是所有 GNU 编辑器的组合。Gcc 编译源代码并完成链接过程。用户可以选择命令参数来编译、链接和生成可执行文件。

英特尔编译器还优化了代码路径,以提高英特尔平台上的应用性能。英特尔编译器与英特尔提供的名为英特尔集成本地开发人员体验的工具捆绑在一起。

调试器

调试器使程序员更容易调试程序。但它不一定是代码执行所需的工具。在编译过程中,花在调试上的时间比花在编码上的时间多。因此,易于使用的全功能调试器是必要的。

GNU 调试器是 gdb(GNU 调试器的缩写)。它也是开源代码,是一个基于命令行的调试器。所有调试命令都是通过控制站的命令实现的。

构建管理器

GNU 提供了一个名为 make 的构建管理器,这是一个控制多个软件文件编译的工具。它类似于 Windows 中的 Visual c+++ 项目。此外,它可以自动管理软件编译的内容、方法和时间,以帮助程序员专注于编码,而不是组织编译序列。

Make 可以根据开发者定义的 makefile 调用 gcc 将源代码编译链接成目标机器的可执行文件。

Makefile 自动生成工具

Makefile 可以帮助 make 执行目标文件生成任务。但是对 makefile 进行编码并不是一件容易的事情,尤其是对于大型项目。GNU 提供了一系列自动工具来制作 makefiles。这种工具知道系统配置问题,以帮助开发人员处理迁移问题。自动工具包括 aclocal、autoscan、autoconf、autoheader、automake 和 libtool。

从源代码生成目标文件有几种方法,如图 3-8 所示。

  • 方法 1:使用 gcc(或英特尔编译器 ICC)编译链接所有源代码文件,生成可执行的目标文件
  • 方法 2:使用 IDE(比如 Eclipse)编译 makefile 和其他配置文件,然后使用 make 生成可执行的目标文件
  • 方法三:使用系统构建工具——autotools 制作 makefile 等配置,然后使用 make 生成可执行的目标文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-8。

Methods for generating target files using GNU tool chain

优化工具- gprof

为了帮助开发者优化他们的程序,GNU 提供了一个性能分析器 gproof,GNU binutils 工具之一。

Gproof 可以测量程序的性能,并记录每个函数的调用次数和相应的执行时间,以便优化工作可以集中在最耗时的部分。此外,gproof 还可以在程序执行过程中生成函数调用关系,包括调用次数,帮助程序员分析程序是如何执行的。通过依赖函数调用关系,开发人员不需要经历程序执行的所有细节,提高了他们的工作效率。而且这个功能对于维护旧代码或者分析开源项目也很有帮助。通过调用图,你可以对程序的运行框架和“骨架”有一个基本的了解。那么分析它们就不那么困难了,尤其是对于你可能不熟悉的代码和开源项目。

英特尔架构上 Android 应用开发工具链的概述、安装和配置

Android 为应用开发提供了一整套工具链(或工具集)。最初,Android 只能在 ARM 架构的硬件平台上运行。但是现在,为了在英特尔凌动硬件平台上支持 Android 工具链,英特尔增加了重要的插件、库和其他辅助组件。此外,为了更好地发挥英特尔硬件的性能优势,英特尔增加了编译器和优化器等特殊的开发工具。

本章介绍了在英特尔凌动平台上开发 Android 应用的一般流程和方法。在接下来的章节中,我们将讨论使用特殊英特尔工具实现优化性能和低能耗的方法。

Android 和 GNU 开发工具链以及 Android 交叉开发阶段对应的功能如表 3-5 所示。

表 3-5。

Comparison between GNU and Android Tool Chains

| 交叉发展阶段 | GNU 工具链 | 面向英特尔架构的 Android 开发工具链 | 评论 | | --- | --- | --- | --- | | 编辑 | 六、Emacs、ed | Eclipse,Android SDK | Android 开发工具和英特尔相关插件 | | 编译和链接 | (同 groundcontrolcenter)地面控制中心 | | 项目管理 | 制造 | | 自动生成工具-makefile | 汽车工具 | | 部署 | \ | | 排除故障 | 基因组数据库 | | 模拟/仿真 | \ | Android 虚拟设备(AVD) | | 最佳化 | gprof(全球定位系统) | Vtune 分析器 | 英特尔系列工具 |

除了上面展示的与 GNU 工具的区别,英特尔还提供了一些特殊的性能库,包括英特尔集成性能原语(英特尔 IPP)、英特尔数学内核(英特尔 MKL)、英特尔线程构建模块(英特尔 TBB)。一些函数库已经提供了特殊的服务,例如英特尔 TBB 中基于 C++ 模板的线程服务 API。其中一些使用英特尔架构指令潜力来实现优化的性能,例如英特尔 IPP 中的快速傅立叶变换(FFT)。一些库仍然没有直接的 Java 接口。我们将在随后的章节中讨论它们。

表 3-5 显示,面向英特尔架构的 Android 开发工具链基本包括两部分:一部分是 Android 开发工具。这里的英特尔工具包括英特尔架构仿真器、开发库和其它插件。另一部分是独立的英特尔工具。Android 开发工具支持应用开发的大多数步骤,如编辑、构建、打包、部署和调试,而英特尔工具主要涉及优化。

Android 开发工具是指由 JDK (Java SE 开发工具包)、Android SDK(软件开发工具包)和 IDE(集成开发环境)——Eclipse 组成的软件环境。Android 开发工具可以在 Linux、OS X 和 Windows 系统上运行。在本书中,我们将讨论 Windows 场景。

Android 开发工具可以在命令行格式或 IDE 中运行。Android SDK 中 Android 命令行工具的一般开发流程如图 3-9 所示。Eclipse 是一个图形用户界面工具,通常是用于 IDE 模式的工具,集成了编辑、编译、链接、部署和调试功能。我们将讨论基于 IDE 的方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-9。

Development process of the Android SDK command line

Android SDK 的目录结构如下所示。它可以通过从命令行运行 tree 命令来获得。

■插件

★★★★★★★★★★★★★★★★★★★★★★★

─医生

◆关于

■素材

──设计

■发展

■分配

■指南

■图象

◆θ∑intl

■活

■退出

──参考文献

■资源

■样品

├─sdk

──可分享

■工具

──训练

ο额外

├─android

──谷歌

─平台工具

──蜜蜂

├─lib

──渲染脚本

─平台

★★★★★★★Android-16

■样品

★★★★★★★Android-16

ο来源

★★★★★★★Android-16

ο系统映像

★★★★★★★Android-16

ο临时

ε工具

├─ant

ο应用

■喷气式飞机

├─lib

■progresp

ο支持

├─systrace

ε模板

您应该注意的主要文件是:

  • 附加组件:由 Google 提供的 API 包,比如 Google Maps APIs
  • 文档:帮助和说明文档
  • 平台:每个 SDK 版本的 API 包和一些示例文件
  • 工具:一些通用工具文件
  • usb_driver: AMD64 和英特尔架构驱动程序文件

主要文件及其功能描述如下。

安卓. jar

这个文件位于%android-sdk%\platforms目录下,每个版本的 Android 都有一个 android.jar。jar 文件你可以了解内部 API 包的结构和组织。这里的字符串%android-sdk%是 Android SDK 的安装目录,16 版对应的目录是android-16。例如,作者的 android.jar 位于:

C:\Documents and Settings>dir D:\Android\

......

2012-07-08 20:02 18,325,478 android.jar

android.jar 是一个标准的 zip 包,包含编译后的压缩文件和所有 API。您可以使用 WinRAR 或其他归档工具来查看其内部结构,如图 3-10 所示。它的 API 包又进一步分为 app、内容、数据库等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-10。

Content structure of android.jar

ddms.bat

图 3- 11 所示的调试监控服务 ddms.bat 集成在 dal vik(Android 平台的虚拟设备)中,用于管理仿真器或设备的进程,辅助调试工作。它可以消除一些进程,选择某个程序进行调试,生成后续数据,检查线程数据,或者拍摄仿真器或设备的快照。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-11。

The debugging monitor service ddms.bat

adb.exe

Android Debug Bridge (adb)是一个多用途工具,可以帮助你管理设备或仿真器的状态。如前所述,该文件位于%android-sdk%\platform-tools下。例如,作者的 adb.exe 位于C:\android\adt-bundle-windows-x86_64-20131030\sdk\platform-tools目录中,如图 3-12 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-12。

File location of the adb.exe tool

aapt.exe

使用 Android 资源打包工具(aapt.exe),您可以创建。包含 Android 应用的二进制文件和资源文件的 apk 文件。文件位置与 adb.exe 相同。

aidl.exe

Android 接口描述语言(aidl.exe)用于生成进程间接口代码。文件位置与 adb.exe 相同。

sqlite3.exe

Android 可以创建和使用 SQLite3 数据库文件。开发人员和用户可以很容易地访问这样的 SQLite 数据文件。文件位置与 ddms.bat 相同。

dx.bat(消歧义)

将类字节码重写为 Android 字节码(保存在一个 dex 文件中)。文件位置与 adb.exe 相同。

安卓. bat

android.bat 文件与 ddms.bat 在同一个目录下,该命令用于显示和创建 AVD。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-13。

The command shows that two target machine development libraries are installed on the machine

Android 的英特尔环境设置(OS X 主机)

Android (OS X 主机)环境设置将常见的英特尔和第三方工具集成到您的首选 IDE 中,用于面向生产力的设计、编码和调试。支持的 ide 包括 Eclipse 和 Android Studio。该测试版以前称为 Beacon Mountain 测试版,将成为面向 OS X 主机的英特尔集成本地开发人员体验(英特尔 INDE)的一部分,可在 https://software.intel.com/en-us/inde/environment-setup-osx 下载。表 3-6 列出了 Android (OS-X 主机)环境设置中包含的内容。

表 3-6。

Environment Setup for Android (OS-X Host)

| 产品安装 | Android Studio beta 英特尔集成本地开发人员体验(英特尔 INDE)Android Studio 本地项目模板 Android SDK Android NDK 英特尔硬件加速执行管理器(英特尔HAXM)Apache Ant 英特尔Eclipse INDE 插件 | | 5 月 | Eclipse Android Studio 测试版 | | 主机支持 | OS X | | 目标支持 | Android* 4.3 及以上版本(基于 ARM 和英特尔架构) |

基于 Linux 的主机上的 Android 开发

以下适用于基于 Linux 的主机的 Android 开发工具可从以下网站下载:

英特尔集成本地开发人员体验测试版

英特尔集成本地开发人员体验(英特尔 INDE)是英特尔跨平台开发套件的测试版,旨在快速轻松地创建面向 Android 和 Windows 设备的应用,具有本地性能、出色的电池续航时间和独特的平台功能。INDE 为基于英特尔架构的设备上的环境设置、代码创建、编译、调试和分析以及基于 ARM 的 Android 设备上的选择功能提供了一套完整、一致的 C++/Java 工具、库和样本。

作为一个原生的跨平台开发套件,英特尔 INDE 包括 Android 和 Microsoft Windows 的 C++/Java 原生工具和样本,将工具集成到流行的 ide 中,并自动更新到最新的工具和技术。

工具和库

媒体:轻松添加视觉上引人注目的原生视频和音频扩展,可在最新流行的 Android 手机和平板电脑上工作。面向 Android 的英特尔 INDE 媒体包提供了源代码和示例,可通过以下方式增强应用:

  • 摄像头和屏幕截图
  • 视频编辑
  • 视频流
  • 音频指纹识别
  • 支持运行 4.3 及以上版本的英特尔架构和基于 ARM 的 Android 设备。

线程化:使用英特尔线程构建模块(TBB),高效实施更高级别的基于任务的并行处理。TBB 是一个屡获殊荣的 C++ 模板库,用于开发更高性能、可扩展的应用。使用并行工具创建的应用可以在基于英特尔架构和 ARM 处理器的 Android 4.3 和更高版本设备以及 Microsoft Windows 7–8.1 客户端上运行。

编译:借助面向 Android 的英特尔 C++ 编译器,以性能为导向进行编译,为您的 Android 应用带来行业领先的性能。该编译器与 GCC 源代码兼容,易于使用。GNU C++ 编译器也通过 Android NDK 提供,它是英特尔 INDE 环境设置组件中的一个定制选项。使用英特尔 C++ 编译器创建的应用可以在运行 Android 4.3 及更高版本的基于英特尔架构的设备上运行。

计算代码构建器:利用可编程图形最大限度地提高性能-使用计算代码构建器开发可在 CPU 之外的计算设备上执行的代码。该工具有助于创建、编译、调试和分析 Google Renderscript 和 OpenCL 等计算 API。compute code builder 可以以独立模式使用,也可以与 Microsoft Visual Studio 或 Eclipse 集成使用。创建的应用可以在基于英特尔架构的 Android 4.4 设备以及 Microsoft Windows 7–8.1 客户端上运行。如欲了解更多信息,请访问英特尔的入门指南。

  • 分析和调试:使用分析和优化工具套件包括英特尔图形性能分析器(英特尔 GPA)系统分析器、英特尔 GPA 平台分析器、英特尔 GPA 帧分析器和英特尔帧调试器。您可以使用它们来执行以下操作:
  • 对代码执行、CPU/GPU 使用和任务数据等进行实时跟踪分析
  • 帧捕获分析和调试
  • 平台范围和应用特定的 GPU 指标分析和图形管道覆盖

使用分析和调试工具创建的应用可以在运行 Microsoft Windows 7–8.1 或 Android 4.4 的基于英特尔架构的设备上运行。

设置

为英特尔 INDE 设置环境非常简单。您可以在几分钟而不是几小时内构建您的自定义环境:

  • 有选择地选择要安装的工具,允许定制环境。
  • 从 Google Android SDK(包括 Eclipse)、用于 Microsoft Visual Studio 的 vs-Android 插件、Android NDK、Android Design、Apache Ant 和 Intel HAXM 中进行选择。

使用环境设置创建的应用可以在运行 Android 4.3 及更高版本的英特尔架构和基于 ARM 的目标上运行。

Intel 印度安装

以下部分描述了英特尔 INDE 安装过程。

下载英特尔印度

前往 https://software.intel.com/en-us/intel-inde ,点击下载链接,接受许可协议。您将收到一封带有下载链接的电子邮件,如图 3-14 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-14。

Download screen for INDE

正在安装 Intel 印度

运行下载的文件:IntelHubSetup.exe。英特尔 INDE 窗口显示许可条款和条件,如图 3-15 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-15。

INDE install window

选中复选框以同意许可条款和条件,然后单击安装。安装过程开始,几个命令行窗口闪烁。您的桌面上会创建一个英特尔 INDE 图标和一个 NDK.cmd 图标。当该过程完成时,您就可以开始了,如图 3-16 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-16。

INDE setup complete

英特尔印度产品发布

单击启动图标,英特尔 INDE 主窗口将启动,如图 3-17 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-17。

Main window for INDE

按照每个工具和应用下载必要的软件。您已经准备好开始跨平台开发了。

配置 Eclipse

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-19。

Directory Location Setting of Android SDK

  1. 将弹出一个首选项对话框。选择 Android 分支,然后在 SDK 位置框中输入正确的路径(通常这是自动填充的),如图 3-19 所示。注意:点击 Android 分支后,会弹出一个对话框。单击继续继续。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-18。

Startup page for configuring Eclipse

  1. 启动 Eclipse,选择窗口菜单,然后选择首选项,如图 3-18 所示。
创建 AVD(模拟器)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-23。

Display of created list of emulator

  1. 然后会显示 Android 虚拟设备管理器,如图 3-23 所示,你可以在列表中看到新添加的项目。单击关闭按钮(x)关闭对话框。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-22。

Creation parameter setting for emulator

  1. 当创建新的 Android 虚拟设备(AVD)对话框出现时,如图 3-22 所示,输入适当的名称,并为目标选择您希望使用的 Android 版本。CPU/ABI 框将自动显示英特尔凌动处理器(x86)。SD 卡的大小字段是硬盘上为其分配的空间量(在本例中为 1024 MB)。如果您的目标设备有更大的 SD 卡,请输入正确的大小。设置正确后,单击创建 AVD 关闭对话框。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-21。

Initial page of emulator list

  1. 会弹出 Android 虚拟设备管理器对话框,如图 3-21 所示。单击新建按钮。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3-20。

Start menu for creating emulator

  1. 在菜单栏上选择窗口,然后选择 AVD 管理器,如图 3-20 所示。

摘要

到目前为止,您已经完成了为模拟器目标机器安装开发环境工具。下一章讨论,如果你的目标机器是一个真实的设备(例如,智能手机或平板电脑),你需要如何安装和配置开发环境,以便在那个设备上开发和测试应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Open Access This chapter is licensed under the terms of the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License ( http://​creativecommons.​org/​licenses/​by-nc-nd/​4.​0/​ ), which permits any noncommercial use, sharing, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons licence and indicate if you modified the licensed material. You do not have permission under this licence to share adapted material derived from this chapter or parts of it. The images or other third party material in this chapter are included in the chapter’s Creative Commons licence, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons licence and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.

四、真实设备环境安装

Keywords Mobile Phone Real Device Android Application Host Machine Target Machine

到目前为止,您已经完成了模拟器目标机器的开发环境的安装。但是如果您的目标机器是一个真实的设备(例如,带有 Intel Inside 标志的手机或平板电脑),您需要为它安装和配置开发环境。本章讨论如何使用真实的 Android 设备构建应用开发,包括如何安装驱动程序并将设备连接到您的开发主机。稍后,您将看到如何创建一个应用,并在模拟器和真实设备上测试它。

手机设置

设置真实设备支持 Android SDK adb 连接的方法有很多种,设置因设备而异。例如,在联想 K900 智能手机的情况下,您可以通过选择设置➤应用➤开发并单击 USB 调试来打开 Android 设备的调试功能。对于其他一些设备,USB 调试选项不可用,因为默认情况下不启用开发人员选项。戴尔 Venue 8 Android 平板电脑就是一个例子。要在 Dell Venue Android 平板电脑上启用开发者选项,您需要转到设置➤关于➤内部版本号;轻按“Build Number”七次以启用“Dell Venue Developer”选项,该选项将出现在“System”类别下。

在主机上安装 USB 驱动程序

本章以联想 K900 智能手机为例,说明如何在主机上安装手机 USB 驱动程序:

  1. 通过 USB 电缆将手机连接到开发 PC。

  2. 手机在设备管理器中被命名为未知设备(见图 4-1 )。

  3. 安装驱动程序。当手机 USB 连接设置为驱动程序安装模式时,可以从手机制造商处或者有时从仿真 CD-ROM 设备处(对于 K900)找到驱动程序。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-1。

Lenovo K900 ADB device in Device Manager (a yellow ? appears on top of the icon if Device Manager is unable to recognize the mobile phone when a USB driver is not installed)

当您使用 USB 电缆将联想手机连接到 Windows 笔记本电脑时,光盘会安装到如图 4-2 所示的目录中。联想英特尔手机 u 盘的文件结构是

E: \Lenovo Kxxx Mobile phone driver>dir

2011-09-21 09:08         30 Autorun.inf

2012-03-23 17:10         2,366,976 bootstrap.exe

2012-03-23 17:15         69 bootstrap.ini

2012-03-23 10:57         10,993,152 LeDrivers.msi

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-2。

Directory display on the Windows host machine

  1. 双击LeDrivers.msi,开始安装 USB 驱动(见图 4-3 )。

  2. 安装后重新启动主机。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-3。

Lenovo K900 Device Drivers Setup dialog

可以看到已经安装了 ADB 接口。在软件列表中,联想 Racer-A 设备驱动已经成功安装(见图 4-4 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-4。

Software list for the Lenovo K900 after installation

主机和目标机之间的交互

配置好环境后,主机和目标机现在可以使用 Android 开发环境来提供辅助工具,以便在应用开发期间,除了部署操作之外,进行更多的交互。您对目标机器有更多的控制权,包括模拟器类型的目标机器。下面几节将介绍这些工具的使用。

开发 Android 应用

本节解释了如何使用 Eclipse 和 Android SDK 来创建项目、编辑项目,以及使用模拟器和真实设备来运行应用。

创建项目

要创建项目,请按照下列步骤操作:

  1. 启动 Eclipse,并选择文件➤新➤项目。在新建项目对话框中,选择安卓➤安卓应用项目,点击下一步继续(见图 4-5 )。

  2. 在新建 Android 应用对话框中,在应用名称字段中输入应用名称,如图 4-6 所示。项目名和包名是自动填充的。请注意,设置的项目名称也是目标机器上的应用名称。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-5。

Starting a new Android project

  1. 使用默认配置,然后单击下一步。出现“配置启动器图标”对话框(见图 4-7 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-6。

New project (application) name

  1. 使用默认配置,然后单击下一步。创建活动对话框出现(见图 4-8 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-7。

New project—application icon setting

  1. 使用默认配置,然后单击下一步。出现新的空白活动对话框(参见图 4-9 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-8。

New project—activity setting (1)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-9。

New project—activity setting (2)

文件结构和内容如图 4-10 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-10。

New project—directory structure

编辑和运行(在模拟器上)

要使用模拟器测试运行应用,请执行以下步骤:执行以下步骤。

  1. 右击项目名称,并在快捷菜单上选择“以➤运行配置身份运行”。或者,从菜单中选择运行➤运行配置。

  2. 在对话框中,右键单击 Android 应用(当前项目名称),然后选择新建。左键单击目标选项卡,然后单击自动选择兼容复选框。在列表中选择英特尔凌动相关 AVD。点击应用,然后点击关闭以关闭对话框(参见图 4-11 )。

  3. 右键单击项目名称,从快捷菜单中选择“作为➤ Android 应用运行”(见图 4-12 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-11。

Runtime configuration of the emulator target machine

  1. 运行前,出现如图 4-13 所示的消息框。单击“确定”继续。模拟器窗口出现并显示运行结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-12。

Editing and runtime for starting an Android application

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-13。

Message prompt before running Android

在主机上,Eclipse 的控制台窗口显示编辑、部署和运行的进度,如图 4-14 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-14。

Eclipse interface when running an Android application

当最后一句出现时,仿真器屏幕显示应用窗口,如图 4-15 所示。注:如果在您的主机上安装并运行了英特尔 HAXM,此过程大约需要 2 分钟。

  1. 点击 Eclipse 窗口右上角的 DDMS 按钮,进入 DDMS 界面。左边的窗格显示了当前在目标机器(模拟器)上运行的应用。在这个例子中,com.example.helloandroid 和 helloandroid 正在运行(见图 4-16 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-15。

An application running an interface on the emulator

  1. 您可以看到目标机器上的菜单发生了变化。单击主页按钮

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-16。

DDMS interface of Eclipse

在键盘上看到如图 4-17 所示的界面。然后点击屏幕底部左起第三个按钮。外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-17。

Home page of the emulator

在图 4-18 所示的应用列表中,可以看到新的 MainActivity 应用。

  1. 要停止运行应用,单击 Eclipse 右上角的 DDMS 按钮进入 DDMS 界面。从左边的进度列表中选择调试软件(通常是 com . example .[项目名称])。点击停止进程(见图 4-19 )结束在目标机器上运行进程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-18。

The application list on the emulator

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-19。

Ending running the application in DDMS

然后你会看到模拟器默认应用的页面,如图 4-20 所示。

  1. 在 Eclipse 中点击左上角的 Java。IDE 界面回到原来的编辑状态(见图 4-21 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-20。

Initial page of the emulator

  1. 关闭模拟器窗口。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-21。

The Eclipse editing interface

在真实设备上运行

要在真实设备上运行应用,请遵循以下步骤:

  1. 将手机连接到 PC。

  2. 进入 Eclipse 窗口,右键单击项目名称。在快捷菜单中,选择“作为➤运行配置运行”;或者,在 Eclipse 菜单中,选择运行➤运行配置。

  3. 在对话框中,左键单击 Android 应用,[当前项目名称]。左键单击目标选项卡,然后单击在所有兼容设备/AVD 上启动,这将设置为活动设备和 AVD。点击应用并关闭以关闭对话框(参见图 4-22 )。

  4. 右键单击项目名称,并从快捷菜单中选择“作为➤ Android 应用运行”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-22。

Setup for running an application on the real device

在真实设备上,可以看到应用上运行的界面,如图 4-23 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-23。

Application interface on the real device

应用图标出现在移动电话菜单上。并且在图 4-24 中可以看到,手机菜单上已经安装了 MyMainActivity。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-24。

Application list on the real device

有意思的是,真实设备上的应用进程比虚拟设备上的小很多(见图 4-25 )。它只有一个应用进程。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-25。

DDMS interface of Eclipse

与在模拟器上运行您的应用相比,Eclipse 控制台窗格(参见图 4-26 )不提供太多关于编辑和部署的信息。

  1. 按照与模拟器相同的步骤停止运行应用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-26。

Eclipse interface while the application is running

调试 Android 应用

调试是应用开发过程中的一个重要步骤。对于 x86 平台目标,您需要基于 x86 的设备或 x86 模拟器来测试和调试应用。借助市面上的 IA 手机和平板电脑,如 Lava Xolo 和 Lenovo K900,以及三星 Galaxy Tab 10.1 和戴尔 Venue 7/8 等平板电脑,您可以在真正基于 x86 的平板电脑和手机上测试和调试应用。

如果您没有用于测试的 x86 设备,x86 模拟器也能很好地工作。可以使用 Android SDK Manager 安装 x86 模拟器。

编辑源代码

在 Eclipse 项目文件窗格中,找到\XXX\src\com.example.XXX\***.java文件,其中XXX是项目名称。双击文件名,源代码显示在右边。通过添加如图 4-27 (阴影线)所示的代码行来编辑源代码。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-27。

Modifying the source code in Eclipse

设置断点

将光标放在代码上,右键单击快捷菜单中的切换断点,如图 4-28 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-28。

Menu to set a breakpoint

设置了断点的代码左侧显示绿色图标,如图 4-29 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-29。

Display after a breakpoint is set

重复此过程以取消在一行代码上设置的断点。

开始调试

要开始调试,请按照下列步骤操作:

  1. 右键单击项目名称。在弹出菜单中选择调试为➤安卓应用(见图 4-30 )。

  2. 在警告对话框中(图 4-31 ,点击是继续。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-30。

Entering the debugging state

  1. Eclipse IDE 进入调试界面,如图 4-32 所示。在可能的情况下,目标机器(真实设备或仿真器)的初始运行界面如图 4-33 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-31。

Message box after entering the debugging state

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-33。

The emulator interface during debugging

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-32。

Interface of the Eclipse IDE during debugging

程序执行技术

如果你想执行单步执行,点击代码窗口使其成为活动窗口(见图 4-34 )。您可以突出显示代码段,并单击鼠标右键进入如图 4-34 所示的菜单。从菜单中,选择“单步执行”、“单步执行”或“单步返回”来执行。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-34。

Single-step execution

观察日志的调试输出。x 函数

Log.X函数相当于 MFC TRACE函数,用于在 Eclipse LogCat 窗口中输出信息。要观察Log.X的调试输出,请遵循以下步骤:

  1. 如果 LogCat 窗格没有显示,点击窗口➤显示查看➤ LogCat(见图 4-35 )。根据您使用的 ADT 版本,可能找不到 LogCat。如果找不到 LogCat,您可以选择“其他”来显示更多选项,并将 LogCat 添加到您的列表中。LogCat 属于 Android 类别。

  2. 单步执行两个Log.d句子:

    1. 单击并激活代码窗口。
    2. 按 F6 键浏览代码。您可能需要多次按下 F6,才能在 LogCat 窗口中到达这些句子的最新输出(参见图 4-36 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-35。

Viewing LogCat

  1. 点击 LogCat 窗口右上角的添加新的 LogCat 过滤器按钮,为调试输出信息创建一个过滤器(参见图 4-37 )。在对话框中输入过滤器名称和日志标记。过滤器名称可以是你喜欢的任何名称,但是 By Log 标签必须是源代码中Log.d()函数的第一个参数(字符串)。然后单击确定关闭窗口。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-36。

Viewing output in the LogCat window

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-37。

Creating a new LogCat filter

在图 4-38 中,可以看到 LogCat 窗口中显示的Log.X被调用的输出信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-38。

The LogCat window displaying the filtered output

观察变量

要观察变量,选择运行➤手表,如图 4-39 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-39。

The Watch command

右键单击表达式选项卡,弹出如图所示的菜单。点击添加新表达式,如图 4-40 所示,添加观察变量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-40。

Adding variables for observation

结束调试

点击工具栏上的终止(图 4-41 )或选择运行菜单上的终止,结束调试。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-41。

Ending debugging by clicking the Terminate button

可以看到仿真器显示的默认应用页面,如图 4-42 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4-42。

The default application page displayed by the emulator

返回到编辑主页。在 Eclipse 中点击左上角的 JavaIDE 界面返回到原始编辑状态。

用于 Android 应用开发的英特尔辅助工具

英特尔为基于英特尔凌动处理器的系统上的软件开发提供了一系列工具。这些工具是 Android 开发工具链的辅助工具,进一步支持 Android 应用开发。在第三章中,你看到了如何获取苹果 OS X 和 Linux 主机系统的 Beacon Mountain 工具,兼容 Eclipse,支持包括安卓 NDK 在内的流行安卓 SDKs 英特尔集成本地开发人员体验(英特尔 INDE)提供扩展的工具、支持和更多功能,用于在 Microsoft Windows 7-8.1 主机系统上创建 Android 应用。以下是对其中一些工具的介绍。

英特尔 C++ 编译器(英特尔 ICC)

英特尔 C++ 编译器(Intel ICC)是一组 C/C++ 编码器,可以运行在多种平台上,包括 Windows、Linux 和 OS X,在 Linux 平台上,它可以代替 gcc 完成 C/C++ 代码编译和链接。

英特尔 ICC 编码器可以生成挖掘英特尔处理器潜力的指令。英特尔 ICC 编码的代码在英特尔处理器上具有相对更好的性能。运行在 IA-32 和英特尔 64 上的 ICC 可以为 SSE、SSE2、SSE3 和 SSE4 等 SIMD 指令生成自动矢量分量,并为英特尔无线 MMX 生成变量。英特尔 ICC 支持 OpenMP 和对称多处理器(SMP)的自动并行化。借助额外的集群 OpenMP,英特尔 ICC 编译的代码可以传递分布式内存多处理(DM-SMP)的接口调用,从而在 OpenMP 指令中生成消息。这在性能优化部分有详细说明。

Intel ICC 和 gcc 都有编辑和链接功能。英特尔 ICC 可以命令行格式运行,例如

icc [options] [@response_file] file1 [file2...]

在哪里

  • options表示零个或多个编码部分
  • response_file是一个文本文件,列出了要编译的文件的编码选项,可以包括 C 或 C++ 文件(后缀:.C, .c.cc.cpp.cxx.c++.i.ii)和汇编文件(后缀:.s.S)、目标文件(后缀:.o)和静态库(后缀:.a)

英特尔 ICC 的常用选项如表 4-1 所示。

表 4-1。

Common Intel C++ Compiler Encoding Options

| 选择 | 描述 | | --- | --- | | `-fast` | 几个选项的缩写:`-O3 -ipo -static -xHOST -no-prec-div`。注意:xhost 标签上的说明解释了优化基于哪个处理器。处理器标签可能会在实践中被重写。 | | `-g` | 为调试 gdd 和 idb 调试器生成调试信息版本。 | | `-help [CODE]` | 在命令行上显示帮助信息。`CODE`解释帮助组的类型和选项。 | | `-m32` | 告诉编码器产生 IA-32 代码。 | | `-m64` | 告诉编码器产生 IA-64 代码。 | | `-O0` | 告诉编码器不要执行优化。 | | `-O1` | 告诉编码器优化代码大小。 | | `-O2` | 优化运行速度和启动优化 | | `-O3` | 启动所有优化,包括 O2 和密集循环优化。 | | `-prof-gen` | 将程序编译成代码分析器的运行模式。 | | `-prof-use` | 在每个步骤中编译和处理代码分析器信息。该选项仅适用于已经应用了`prof_gen`编码的程序。 | | `-xO` | 为非英特尔 CPU 启动 SSE3、SSE2 和 SSE 指令集优化。 | | `-xS` | 生成 SSE 矢量编码器和媒体加速指令。 |

表格中列出的选项是英特尔 ICC 独有的。英特尔 ICC 与 gcc 的兼容性意味着 gcc 的编码选项也可以在英特尔 ICC 中使用。例如,-o选项可以用来命名目标文件;-S用于解释复合汇编代码;-c只编译文件,不链接成可执行文件(即抵制链接)。

面向 Android 操作系统的英特尔图形性能分析器

英特尔图形性能分析器(英特尔 GPA)套件是一套功能强大的图形和游戏分析工具,旨在以游戏开发人员的方式工作,通过快速提供可操作的数据来帮助您从系统级到单个绘图调用寻找性能机会,从而节省宝贵的优化时间。

英特尔 GPA 现在支持运行谷歌 Android 操作系统的基于英特尔凌动处理器的手机和平板电脑。这个版本的工具集使您能够使用您选择的开发系统(Windows、OS X 或 Ubuntu OS)来优化 OpenGL ES 工作负载。借助这一功能,作为 Android 开发人员,您可以执行以下操作:

  • 获得涵盖 CPU、GPU 和 OpenGL ES API 的二十多项关键系统指标的实时视图
  • 进行大量图形管道实验,以隔离图形瓶颈
  • 使用基于英特尔凌动处理器的平板电脑时,运行英特尔 GPA 帧分析器来执行详细的帧分析和优化
  • 使用基于英特尔凌动处理器和 PowerVR 显卡的 Android 设备时,运行英特尔 GPA 平台分析器来执行详细的平台分析

要下载英特尔 GPA 的免费版本,请浏览至英特尔 GPA 主页( https://software.intel.com/en-us/vcsource/tools/intel-gpa ),然后单击相应产品版本的下载按钮。要为 Android 操作系统平台开发游戏或应用,请根据您的开发系统选择英特尔 GPA 版本。

英特尔系统工作室

英特尔 System Studio 是一个全面的集成工具套件,提供先进的系统工具和技术,帮助加速交付下一代高能效、高性能、可靠的嵌入式和移动设备。

英特尔 System Studio 2014 现在允许您针对嵌入式和移动 Android 和 Tizen IVI 系统进行开发,增加了从 Windows 主机的交叉开发,并为所有 IA 平台提供扩展的 JTAG 调试支持。新的基于代理的 UEFI debug 可帮助您加快上市时间,并增强这些日益复杂的嵌入式和移动系统的可靠性。Eclipse 集成和交叉构建功能允许使用英特尔 System Studio 2014 进行更快的系统开发。

英特尔 System Studio 包括表 4-2 中列出的组件。

表 4-2。

Intel System Studio Components

| 成分 | 描述 | | --- | --- | | 面向系统的英特尔 VTune 放大器 | 高级 CPU 和片上系统(SoC)性能分析和调整。 | | 英特尔能源分析器 | 高级 GPGPU 和 SoC 功耗分析和调整。 | | 英特尔系统分析器 | 利用 Android 目标的 CPU 和 GPU 指标进行实时系统级性能分析。 | | intel jtag 除错程式 | 用于深入了解 SoC 平台的系统调试器,具有低开销事件跟踪、日志记录、通过 JTAG 和 EDKII 调试代理对 EFI/UEFI 固件进行源代码级调试、引导加载程序、操作系统内核和驱动程序等功能。 | | gdb 调试器 | 软件调试器,用于快速应用级缺陷分析,以提高系统稳定性、应用级指令跟踪和数据竞争检测。 | | 英特尔系统检测器 | 动态和静态分析器,识别难以发现的内存和线程错误,以确保功能可靠性。 | | 英特尔 C++ 编译器 | 业界领先的 C/C++ 编译器,包括用于高度优化性能的英特尔 Cilk Plus 并行模型。二进制和源代码与 gcc 编译器和交叉编译器兼容。 | | 英特尔集成性能原件 | 广泛的高性能软件构建模块库,用于信号、数据和多媒体处理。 | | 英特尔数学内核库 | 高度优化的线性代数、快速傅立叶变换(FFT)、矢量数学和统计函数。 | | 系统可见事件连接(SVEN) 1.0 技术 | 超低开销事件跟踪。 |

英特尔 System Studio 开发工具与英特尔 Quark、英特尔凌动、英特尔酷睿和英特尔至强处理器平台相结合,为在众多市场交付强大的嵌入式和移动平台解决方案提供了更多价值和竞争优势。

英特尔项目无政府状态:Havok 的免费手机游戏引擎

Project Anarchy 是一款适用于 iOS、Android(包括 X-86)、Tizen 的免费手机游戏引擎。它包括 Havok 的视觉引擎以及 Havok 物理学、Havok 动画工作室和 Havok AI。它拥有可扩展的 C++ 架构、优化的移动渲染、灵活的素材管理系统以及 Lua 脚本和调试。SDK 中包含完整的游戏示例,以及 Project Anarchy 网站上的大量课件,游戏开发人员可以使用这些课件快速熟悉引擎,并将其游戏创意付诸实践:

  • 基于可扩展 C++ 插件的架构
  • 全面的游戏样本与完整的源代码艺术和源代码
  • 关注社区,通过论坛获得支持、问答、反馈和实践培训
  • 对公司规模或收入没有商业限制
  • 针对其他平台和产品、资源以及支持的升级
  • 包括行业领先的音频工具 FMOD

英特尔性能库

特殊性能库包括英特尔集成性能基元(IPP)、英特尔数学内核(MKL)和英特尔线程构建模块(TBB)。

IPP 8.1 是一个庞大的软件函数库,用于 Windows、Linux、Android 和 OS X 环境下的多媒体处理、数据处理和通信应用。它包含了广泛的功能,包括通信和图像处理、计算机视觉、语音识别、数据压缩、加密和解密、字符串操作、语音处理、视频格式化、真实感渲染和 3D 数据处理。它还包括用于构建音频、视频和语音编码器/解码器的复杂原语,如 MP3、MPEG-4、H.264、H.263、JPEG、JPEG2000、GSM-AMR 和 G723。

通过支持所有数据类型和函数布局,数据结构类型的数量被最小化。在应用设计和优化过程中,英特尔 IPP 函数库提供了多种选项集。每个函数都支持各种数据类型和布局。IPP 软件的最小化数据结构为生成优化的应用、高级软件模块和库函数提供了最大的灵活性。IPP 的 Linux 版本提供支持 IA-32、英特尔 64、IA-64 和英特尔凌动处理器的独立软件包。

TBB 是一个广泛使用、屡获殊荣的 C 和 C++ 库,用于创建高性能、可扩展的并行应用。它通过一组丰富的组件来高效实施更高级别的基于任务的并行性,从而提高了工作效率和可靠性。您可以通过构建面向未来的应用来利用多核和众核能力,从而获得性能优势。高级线程库兼容多种编译器,可移植到各种操作系统。

英特尔 IPP 和 TBB 提供便利,并帮助优化程序运行时性能。您可以通过调用库中的函数来减少必须编写的代码量。英特尔性能库可以提供与第三方库相同或相似的服务和功能。它们充分利用英特尔和兼容处理器的指令能力;因此,相同或相似的服务比第三方库或操作系统提供的服务性能更好。这个话题在第八章和第九章的代码优化章节中有详细讨论。

摘要

在本章中,您讨论了如何在主机系统上设置和配置应用开发,为 Android real 设备安装 USB 驱动程序,以便在设备和主机系统之间建立连接,从而允许您测试和调试应用。您还讨论了如何使用英特尔仿真器、加速仿真器所需的所有步骤以及如何使用仿真器。在下一章中,您将讨论 Android 操作系统,并了解基于英特尔架构的 Android 操作系统的原理。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Open Access This chapter is licensed under the terms of the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License ( http://​creativecommons.​org/​licenses/​by-nc-nd/​4.​0/​ ), which permits any noncommercial use, sharing, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons licence and indicate if you modified the licensed material. You do not have permission under this licence to share adapted material derived from this chapter or parts of it. The images or other third party material in this chapter are included in the chapter’s Creative Commons licence, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons licence and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.

五、安卓操作系统

Keywords National Electrical Manufacturer Association National Electrical Manufacturer Association Executable File Host Machine Target Machine

所有计算设备的核心是操作系统,即 OS。应用软件的开发和执行是基于操作系统和整个软件平台的。在本章中,您将了解 Android 操作系统——为基于英特尔凌动处理器的机器推荐的软件平台——从而为嵌入式应用的后续开发培养能力。

Android 概述

Android 是基于 Linux 内核的综合操作环境(2014 年,内核版本 3.10.x 已经被各大 OEM 厂商使用)。最初,Android 的部署目标是移动电话类别,包括智能手机和更低成本的翻盖手机设备。然而,Android 的全套计算服务和丰富的功能支持完全有可能扩展到手机市场以外,用于平板电脑等其他平台和应用。

除了内核之外,面向 x86 的 Android 操作系统还需要一些驱动程序和技术,包括移动设备上常见的驱动程序和技术:

  • 主机和客户端的 USB 驱动程序
  • 用于视频编码和解码的视频驱动器
  • 显示和图形:2D 和三维渲染:飞机、管道、港口
  • 闪存驱动器
  • 相机驱动:通常是基于 Linux 的 v41(视频)驱动
  • 音频驱动程序:通常是基于高级 Linux 声音架构(ALSA)的高级 Linux(声音系统)驱动程序
  • 近场通信(NFC)
  • 无线驱动程序:基于 IEEE 802.11 的驱动程序
  • 键盘驱动程序
  • 安全性(DRM、可信引导等)
  • 蓝牙驱动程序
  • binder IPC:Android 的一个特殊驱动程序,具有独立的设备节点来提供进程间通信(IPC)功能
  • 电源管理:三种不同 CPU 待机状态的驱动程序:活动待机(S0i1)、始终在线始终连接(AOAC)待机(S0i2)和深度睡眠待机(S0i3)

鉴于 Android 功能的广泛性,很容易将其与桌面操作系统相混淆;Android 是一个分层的环境,包含了丰富的功能。

Android 应用通常用 Java 编程语言编写,可以包含许多不同种类的资源文件(在res目录中)。编译完 Java 程序和其他相关资源后,会生成一个 APK 包。谷歌还提供了对多个 APK 文件的支持。这是 Google Play 的一个功能,允许开发者为应用发布不同的 apk,每个 apk 针对不同的设备配置。Android 提供了许多核心应用,包括主页、联系人、电话和浏览器。此外,您可以使用应用框架层中的 API 来开发自己的应用。

Android UI 子系统包括

  • Windows 操作系统
  • 视图
  • 用于显示常见元素的小部件,如编辑框、列表和下拉列表

它还包括一个基于 WebKit 的嵌入式浏览器,这是苹果 iPhone 手机 Safari 浏览器的开源浏览器引擎。

Android 拥有一系列健康的连接选项,包括 Wi-Fi、蓝牙和基于蜂窝连接的无线数据(例如,GPRS、EDGE、3G 和 4G/LTE)。Android 应用中一个流行的技术是链接到谷歌地图,直接在应用中显示地址。Android 软件栈中也支持基于位置的服务(如 GPS)和加速度计,尽管并非所有 Android 设备都配备了所需的硬件。还有摄像头支持。从历史上看,移动应用一直难以与桌面应用保持同步的两个领域是图形/媒体和数据存储方法。Android 通过内置对 2D 和 3D 图形的支持,包括 OpenGL ES 库,解决了图形挑战。Android 平台上流行的开源 SQLite 数据库减轻了数据存储负担。

Android 架构

Android 软件架构的简化框图如图 5-1 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-1。

Android software architecture

如前所述,Android 运行在 Linux 内核之上。基于 Java 的应用在虚拟机(VM)中运行。值得注意的是,VM 不是 JVM,正如您可能期望的那样,而是 Dalvik 虚拟机(DVM),一种开源技术。每个 Android 应用都在 DVM 的一个实例中运行,而 DVM 又驻留在 Linux 内核管理的进程中,如图 5-2 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-2。

Android application operation layer

从 Android KitKat 4.4 开始,谷歌实现了新的 Android 运行时(ART),也称为 Dalvik 版本 2。Android 开源项目(AOSP) master 正在积极开发 ART,未来的 64 位版本 Android 都将基于 ART,你可以在 https://source.android.com/devices/tech/dalvik/art.html 找到关于 ART 的最新信息。

从编程角度看基本的 Android 功能

Android 是 Linux 的一个版本。本节通过两个场景为 Android 开发人员概括了一些基本的 Linux 命令和常见做法:一个基于 Android SDK 中提供的 Android 仿真器,另一个面向拥有真正的 Android 智能手机或采用 Intel inside 的平板电脑的开发人员(在示例中为联想 K900 智能手机)。如果你是一个有经验的 Android/Linux 开发者,你可以安全地跳过本章的其余部分,进入下一章。

Android 系统界面

Android 移动系统界面是各大厂商产生分歧的一个关键方面。个性化的系统界面不仅是一个卖点,也是手机用户与朋友交流的平台。本节以联想 K900 智能手机为例,讨论 Android 系统 UI 设计。联想 K900 使用的四叶草设计如图 5-3 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-3。

Lenovo K900 main interface

联想手机采用常规的“上滑解锁”模式,简单方便。长按一个叶子就可以改变主界面中的快捷键,如图 5-4 所示。值得注意的是,在主界面操作过程中,如果你点击菜单键,快捷方式设置选项不会出现,就像在其他一些 Android 手机上一样。此外,您不能添加或删除主屏幕(leaves 中的快捷键可以更改)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-4。

All Menu interface

联想手机的下拉菜单是个性化的,包括四个选项:通知、切换、通话和消息。在 Switch 界面中,可以对手机进行快速设置或者长按某个选项进入该选项的详细设置界面。

一些 Android 手机允许你在界面上长按任何空白处时添加小工具和快捷方式,但联想手机没有这项功能。您可以使用菜单键添加工具和快捷键(除了)主屏幕。当你用两个手指按下屏幕时,出现多屏界面,你可以在这里进行快速搜索,如图 5-5 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-5。

Multiscreen interface of the Lenovo phone

20 矩形网格设计的菜单界面时尚优雅,但有些图标模糊不清。

联想 K900 手机的主要硬件和 OS 配置信息如图 5-6 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-6。

Parameters of the Lenovo K900 phone

在 Android 中终止应用

Android 提供了三种不同的方法来终止应用,如以下章节所述。

方法 1(针对真实设备)
  1. 在移动设备菜单中选择以下选项:设置➤应用➤运行服务➤运行应用。显示正在执行的应用。该列表在不同的设备上可能会有所不同。例如,在三星 Galaxy Note 上,应用被替换为应用管理器,在戴尔 Venue (Android KitKat 4.4)上,它被替换为应用。
  2. 单击要从列表中删除的应用,屏幕上将弹出强制退出和卸载按钮。单击强制退出以终止该过程。
方法 2

当应用占据当前顶层窗口屏幕(即应用正在运行)时,按下 Return 键。

方法 3

在主机系统上的 Dalvik 调试监控服务器(DDMS)中终止该进程。当 Android 设备连接到一个具有 IDE 的主机系统时,可以实现这一点,该 IDE 带有支持 DDMS 的 Android SDK,如 Eclipse。

在 Android 模拟器中使用 Web 浏览器

如果你有一部智能手机,毫无疑问,你可以很容易地连接到互联网。如果您在模拟器上运行 Android,您可以按照以下步骤使用 web 浏览器:

  1. 点击键盘上的 Home 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传按钮,出现图 5-7 所示界面。单击右下角的按钮。

  2. 将弹出网络浏览器窗口。点击地址栏,调出仿真设备的键盘,如图 5-8 所示。在模拟键盘上输入地址,然后单击 Go。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-7。

Web browser startup interface

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-8。

Web browser initial interface

常见的 Linux 命令和操作

因为 Android 是基于 Linux 的,所以 Android 支持大部分 Linux 命令。以下部分介绍了基于 Ubuntu 系统的主机和基于 Android 系统的目标机支持的一些常见 Linux 命令。如果您使用 Windows 主机系统为 Android 开发应用,您可以使用 Android SDK 提供的 Android Debug Bridge (adb)命令连接到 Android 设备或仿真器来运行这些命令。

检查用户

以下命令检查当前登录的用户名:

$ who am i

或者

$echo $USER

以下命令显示用户名信息:

$ id

uid=1000(cereal) gid=1000(cereal)

groups=4(adm),  20(dialout), 24(cdrom), 46(plugdev), 106(lpadmin), 121(admin), 122(sambashare), 1000(cereal)

输出数据显示当前用户是谷物,用户 ID 是 1000,用户属于谷物组,组 ID 是 1000,依此类推。

更改密码

以下命令更改当前用户的密码:

$ passwd

以下是输出:

Changing password for cereal.

(current) UNIX password:

Enter New UNIX password:

Retype New UNIX password:

Password changed

passwd命令也可用于更改 root 密码。例如,如果您使用用户名“谷物”登录,您可以使用以下命令来设置 root 用户的密码:

$ sudo passwd root

在桌面 Linux 中,系统启动时通常会出现一个登录窗口,要求您输入用户名和密码。但是安卓没有这个过程。Android 自动使用默认用户名和密码登录,用户不可见;系统资源在用户的身份下使用。

如果 Android 安装后 root 用户的密码不确定,可以使用passwd root命令按照前面所示进行设置。s udo表示命令在 root 身份下执行,但命令的执行只需要输入普通用户的密码进行确认。

清除屏幕

您可以使用clear命令来清除屏幕:

$ clear

超级用户根操作

Linux 有一个唯一的超级用户 root(不同于 Windows 的多个超级用户),可以访问所有文件和目录,操作系统中的所有应用。使用su命令输入 root 用户帐户:

$ su

然后,输入 root 用户的密码。输入 root 用户帐户后,命令行提示符从$变为#。如果su命令后面没有任何参数,默认情况下将切换到 root 用户,而不是 root 用户的主目录——也就是说,root 登录环境在切换后不会改变。它仍然是默认的登录环境。当输入一个参数时,根用户以及根用户的环境都会改变:

$ su -

使用exit命令退出 root 用户帐户,返回普通用户身份:

#exit

退出后,命令行提示从#变为$

当您使用su命令输入 root 用户帐户时,后续操作将在 root 身份下进行。要在 root 用户身份下执行当前命令,并在命令执行后返回普通用户身份,请在命令前添加前缀sudo,如前所示。执行sudo时,系统会要求您输入当前用户(非根用户)的密码来确认身份。

理论上,一个普通用户不一定有sudo权限;权限在文档/etc/sudoers中指定。在桌面 Linux 中,这应该总是通过visudo这样的命令来编辑或设置。但在 Android 中,默认是安装程序有sudo权限。

显示文件和目录

使用ls命令显示目录和文件信息。ls的常见格式如下:

ls [-l] [<directory name>]

在这里,ls -l 显示文件或目录,大小,修改日期和时间,文件或文件夹名称和文件的所有者及其权限。默认情况下,显示当前目录的信息。例如(当前目录为/home/cereal):

改变和显示(当前)目录

使用cd命令改变当前目录。例如,要将当前目录更改为\embedded\pkgs,输入以下命令(注意在 Linux 中根目录和目录由/分隔):

$ cd /home/cereal/Document

/开始表示目录的这个路径称为绝对路径。

如果当前目录是/home/cereal,可以使用相对路径:

$ cd Documents

如果没有输入任何参数,cd命令会切换到当前用户的主目录:

$ cd

..表示父目录,通过以下命令访问:

$ cd ..

使用pwd命令显示当前目录的绝对路径名:

$ pwd

/home/cereal

在 Linux 中还有一些符号来表示特殊的目录。例如,表示用户的主目录,因此可以使用以下命令转到主目录:

$ cd ∼

搜索文件

使用find命令搜索文件。该命令的格式是

find directory name -name file name

您可以在指定的目录和所有子目录中搜索指定的文件。例如,输入以下命令在整个文件系统中搜索ifconfig文件:

# find / -name ifconfig

该命令从根目录开始,搜索所有子目录下的ifconfig文件。该命令可以访问所有目录,其中许多目录是普通用户无法访问的,因此建议您在 root 身份下执行该命令。

文件操作

Android 有类似于 Windows 的文件操作命令。这些命令在表 5-1 中列出。

表 5-1。

Android File-Operation Commands

| 命令 | 功能 | 格式 | 格式描述 | | --- | --- | --- | --- | | `cat` | 显示文件内容 | `cat [-n] ` | `n`:显示行号。 | | `ln` | 建立硬/软链接 | `ln [-sf] ` | `s`:软链接;默认为硬链接。`f`:如果目标文件存在,将被替换 | | `mkdir` | 制作目录 | `mkdir ` | 用给定的名称创建目录 | | `rmdir` | 删除空目录 | `rmdir ` | 要删除的目录必须为空。要删除非空目录,请使用以下命令:`rm –rf ` | | `cp` | 复制文件 | `cp [option] [] []` | 将源复制到 DEST,或将多个源复制到目录 | | `mv` | 移动和重命名文件 | `mv ` | 将源重命名为 DEST,或将源移动到目录。 | | `rm` | 删除文件 | `rm [option] ` | `-i`:询问是否删除。`-f`:不要问是否删除。`-r`:递归删除整个目录,像`rmdir`。 | | `cmp` | 比较文件 | `cmp ` | 比较任意类型的两个文件,并将结果写入标准输出。 |

例如,您可以使用以下命令来显示/etc/passwd文件的内容:

$ cat /etc/passwd

使用以下命令将/etc/passwd文件复制到当前目录:

$ cp /etc/passwd .

该命令中的.表示当前目录。

修改文件/目录权限

如上所述,每个文件或目录都有自己的权限。只有具有相应权限的用户才能执行操作。如果不匹配,必须修改权限。表 5-2 列出了修改文件权限的 Linux 命令。

表 5-2。

File/Directory Permission-Modification Commands

| 命令 | 功能 | 格式 | | --- | --- | --- | | `chmod` | 更改文件/目录访问权限(只有文件所有者和根用户可以这样做) | `chmod /<+/- w/r/x> ` | | `chgrp` | 更改文件组 | `chgrp ` | | `chown` | 更改文件所有者(只有根用户可以这样做) | `chown ` |

例如,该命令为其他用户添加对report.doc文件的写权限:

# chmod o+w report.doc

在 Linux 中,所有者、同组用户和其他用户分别用ugo表示。前面的命令为其他用户添加了写权限(o)。

下一个例子设置report.doc tp rw的组权限(删除x权限):

# chmod g=rw report.doc

权限也可以用数字表示:读、写和执行的值分别是 4、2 和 1。分配的权限的数字是三者之和。例如,下面的命令将report.doc的用户权限设置为rw (4 + 2 + 0 = 6),将组权限设置为r (4 + 0 + 0 = 4),不授予其他用户权限(0 + 0 + 0 = 0):

# chmod 640 report.doc

该命令将report.doc分配给经理组:

# chgrp managers report.doc

要将report.doc的所有者设置为“谷物”并将它的组设置为“经理”,可以使用以下命令:

# chown cereal.managers report.doc

该命令将当前目录下所有文件的所有者更改为谷物:

# chown cereal *

一般来说,只有根用户可以使用chown来改变文件或目录的所有者。

在 Windows 中,文件的可执行性是基于它的后缀(比如.exe),而 Linux 对可执行文件的名称没有任何要求,并通过文件属性来决定文件是否可执行。在 Android 中,要使文件可执行或不可执行,通常使用chmod命令来添加或删除执行权限。

许多命令功能,如文件操作和权限操作,通常在文件浏览器、文本编辑器或其他图形用户界面应用中执行。但是通过命令行操作,您有了一种快速执行命令的新方法。Android 不提供 GUI 应用,如文件浏览器,所以在大多数情况下,你必须使用命令行来完成这些功能。

使用可执行文件路径

如果没有为可执行文件指定路径,Linux 可以使用保存在系统变量PATH中的路径找到该文件,也称为默认路径或路径。默认情况下,Windows 在当前目录中查找可执行文件,但是 Linux 只在它们的默认路径中查找可执行文件。因此,您可以使用以下命令来执行当前目录下的可执行文件:

./directory name of executable file

以下命令显示当前路径:

$ echo $PATH

您也可以使用which命令来确定可执行文件的目录是否已经包含在默认路径中。例如,以下命令会查明 gcc 目录是否已包含在默认路径中:

$which gcc

如果它存在于默认路径中,这个命令输出可执行文件的目录:例如,/usr/bin/gcc。否则,该命令不输出任何内容。

要在默认路径中添加目录,可以使用以下命令:

$ PATH=$PATH:/tools/bin

$ export PATH

或者

$ export PATH=$PATH:/tools/bin

PATH下添加一个以:为分隔符的/tools/bin路径。改变PATH值或任何环境变量必须通过export导出;否则,新的PATH值不会生效。这只对当前用户有效。

可以将导出命令添加到 shell 文件中,如.bash_profile.profile.bashrc,这样每次命令行启动前都会执行该命令。

执行可执行文件而不修改默认路径的一个简单方法是在可执行文件名称前指定绝对路径。

管道和屏蔽

Linux 管道操作符号|将一个命令的输出作为第二个命令的输入。其功能与 Windows 中的相同。例如,您可以使用以下命令逐屏显示文件内容:

$ cat /etc/passwd | more

more命令逐屏显示文件,每页输出后暂停执行;你可以按任意键让它继续。在前面的命令中,cat/etc/passwd表示输出passwd文件的内容,输出作为 more 命令的输入(使用管道命令)。

grep命令可以搜索并显示文件中的某些行。例如:

$ grep cereal /etc/passwd

该命令在 passwd 文件中查找并显示包含“谷类”的行。输出是这样的:

cereal:x:1000:1000:cereal,,,:/home/cereal:/bin/bash

要搜索的字符串可以用单引号('')或双引号("")括起来。''中的文字是按字面意思理解的,而""中的一些特殊字符被 shell 赋予了特殊的含义。前面的命令也可以写成以下形式:

$ grep 'cereal' /etc/passwd

$ grep "cereal" /etc/passwd

在大多数情况下,您使用 pipe 和grep命令来显示命令输出的屏幕。例如:

$ ls -l /home/cereal/Document | grep qt

该命令显示包含/home/cereal/Document目录中qt字段的文件/目录的相应行。

您使用的另一个命令是

$ ps -e | grep ssh

其中列出了进程名称中包含文本“ssh”的所有活动进程。

在后台运行命令

命令的执行通常会占用控制台或命令行窗口的输入/输出,这意味着在正在执行的命令结束之前,您无法输入命令。相反,如果应用在后台运行,控制台的输入/输出不会被占用。要在后台运行命令,只需在命令末尾添加&

中断前台命令的执行

按 Ctrl+C 中断在前台执行的命令。例如,Linux ping命令将无休止地 ping 主机,但是您可以按如下方式结束它的执行:

$ ping 127.0.0.1

PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.

64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.027 ms

64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.028 ms

64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.029 ms

64 bytes from 127.0.0.1: icmp_seq=4 ttl=64 time=0.030 ms

64 bytes from 127.0.0.1: icmp_seq=5 ttl=64 time=0.031 ms

^C

--- 127.0.0.1 ping statistics ---

5 packets transmitted, 5 received, 0% packet loss, time 4462ms rtt min/avg/max/mdev = 0.027/0.029/0.031/0.001 ms

$

第五个 ping 输出项后,按 Ctrl+C 中断命令,屏幕显示^C

检查硬件信息(如操作系统版本和 CPU)

uname命令显示系统信息,包括与计算机和操作系统相关的信息。该命令的语法是

uname [-amnrsv][--help][--version]

这些参数如下:

  • -a(全部):显示所有信息
  • -m(机器):显示计算机类型
  • -n(节点名):显示网络上的主机名
  • -r (release):显示操作系统的发行号
  • -s (sysname):显示操作系统名称
  • -v(版本):显示操作系统版本
  • --help:显示帮助
  • --version:显示版本信息

例如,以下命令显示机器上的操作系统类型:

$ uname

Linux

这台机器的操作系统是 Linux。

这个命令显示了 Linux 内核的发行号:

$ uname -r

2.6.31-14-generic

发行号是 2.6.31-14。

Linux 将处理器信息放在/proc目录下的cpuinfo文件中,允许您通过该文件进行检查。您可以使用以下命令检查处理器型号:

$ cat /proc/cpuinfo | grep "model name"

华硕 Eee PC 1000HC 上网本的输出为

model name : Intel(R) Atom(TM) CPU N270 @ 1.60GHz

model name : Intel(R) Atom(TM) CPU N270 @ 1.60GHz

该机器采用英特尔凌动处理器 N270。

现在检查逻辑 CPU 的数量:

$ cat /proc/cpuinfo | grep "processor"

华硕 Eee PC 1000HC 上网本的输出为

processor : 0

processor : 1

处理器有两个逻辑 CPU。

以下命令将显示每个逻辑 CPU 的 ID:

$ cat /proc/cpuinfo | grep "core id"

华硕 Eee PC 1000HC 上网本的输出为

core id : 0

core id : 0

两个逻辑 CPU 具有相同的核心 ID,这意味着处理器的超线程是开放的,也就是说,超线程技术模拟两个 CPU。

使用 Android 开发和辅助工具

以下部分描述了如何使用仿真器、帮助文件、DDMS、(adb)以及常见的 Android 和 telnet 命令。

使用模拟器

Android 虚拟设备(AVD),即 Android 模拟器,是调试移动应用的好工具。本书前面简要介绍了 AVD 的使用,本节提供了更深入的讨论。

可以使用三种方法之一启动模拟器。

方法 1

按照以下步骤在 Eclipse 中启动模拟器:

  1. 启动 Eclipse,选择运行➤运行配置,如图 5-9 所示。

  2. 在调试配置框中,选择左栏中的\Android Application\XXX,然后单击目标➤“自动选择兼容设备:始终使用首选 AVD。。. "。检查指定的模拟器后,单击右侧的开始按钮。

  3. 弹出一个启动选项信息框(见图 5-10 )。点击启动,模拟器窗口打开(参见图 5-11 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-9。

Emulator startup menu

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-11。

Initial interface of the emulator when started separately

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-10。

Launch Options information box

方法 2

要在 Eclipse 中运行应用时启动仿真器,请在菜单栏上选择窗口➤ Android 虚拟设备管理器(参见图 5-12 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-12。

The Android Virtual Device Manager

有时,当使用这种方法时,接口会锁定。也就是说,在 Eclipse 中运行项目(应用)后,模拟器有时会显示如图 5-13 所示的界面。应用的界面不可见,表明模拟器被锁定。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-13。

Interface when the emulator locks up at startup

解决方法是单击菜单按钮。如果弹出一个窗口,点击等待继续,会出现应用的界面,如图 5-14 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-14。

Interface after unlock

方法 3

AVD 配置也可以使用“android”工具从命令行创建和管理,如下所述: http://developer.android.com/guide/developing/devices/managing-avds-cmdline.html

从英特尔架构命令行创建 AVD 的示例:AVD create AVD–n HC–t Android-13–s WXGA

对于自定义硬件,接受“是”,对于硬件,选择 x86。CPU . arch 属性使用帮助文件

Android 开发帮助文件为应用开发中涉及的类和方法原型提供了描述、解释和使用示例。您可以在线阅读帮助文件,也可以作为本地文件离线阅读。在线阅读功能更强大,因为它支持自动完成和类名搜索。但是,根据网速的不同,在线阅读的响应速度可能不如离线阅读。下面解释这两种方法。

当您使用 Android SDK 管理器(通过从 Eclipse 顶部菜单中选择 Window)下载 Android 包时,您会在每个包中看到 Android SDK 的文档。选择并安装后,所有文档都被复制到docs文件夹中,该文件夹是系统中android-sdk安装目录的子目录。通过 docs 中的index.html文件访问本地帮助文件。要使用本地帮助文件,请按照下列步骤操作:

  1. 打开android-sdk安装目录下docs子目录下的index.html文件(这里是D:\Android\android-sdk\docs\index.html)。在浏览器窗口中,可能会弹出一个询问运行 ActiveX 的信息栏。单击运行控件。
  2. 点击页面顶部下方的参照,如图 5-15 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-15。

Entry page for class references

出现帮助界面,如图 5-16 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-16。

Class reference page

脱机阅读不支持自动完成和搜索类名。图 5-17 显示了一个为TextView类搜索帮助的例子。在右上角的搜索栏中输入类名TextView,自动完成列表显示相应的候选名称。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-17。

Input interface for auto-complete and search of pages in offline reading mode

当选择列表中的候选项时(在本例中,选择了第一个候选项android.widget.TextView,如果没有可用的连接,将出现网络连接错误。帮助文件不会显示相应的信息。

在线阅读功能更强大,步骤如下:

  1. 在网页浏览器的地址栏中输入网址 http://android.com ,出现如图 5-18 所示的画面。

  2. 点击页面底部的获取 SDK,如图 5-19 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-18。

Initial page of online reading

  1. 点击新建页面上的参照,如图 5-20 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-19。

SDK entry page

  1. 在右上角的帮助信息搜索框中,输入该项目的搜索字符串(在本例中为“Log”)。包含关键字的候选列表框会下拉。从列表中选择您想要的项目。页面显示相应项目的帮助文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-20。

Entry page for references

使用 DDMS

达尔维克调试监控服务(DDMS)是一个重要的和强大的 Android 开发支持文件。它可以帮助在目标机器上调试软件,在主机和目标机器之间执行所需的交互,以及管理目标机器上的文件系统、进程和其他内容。DDMS 保存在 Android SDK 安装目录的 tools 子目录中。可以集成到 Eclipse 中作为插件使用,也可以在命令行输入其功能。启动 DDMS 也有两种方式:

  • 双击ddms.bat或在命令行窗口输入ddms来运行它。
  • 在 Eclipse 中调试程序时启动 DDMS。

DDMS 可以在模拟器和连接的设备上执行它的功能。如果系统检测到它们都在运行,默认情况下,DDMS 将被定向到模拟器。

DDMS 在 IDE 和目标机器之间建立链接,它们通过各自的端口监听调试信息,而 DDMS 可以实时监控测试终端的连接。当连接新的测试终端时,DDMS 捕获目标机器的 ID 并通过 adb 设置调试器,从而使得指令能够被发送到测试终端。

下面的说明展示了如何使用集成在 Eclipse 中的 DDMS。

显示 DDMS 按钮

在 Eclipse 中,DDMS 接口与开发编辑和调试接口处于同一级别。点击 DDMS 按钮进入 DDMS 界面。默认情况下,Eclipse 不显示按钮,因此您需要遵循以下步骤:

  1. 单击工具栏中的打开透视图。
  2. 在弹出框中选择 DDMS。DDMS 按钮显示在 Eclipse 的左上角,如图 5-21 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-21。

Displaying the DDMS start button

从 DDMS 开始

DDMS 按钮现在可见,您可以执行以下步骤来使用界面:

  1. 启动 Eclipse,连接手机或启动 AVD 模拟器,点击窗口右上角的 DDMS,如图 5-22 。

  2. 出现 DDMS 界面,如图 5-23 所示。左侧窗格是目标计算机的任务管理器,您可以在其中查看和结束进程。右侧窗格包括文件浏览器(如图 5-23 所示)和网络统计等选项卡。右窗格还显示目标计算机的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-22。

DDMS entry interface

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-23。

DDMS initial interface

主机和目标机器之间的文件传输,以及文件管理

DDMS 还可以在主机和目标机器(真实设备或仿真器)之间执行文件传输(相互复制),并管理目标机器上的文件,如下所述。

将文件从主机复制到目标机

请遵循以下步骤:

  1. 在 DDMS 界面的右窗格中,单击文件资源管理器。您会看到按钮从设备中拉出文件,将文件推送到设备上,以及删除工具栏中的选择,如图 5-24 所示。

  2. 在右窗格中,您可以看到目标机器的整个文件系统(在本例中模拟器正在运行)。点击选择文件夹(本例中为data文件夹),点击工具栏上的推送文件到设备按钮,在弹出框中选择一个文件(在主机上),如图 5-25 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-24。

Initial DDMS interface for file transfers

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-25。

Selecting a file to copy from the host machine to the target machine

您可以在目标机器上看到复制的文件(本例中为cats.jpg),如图 5-26 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-26。

File system of the target machine after copying a file

请注意,由于用户权限的限制,目标计算机上的某些文件夹不允许上传。例如,如果选择根文件夹上传文件,底部消息框会出现错误,如图 5-27 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-27。

Uploading a file under the root directory on the target machine

将文件从目标机器复制到主机

遵循与上一节相同的步骤,但这次单击按钮“从设备中提取文件”。

删除文件

遵循“将文件从主机复制到目标计算机”一节中的相同步骤,但单击“删除选择”按钮。

目标机器上的进程管理

在 DDMS 中,您可以查看目标计算机上运行的进程,并执行一些管理任务,如停止进程。下面是一个介绍。

启动目标计算机的进程管理

在 Eclipse 中启动一个应用(本例中的测试项目,其源代码文件为MyAppCode.java),如图 5-28 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-28。

Applications that have started before process view

在仿真器上运行的应用界面如图 5-29 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-29。

Application’s interface started before process view

通过单击主机 Eclipse 窗口右上角的 DDMS 按钮启动 DDMS 界面。您会在左窗格中看到目标计算机上运行的进程列表。在列表中找到该应用对应的进程(本例中为com.example.test),如图 5-30 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-30。

List of processes running on target machine

如图所示,DDMS 在端口 8600 上监控第一个进程com.android.phone(进程 ID: 311)。如果有更多的目标机器或更多的应用进程,监控端口将按升序递增:第二个进程监控端口将被分配为 8601,第三个进程监控端口将被分配为 8602,以此类推。DDMS 通过被称为基本端口的端口 8700 接收所有终端命令。

右上角是一排非常重要的按钮:调试选中的进程、更新线程、更新堆、停止进程、截屏,完成相应的操作。以下部分以停止流程为例,说明了这些按钮的用法。

停止指定的进程

要停止应用,请选择应用进程,然后单击上部工具栏中的“停止进程”按钮。可以看到模拟器上的应用已经被终止,如图 5-31;最初的进程(com.example.test)不再显示在 Eclipse 中的 DDMS 进程列表中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-31。

DDMS interface on the host machine after process termination

获取目标机器屏幕截图

DDMS 也可以用来捕捉目标机器的屏幕截图。截图可以保存为主机上的文件。步骤如下:

  1. 启动目标机应用,如图 5-32 所示。

  2. 在主机的 Eclipse 环境下,点击左侧窗格上部工具栏的截屏按钮,在弹出的对话框中点击保存按钮,然后点击完成按钮关闭对话框,如图 5-33 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-32。

Interface of the target machine before screen capture

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-33。

Performing a screen capture on the target machine

你可以在主机上的文件夹里看到截图,如图 5-34 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-34。

Host machine screen capture result

仿真器操作

如果目标机是仿真器,点击 DDMS 右窗格中的仿真器控制页签,可以看到仿真器操作界面,如图 5-35 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-35。

Emulator control interface of DDMS

该面板上的功能允许测试设备轻松模拟真实电话的一些交互功能,如接听电话、根据选项模拟各种网络状况、模拟接收短信和发送虚拟地址坐标来测试 GPS 功能。下面是几个函数描述。

  • 电话状态:使用选项模拟语音质量和信号连接模式
  • 电话操作:模拟电话应答和向测试设备发送 SMS
  • 位置控制:模拟地理坐标,或模拟路线坐标的动态变化,显示默认地理标志,有以下三种方式:
  • 手动:手动向测试设备发送二维经纬度坐标
  • GPX:通过 GPX 文件导入一系列动态变化的地理坐标,以模拟移动过程中不断变化的 GPS 值
  • KML:通过 KML 文件导入独特的地理标志,并根据不断变化的地理坐标在测试设备上动态显示

下面以发送短信为例,介绍如何使用这些功能:

  1. 完成仿真器控制\电话操作框。

  2. 点击发送后,在 Android 模拟器中打开消息。你看短信,如图 5-36 所示。

  3. 点击新的短信可以查看其详细信息,如图 5-37 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-36。

Title of SMS received by the emulator

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-37。

Content of the SMS received by the emulator

在命令提示符下使用 adb

Android Debug Bridge (adb)是 Android 提供的通用调试工具。使用此工具,您可以管理设备或电话模拟器的状态,并执行以下操作:

  • 快速更新设备或手机模拟器上的代码,如应用或 Android 系统
  • 在设备上运行 shell 命令
  • 管理设备或电话仿真器上的保留端口
  • 在设备或手机模拟器上复制和粘贴文件

adb 的功能一般集成到 Eclipse 开发环境中。本节介绍 adb 的其他功能,这些功能通常通过命令行输入。表 5-4 列出了三个常用命令。

表 5-4。

Common Commands for Viewing Information on the Target Machine

| 命令 | 描述 | | --- | --- | | `adb devices` | 查看目标机器的信息 | | `adb get-product` | 查看目标机器的产品型号 | | `adb get-serialno` | 查看目标机器的序列号 |

在命令提示符下使用 adb 非常有用,当模拟器没有启动或电话没有连接时,在主机的 Windows 命令行中键入以下命令后,输出结果为空:

C:\Documents and Settings>adb devices

List of devices attached

如果 adb 服务尚未启动,上述命令将提示启动信息:

C:\Documents and Settings>adb devices

* daemon not running. starting it now on port 5037 *

* daemon started successfully *

List of devices attached

启动模拟器后,运行命令,将显示模拟器设备信息:

C:\Documents and Settings>adb devices

List of devices attached emulator-5554 device

启动模拟器并连接到电话后,该命令会显示以下内容

C:\Documents and Settings>adb devices

List of devices attached emulator-5554 device Medfield04749AFB device

其中emulator-5554指模拟器对应的目标机,Medfield04749AFB指联想手机对应的目标机。

当只连接手机时,adb get-serialno命令只输出有效目标机的序列号:

C:\Documents and Settings>adb get-serialno

Medfield04749AFB

在目标计算机上运行命令

您知道 Android 是基于 Linux 的,并且已经向您介绍了 Android 支持的 Linux 命令。然而,大多数运行 Android 的移动设备没有用于命令输入的物理键盘。即使这样,Linux 命令也是有用的。可以利用一些辅助工具,比如 adb,实现 Android 命令的远程输入。通过使用 adb shell 命令,您可以在主机上输入命令,并让目标机器执行这些命令。换句话说,主机的键盘和屏幕模拟了目标机上的一个终端。这里的目标机器可以是真实的设备,也可以是模拟器。请遵循以下步骤:

  1. 在主机的 Windows 命令行上输入adb shell命令:

C:\Documents and Settings> adb shell

  1. 输入目标机器的 Android 命令。例如:

# pwd

pwd

/

# ls -l

ls -l

drwxr-xr-x root     root     2012-07-09 13:24 acct

drwxrwx--- system   cache    2012-07-09 13:25 cache

dr-x------ root     root     2012-07-09 13:24 config

lrwxrwxrwx root     root     2012-07-09 13:24 d -> /sys/kernel/debug

drwxrwx--x system   system   2012-07-09 19:44 data

-rw-r--r-- root     root     116 1970-01-01 00:00 default.prop

drwxr-xr-x root     root     2012-07-09 13:25 dev

lrwxrwxrwx root     root     2012-07-09 13:24 etc -> /system/etc

-rwxr-x--- root     root     105204 1970-01-01 00:00 init

-rwxr-x--- root     root     2344 1970-01-01 00:00 init.goldfish.rc

-rwxr-x--- root     root     17048 1970-01-01 00:00 init.rc

-rwxr-x--- root     root     1637 1970-01-01 00:00 init.trace.rc

-rwxr-x--- root     root     3915 1970-01-01 00:00 init.usb.rc

drwxrwxr-x root     system   2012-07-09 13:24 mnt

dr-xr-xr-x root     root     1970-01-01 00:00 proc

drwx------ root     root     2011-12-08 23:06 root

drwxr-x--- root     root     1970-01-01 00:00 sbin

lrwxrwxrwx root     root     2012-07-09 13:24 sdcard -> /mnt/sdcard

drwxr-xr-x root     root     1970-01-01 00:00 sys

drwxr-xr-x root     root     2012-06-23 01:56 system

-rw-r--r—root       root     272 1970-01-01 00:00 ueventd.goldfish.rc

-rw-r--r-- root     root     3879 1970-01-01 00:00 ueventd.rc

lrwxrwxrwx root     root     2012-07-09 13:24 vendor -> /system/vendor

# cd

cd

cd: HOME not set

# echo $PATH

echo $PATH

/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

# ifconfig eth0

ifconfig eth0

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]

  1. 使用exit命令停止在目标机器上的执行,并返回到主机上的命令行界面:

# exit

exit

C:\Documents and Settings>

Note

Android 中的 Linux 外壳被简化了很多。因此,许多常见的 Linux 命令都不被支持。

在目标计算机上安装应用包

您可以使用adb install命令在目标机器上安装或卸载应用包。软件安装命令的格式是

adb install XXX.apk

其中XXX.apk是主机当前目录下的文件。例如,要安装文件浏览器软件,请按照下列步骤操作:

  1. 目标机器(仿真器)上的原始应用如图 5-38 所示。

  2. 在主机上的命令行中运行以下命令:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-38。

Application executing on the virtual machine before software installation

E:\temp\temp>adb install file_browser.apk

92 KB/s (2617375 bytes in 27.546s)

pkg: /data/local/tmp/file_browser.apk

Success

安装文件file_browser.apk位于主机的当前目录下(本例中为E:\temp\temp)。

你可以看到目标机器已经安装了新的应用 ES File Explorer,如图 5-39 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-39。

Virtual machine application after software installation

点击图标即可启动新应用,如图 5-40 所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5-40。

Operation interface of the newly installed software

该软件可以以同样的方式安装在真正的手机上。

在目标机器上卸载软件

您可以使用adb shell命令rm卸载目标机器上的软件。例如:

E:\temp\temp>adb shell rm /data/app/*.apk

软件(*.apk)通过 adb 安装,位于/data/app/目录下;因此,没有必要在安装过程中指定路径。卸载时只需要执行rm命令。然而,rm命令非常强大,如果使用不当,会导致不可逆转的数据丢失。卸载应用的安全和推荐方法是

adb uninstall packagename

在主机和目标机器之间传输文件

命令adb push可用于将文件从主机复制到目标机,命令adb pull可用于将文件从目标机复制到主机。

启用和禁用 adb 服务

您可以使用adb kill-server命令禁用 adb 服务,并使用adb start-server命令启用它。

其他功能

以下是一些其他有用的 adb 功能列表:

  • 端口转发(将默认端口 TCP5555 转发到端口 1234)

adb forward adb forward tcp:5555 tcp:1234

  • 访问数据库sqlite3

adb shell sqlite3

  • 等待正在运行的设备

adb wait-for-devices

  • 查看错误报告

adb bugreport

  • 记录无线电通信日志

adb shell logcat -b ratio

一般来说,无线电通信日志比较多,操作时不需要获取记录,但是可以通过命令获取记录。

使用 Android 命令

Android 命令由批处理文件android.bat提供,该文件位于android-sdk安装目录下的tools子目录下。这些命令可以管理模拟器和 API,主要是通过 Eclipse。当然,也可以通过在命令行输入 Android 命令来实现管理。以下部分介绍了这些命令。

查看安装的模拟器

您可以通过运行android list avd命令来查看安装的仿真器。例如:

C:\Documents and Settings>android list avd

Available Android Virtual Devices:

Name: AtomAVD

Path: C:\Documents and Settings\hlgu\.android\avd\AtomAVD.avd

Target machine: Android 4.0.3 (API level 15)

ABI: x86

Skin: WVGA800

Sdcard: 1024M

---------

Name: myAndroid

Path: C:\Documents and Settings\hlgu\.android\avd\myAndroid.avd

Target machine: Android 4.1 (API level 16)

ABI: armeabi-v7a

Skin: WVGA800

Sdcard: 1024M

Snapshot: true

输出显示系统安装了两个仿真器:CPU 为 x86 (ABI 线)的 AtomAVD 仿真器(name 线)和 CPU 为 armeabi-v7a 的 myAndroid 仿真器。

查看当前支持的 API 的版本信息

您可以通过运行android list target命令来查看当前支持的 API 的版本信息。例如:

C:\Documents and Settings>android list target

Available Android targets:

----------

id: 1 or "android-15"

Name: Android 4.0.3

Type: Platform

API level: 15

Revision: 3

Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800

ABIs : x86

----------

id: 2 or "Google Inc.:Google APIs:15"

Name: Google APIs

Type: Add-On

Vendor: Google Inc.

Revision: 2

Description: Android + Google APIs

Based on Android 4.0.3 (API level 15)

Libraries:

* com.google.android.media.effects (effects.jar)

Collection of video effects

* com.android.future.usb.accessory (usb.jar)

API for USB Accessories

* com.google.android.maps (maps.jar)

API for Google Maps

Skins: WVGA854, WQVGA400, WSVGA, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800

ABIs : armeabi-v7a

----------

id: 3 or "HTC:HTC OpenSense SDK:15"

Name: HTC OpenSense SDK

Type: Add-On

Vendor: HTC

Revision: 2

Based on Android 4.0.3 (API level 15)

Libraries:

* htc-extension (HTCSDK.jar)

HTC generic extension library

Skins: WVGA854, WQVGA400, WSVGA, WXGA720, HVGA, WQVGA432, WVGA800 (default), QVGA, WXGA800

ABIs : no ABIs.

----------

id: 4 or "android-16"

Name: Android 4.1

Type: Platform

API level: 16

Revision: 1

Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default), WVGA854, WXGA720, WXGA800, WXGA800-7in

ABIs : armeabi-v7a

----------

id: 5 or "Google Inc.:Google APIs:16"

Name: Google APIs

Type: Add-On

Vendor: Google Inc.

Revision: 2

Description: Android + Google APIs

Based on Android 4.1 (API level 16)

Libraries:

* com.google.android.media.effects (effects.jar)

Collection of video effects

* com.android.future.usb.accessory (usb.jar)

API for USB Accessories

* com.google.android.maps (maps.jar)

API for Google Maps

Skins: WVGA854, WQVGA400, WSVGA, WXGA800-7in, WXGA720, HVGA, WQVGA432, WVGA 800 (default), QVGA, WXGA800

ABIs : armeabi-v7a

输出显示当前开发环境安装了包括 android-15、Google Inc:Google API:15、HTC:HTC OpenSense SDK:15、android-16、Google Inc:Google API:16 在内的多个 API。

创建模拟器

Android create avd –n命令可以用来创建一个模拟器,但是你通常在 Eclipse 中创建它。

启动模拟器

大多数时候,您使用emulator命令在 Eclipse 中启动模拟器。例如:

C:\Documents and Settings>emulator -avd myAndroid

myAndroid是由android list avd命令列出的仿真器的名称。这个命令将启动myAndroid模拟器。

对模拟器命令使用 Telnet

您可以使用 Telnet 在目标机器(模拟器)上从主机输入命令,并让目标机器(模拟器)执行这些命令。这样,主机(Windows、Linux 和 Mac 系统)就变成了仿真器的控制台终端。Telnet 命令的格式是

telnet localhost <console-port>

例如:

telnet localhost 5554

一般来说,Android 模拟器的序列号是 5554。运行 Telnet 时,您需要将控制台端口更改为您打算连接的仿真器的序列号:例如,5554、5556 或 5558。使用 telnet localhost 5554 连接到模拟器后,输入help命令。

登录 Android 模拟器终端模式后,可用命令有eventgeogsmkillnetworkpowerredirsmsvmwindow;它们用于控制 Android 模拟器。这些命令中的许多可以被前面介绍的 DDMS 仿真器图形操作所取代。以下部分介绍了这些命令。

事件命令

格式是

event text testmessage

该命令可以向仿真器发送四个事件— sendtypescodestext。例如,在event text testmessage向模拟器发送一个文字字符串“测试消息”后,你会立即在 Android 模拟器的屏幕上看到这条消息。

地理命令

格式是

geo <fix|nmea>

例如:

geo fix 121.5 25.4 10

geo nmea $GPRMC,071236,A,3751.65,S,14527.36,E,000.0,073.0,130309,011.3,E*62

geo命令可以将 GPS 位置发送给仿真器。geo fix发送一组用经度、纬度、高度表示的固定 GPS 位置,可以从一些网站的地图上获取,比如经度 121.5,纬度 25.4,高度 10 米。当 Android 设备通过 USB 连接到外部 GPS 设备时,您可以使用geo nmea命令将位置发送到外部 GPS 设备。

美国国家电气制造商协会(NEMA)为 GPS 设备开发了 NEMA 0183 协议。gps nema命令的格式很复杂,由 12 个字段组成,但由于这种复杂性,该命令提供了比geo fix命令更精确的定位。gps nema命令的格式如下:

$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh

$GPRMC,hhmmss.ss,A,IIII.II,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh

$GPRMC (Recommended minimum specific GPS/Transit data)

这些字段如下所示:

  • UTC,格式为 hhmmss(时、分、秒)。比如:071236
  • 定位状态:A =可用定位,V =无效定位。
  • 纬度,格式为 ddmm.mm (d 指度,m 指分)。例如:3751.65 = 37 度 51.65 分。
  • 纬度半球北(北半球)或南(南半球)。
  • 经度,格式为 dddmm.mm .例如:14527.36 = 145 度 27.36 分。
  • 经度半球 E(东经)或 W(西经)。
  • 地速(000.0 至 999.9 节;0 也将被传输)。比如:静止的 000.0。
  • 地面方向(000.0-359.9 度;0 也将被传输)。比如:073.0。
  • UTC 日期,格式为 ddmmyy(日期、月份和年份)。比如:130309。
  • 磁偏角(000.0-180.0 度;0 也将被传输)。比如:011.3。
  • 磁偏角方向:东或西。
  • 模式指示符(在 NEMA 0183 协议中,A =自主定位,D =差分,E =估计,N =空信息)。*hh 是校验和。比如:*62 全球通电话 5556688。
gsm 命令

gsm命令可以模拟 GSM 手机的通话状态,参数有callbusyholdcanceldatavoicestatus。只需在参数后面添加任何电话号码,就可以在 Android 模拟器中模拟呼叫 GSM 电话。

kill 命令

kill命令在 Android 模拟器的终端模式下立即关闭模拟器窗口。

网络命令

network命令是网络管理和操作命令。它有各种参数来完成不同的网络功能。例如:

network status

该命令用于查看 Android 模拟器的网络传输状态。

以下是一些额外的例子:

network speed full

network speed umts

网速可以改变手机的网络传输模式,包括gsm(GSM/CSD)gprs(GPRS)edge(EDGE/EGPRS)umts(UMTS/3G)hsdpa(HSDPA/3.5G),全速传输,随机选择。这是安卓系统默认的网络设置。

电源命令

此命令显示电话的当前电源状态是否为交流电源连接,以及电池的剩余电量:

power display

redir 命令

adb forward命令类似,redir命令可以显示和管理仿真器的 TCP 或 UDP 通信端口。例如:

redir add tcp: 5000:6000

您可以使用这个命令将托管系统的 TCP 端口 5000 接收到的消息定向到 Android 模拟器的 TCP 端口 6000。

此命令列出了已定向的 TCP 或 UDP 通信端口:

redir list

redir del命令可以删除已经指向的通信端口;

redir del tcp: 5000

sms 命令

您可以使用sms命令发送短信:

sms send <phone number> <SMS>

例如:

sms send 5556688 this is a test sms

这将发送短信文本“这是一个测试”到电话号码 5556688,Android 模拟器将立即收到它。

窗口比例?命令

window scale命令可以改变模拟器的窗口大小。例如:

window scale factor (factor: 0.1-3.0)

window scale 1.2

第一个命令将屏幕比例因子设置为 0.1 到 3.0 之间。第二个命令将 Android 模拟器的窗口大小缩放 1.2 倍。

摘要

对于应用开发人员来说,您构建的应用能够在不同 OEM 厂商生产的所有设备和不同平台上运行是至关重要的。然而,原始设备制造商一直在裁剪和定制他们设备的 Android 操作系统,以满足他们所使用的软件和硬件的独特需求。因此,了解 Android OS 定制有助于您更好地设计应用。下一章讨论 Android 操作系统的定制,包括 Android 映像的安装和刷新,这是您直接从设备制造商处将测试平台更新到最新 Android 版本的最快方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 Open Access This chapter is licensed under the terms of the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License ( http://​creativecommons.​org/​licenses/​by-nc-nd/​4.​0/​ ), which permits any noncommercial use, sharing, distribution and reproduction in any medium or format, as long as you give appropriate credit to the original author(s) and the source, provide a link to the Creative Commons licence and indicate if you modified the licensed material. You do not have permission under this licence to share adapted material derived from this chapter or parts of it. The images or other third party material in this chapter are included in the chapter’s Creative Commons licence, unless indicated otherwise in a credit line to the material. If material is not included in the chapter’s Creative Commons licence and your intended use is not permitted by statutory regulation or exceeds the permitted use, you will need to obtain permission directly from the copyright holder.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值