65.9K
CodeProject 正在变化。 阅读更多。
Home

如何为Intel® x86平台开发和评估64位Android应用程序

2015年6月1日

CPOL

7分钟阅读

viewsIcon

9381

本文将介绍 Intel® 64 位架构上的 Android,并讨论其独特的兼容性,包括针对基于 Intel® Atom™ 处理器平台的 Android 的技术细节、性能提升、问题陈述和可用解决方案。

Intel® Developer Zone 提供跨平台应用开发工具和指南信息、平台和技术信息、代码示例以及同行专业知识,以帮助开发者创新和成功。加入我们的社区,了解 Android物联网Intel® RealSense™ 技术Windows,下载工具、访问开发套件、与志同道合的开发者交流想法,并参加黑客松、比赛、路演和本地活动。

引言

如今,越来越多的移动终端设备采用 64 位架构。使用 64 位 Android* 是进入市场的绝佳方式。本文将介绍 Intel® 64 位架构上的 Android,并讨论其独特的兼容性,包括针对基于 Intel® Atom™ 处理器平台的 Android 的技术细节、性能提升、问题陈述和可用解决方案。

Intel 不断在其 64 位处理器中引入新的尖端功能。希望利用 Intel® Advanced Encryption Standard New Instructions (Intel® AES-NI) 和其他创新的开发者只需将他们的应用程序编译为 64 位模式即可。Intel 正在努力为 64 位架构优化 Android,并创建 SDK 来将 CPU 功能暴露给更高级别的开发者。

随着 Google 近期发布了其 x86 64 位 Android 5.0 模拟器镜像,开发者可以为基于 Intel Atom 处理器(的设备)创建 64 位应用。

Android 32 位 vs 64 位

当今许多 64 位平台,包括 Solaris、AIX*、HP-UX*、Linux*、OS X*、BSD 和 IBM z/OS*,都使用 **LP64** 模型。由于 Android 基于 Linux 内核,Android 64 位平台也使用 LP64 模型 [1]。数据类型如图 1 所示。

图 1:LP32 和 LP64 模型上不同数据类型的大小

Intel 64 位 CPU 具有 32 位兼容模式。虽然 32 位应用程序可以在 64 位处理器上运行,但使用 64 位优化编译器进行编译可以使它们利用 64 位环境的架构优势。

如何为 64 位构建 Android 应用程序

对于基于 NDK 的 Android 应用程序,您需要将原生库构建为支持 64 位系统。您可以通过执行以下步骤来完成此操作:

  1. 下载并安装正确的 NDK 版本。
    您可以从官方网站 [2] 获取,或自己从 AOSP 构建。
    [注意:从 NDK R10 开始,NDK 有 32 位和 64 位两个版本。]
    对于 Windows* 和 Linux 系统,您需要解压 NDK 文件并在系统 PATH 环境变量中设置正确的路径。

  2. 构建您的库以支持 64 位系统。
    请记住使用 ABI x86_64 来构建您的项目,使用“ndk-build APP_ABI=x86_64”命令。这是在 x86 平台上为 64 位 Android 系统构建原生库的最佳方法。对于其他平台,您需要将 APP_ABI 设置为“arm64-v8a”或“mips64”。或者,您可以在 Application.mk 中添加“APP_ABI = x86_64”行,然后直接使用“ndk-build”命令。
    在大多数情况下,上述命令都能正常工作,但有时会出现错误。您应根据错误信息更正您的原生代码。

  3. 重新构建整个项目以获得新应用程序。
    现在您可以安装新创建的应用程序,并在模拟器或目标设备上进行测试。

如何在模拟器上运行 64 位应用程序

如果您没有任何完全支持 64 位功能的设备,您可以在模拟器中测试您的应用程序。幸运的是,Android Dev 宣布了适用于 Intel x86 架构的 Android L 64 位模拟器 [3] 的可用性。您可以使用 Android SDK Manager 下载并安装适用于 Intel Atom 处理器(的)64 位系统镜像。如图 2 所示,在 Android SDK Manager 中,您可以选择 Android 5.0 (API 21) 下的“Intel x86 Atom_64 System Image”并进行安装。

图 2:“Intel® x86 Atom_64 System Image”在 Android* SDK Manager 中的复选框

创建一个基于 Intel Atom 处理器 64 位系统镜像的新 Android 虚拟设备 (AVD),并在 SDK Manager 或 ADT 中打开 AVD Manager。然后单击“创建”并填写如图 3 所示的字段。现在,64 位 AVD 模拟器已准备好运行。

图 3:在 AVD 中创建 x64 镜像

请按照以下步骤在模拟器上运行 64 位应用程序:

  • 编辑 ./jni/application.mk 为 APP_ABI := x86_64
  • 编译您的原生文件
  • 作为 Android 应用程序在 AVD 上运行

图 4:一个名为“x86_64 Hello-JNI”的应用程序在 x64 AVD 上运行

64 位 x86 Android 平台上的性能

根据我们的测试,应用程序在 64 位系统上的性能更快。我们在代号为 Bay Trail 的 64 位 IA 设备上运行了一个加密演示。此加密演示受益于最新版本的 Android 和 Intel AES-NI。图 5 显示了加密 312M mp4 文件的结果。不包括 I/O 时间,在 32 位 Android 5.0 系统上总时间为 1.56 秒,而在 64 位 Android 5.0 系统上运行时间为 1.49 秒,性能提升了 **5%** [4]。

图 5:通过 Intel® AES-NI 加密 mp4 所需的时间

详细测试结果见下表。

表 1:运行加密应用程序的详细测试结果

总时间 (+SD R/W)
(*秒*)

加密时间 (-SD R/W)
(*秒*)

Android* 5.0
64 位

Android 5.0
32 位

Android 5.0
64 位

Android 5.0
32 位

7.046

7.379

1.498

1.649

7.152

7.27

1.49

1.529

7.011

7.368

1.529

1.57

7.151

7.196

1.487

1.522

7.182

7.282

1.468

1.548

7.1084

7.299

1.4944

1.5636

 

我们还构建了一个 64 位 FFMPEG 并在 Android 5.0 上验证了其性能。结果表明,在同一 Bay Trail 平台上,64 位版本的平均 FPS 比 32 位版本 **高约 7%** [4]。

图 7:通过 FFMPEG 在 64 位 Android* 上播放 1080p MP4 的 FPS

以下是另外两个展示 64 位 Android 在 Intel 平台上性能优势的例子。在中国,一些 ISV 软件的性能基准测试显示,使用 64 位相比 32 位,性能提升了 **7-8%** [4]。

针对 ISV 的多媒体解码应用程序

此基准测试表明,总体而言,所有格式(3gp、avi、flv、mkv、mov、mp4、rmvb、wmv)的播放性能提高了约 **20%**(使用 64 位相比 32 位性能提升)[4]。

图 8:64 位 Android* 上多媒体解码应用程序的 FPS

针对 ISV 的语音识别应用程序

支持 64 位 Android 的语音组合引擎显示,在 64 位 + ART 上性能提升了 **约 40%**(相比 32 位,64 位使用性能提升了 **约 10%**)[4]。

图 9:64 位 Android* 上的语音组合引擎初始化时间

我们分析了此 TTS 演示在 64 位和 32 位 Android 上的模块,包括 get token cost、sty cpy cost、stream cost 和 getline cost:(毫秒)。

图 10:64 位 Android* 上的 TTS 关键模块成本

结果表明 64 位应用程序的优势,尤其是在内存 I/O 和流操作方面。

摘要

面向 Intel Atom 处理器平台的 Android L 64 位技术现可帮助开发者优化其应用程序。为 64 位构建 Android 应用程序与构建传统的 32 位 Android 应用程序一样简单。您现在可以使用官方 Android 64 位模拟器来运行和调试 64 位应用程序。为了测试 64 位 x86 Android 平台的性能,我们重建了几个开源项目以支持 64 位,并让 PRC 的几家顶级 ISV 构建了其应用程序的 64 位版本。性能基准测试显示,使用 64 位相比 32 位,性能提高了 7-8%(在一种特殊情况下甚至达到 20%)。

相关文章

64 位 Android 操作系统
https://software.intel.com/en-us/android/articles/64-bit-android-os

理解 Android 上 x86 vs ARM 内存对齐
https://software.intel.com/en-us/blogs/2011/08/18/understanding-x86-vs-arm-memory-alignment-on-android

参考

[1] http://en.wikipedia.org/wiki/64-bit_computing
[2] https://developer.android.com.cn/tools/sdk/ndk/index.html
[3] https://plus.google.com/+AndroidDevelopers/posts/XG1WmNDMe8H
[4] 性能测试中使用的软件和工作负载可能已针对仅在 Intel 微处理器上优化性能。性能测试(如 SYSmark* 和 MobileMark*)使用特定的计算机系统、组件、软件、操作和功能进行测量。任何这些因素的更改都可能导致结果发生变化。您应该咨询其他信息和性能测试,以协助您全面评估您计划购买的产品,包括该产品与其他产品结合使用时的性能。配置:[Asus T100 (CPU-Intel Atom Baytrail T Z3740, 内存-2G, SSD), 基准测试,由张力&周震进行]。**有关更多信息,请访问** http://www.intel.com/performance

关于作者

周震在上海交通大学获得了软件工程硕士学位。他于 2011 年加入英特尔,担任开发者关系部移动赋能团队的应用工程师。他与内部利益相关者以及外部 ISV、SP 和运营商合作,在 Intel Atom 处理器、传统 Intel 架构和嵌入式 Intel 架构平台上进行新用例模式的创新和原型开发。

张力是 Intel 软件与解决方案集团 (SSG) 开发者关系部移动企业赋能团队的应用工程师。他专注于 Android 上的应用程序赋能。

© . All rights reserved.