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

将 Android* x86 NDK 与 Eclipse* 结合使用并移植 NDK 示例应用

2014年6月2日

CPOL

7分钟阅读

viewsIcon

16932

在本文中,我们将讨论如何配置 Eclipse 以利用此功能,并逐步移植一个 NDK 示例应用程序。

目标

Eclipse 的 Android 插件 (ADT) 现在支持基于 NDK 的应用程序开发。它可以自动生成项目和构建文件,以及代码存根,并集成到完整的 Android 应用程序开发中(构建原生库,将库复制到项目中适当的 JNI 文件夹,打包应用程序,并生成包含 NDK 代码的最终 APK)。在本文中,我们将讨论如何配置 Eclipse 以利用此功能,并逐步移植一个 NDK 示例应用程序。

配置 Eclipse ADT 插件以与 NDK 配合使用

在使用此新功能之前,我们需要配置 Eclipse ADT 插件以指向 NDK 安装路径的位置。首先,请务必更新 Eclipse 中的 ADT 插件以获取最新更改,并从以下网站下载最新的 NDK:

https://developer.android.com.cn/tools/sdk/ndk/index.html

在 Eclipse 中,打开“窗口”->“首选项”->“Android”->“NDK”。输入 NDK 安装路径(这里我们假设您在 Windows* 上将 NDK 下载到 c:\sw\android-ndk),如下图所示,然后单击“应用”,再单击“确定”。

图 1:Eclipse Android ADT 插件中的 NDK 配置

我们现在应该已经在 Eclipse ADT 中启用并激活了 NDK 相关功能。让我们打开一个 NDK JNI 示例并进行构建。

在 Eclipse 中打开 hello-jni 示例 NDK 应用程序并向项目添加 NDK 构建支持

要在 Eclipse 中构建 NDK JNI 原生示例,我们需要让 Eclipse ADT 知道此示例使用原生/NDK 代码。

让我们首先将 HelloJni 示例导入 Eclipse。在 Eclipse 中,打开“文件”->“新建”->“项目”->“Android”->“从现有代码创建 Android 项目”。在下一个屏幕中,输入 hello-jni 示例项目(在 NDK 安装文件夹中可用)的路径,并选择“复制到工作区”复选框,单击“完成”。将根目录路径替换为 NDK 安装文件夹中的 HelloJni 路径。

图 2:将示例 HelloJni 项目导入 Eclipse

由于 x86 Android NDK 支持 Gingerbread* 及更高版本的 Android 平台,因此请确保我们更新应用程序清单中的 Min 和 Target SDK 配置。在 Eclipse 中,打开 HelloJni 示例下的 AndroidManifest.xml;单击 AndroidManifest 编辑器中的“使用 SDK”并验证 Min SDK 已设置为 10 (API 10)。

图 3:Eclipse 中的清单文件编辑器

我们现在准备好在 Eclipse 中为该项目添加 NDK 构建支持。在 Eclipse 中,右键单击 hello-jni 项目 (com.example.hellojni.HelloJni) -> Android 工具 -> 添加原生支持 -> 单击“完成”。

图 4:在 Eclipse 中向项目添加 NDK 支持

这将使用 NDK 构建相关设置更新项目配置。当我们重新构建项目时,它将首先编译和构建 NDK 代码,将构建的库复制到相应的项目文件夹,然后继续正常的 APK 构建过程。

在模拟器中构建并运行应用程序

让我们继续构建应用程序并在 Android 模拟器中运行它。我们假设您已经在基于 HAXM 的 Android 模拟器上运行 Gingerbread x86 AVD。

在 Eclipse 中,右键单击 hello-jni 项目 (com.example.hellojni.HelloJni) -> 运行方式 -> Android 应用程序。Eclipse 应该会自动重新构建项目并尝试在模拟器上部署/运行 APK。

但是当模拟器运行时,我们看到下面的错误消息,因为默认的 NDK 项目设置不支持 x86。

图 5:在模拟器中运行示例应用程序

在 Eclipse 中,您可以看到 logcat 显示错误“无法加载 hello-jni”

图 6:Logcat 显示无法加载原生库

默认情况下,NDK 构建不会自动为 x86 ABI 构建。我们需要创建一个构建文件“Application.mk”来明确指定我们的构建目标,或者将命令行参数传递给 NDK 构建命令。

将应用程序移植到使用 x86 ABI 和 NDK 构建文件

让我们修改项目以支持 x86 ABI。在 Eclipse 中,右键单击 hello-jni 项目中的“jni”文件夹,然后选择“新建”->“文件”-> 输入“Application.mk”作为文件名,然后单击“完成”。

图 7:向示例项目添加新的 NDK 构建文件“Application.mk”

编辑文件“Application.mk”,添加行“APP_ABI := all”,如下图所示,然后保存文件。

图 8:编辑 Application.mk 文件以 targeting “all”架构

构建应用程序,验证它构建 x86 库,并在 x86 模拟器中测试应用程序

现在当我们重新构建应用程序时,它将为 NDK 中所有支持的 ABI 进行构建。在 Eclipse 中右键单击“hello-jni”项目 -> 运行方式 -> Android 应用程序。Eclipse 将自动调用 NDK 构建并生成所有原生库。您可以在 libs 文件夹下进行验证,如下图所示。

图 9:Eclipse 项目浏览器显示生成的原生库

Eclipse 将在模拟器中部署应用程序。这次我们应该看到应用程序成功运行,如截图所示

图 10:示例应用程序在 x86 Android 模拟器中成功运行

我们希望这篇文章能帮助您了解如何配置 Eclipse ADT 以用于 NDK 代码开发,以及如何使用 NDK 构建文件“Application.mk”来为所需的 target ABI 进行构建。

相关文章与资源

注意事项

本文档中的信息与英特尔产品相关。本文档不授予任何知识产权的明示或暗示许可,也不通过禁止反言或其他方式授予任何知识产权。除英特尔此类产品的销售条款和条件中规定外,英特尔不承担任何责任,并且英特尔不作任何明示或暗示的保证,包括但不限于与特定用途的适用性、适销性或侵犯任何专利、版权或其他知识产权相关的责任或保证。

本文档中的信息与英特尔产品相关。本文档不授予任何知识产权的明示或暗示许可,也不通过禁止反言或其他方式授予任何知识产权。除英特尔此类产品的销售条款和条件中规定外,英特尔不承担任何责任,并且英特尔不作任何明示或暗示的保证,包括但不限于与特定用途的适用性、适销性或侵犯任何专利、版权或其他知识产权相关的责任或保证。

英特尔可能随时更改规格和产品描述,恕不另行通知。设计人员不得依赖标有“保留”或“未定义”的任何功能或指令的缺失或特性。英特尔保留这些以供将来定义,并且对于因将来更改而引起的冲突或不兼容,不承担任何责任。此处的信息如有更改,恕不另行通知。请勿根据此信息最终确定设计。

本文档中描述的产品可能包含已知为勘误的设计缺陷或错误,这可能导致产品偏离已发布的规范。当前的已表征勘误可应要求提供。

请联系您当地的英特尔销售办事处或您的经销商以获取最新的规范,并在下订单前进行咨询。

带有订单号并在此文档中引用的文档或其他英特尔资料的副本可通过致电 1-800-548-4725 获取,或访问:http://www.intel.com/design/literature.htm

性能测试中使用的软件和工作负载可能已针对英特尔微处理器进行性能优化。SYSmark 和 MobileMark 等性能测试是使用特定的计算机系统、组件、软件、操作和功能进行测量的。任何这些因素的任何更改都可能导致结果有所不同。您应该查阅其他信息和性能测试,以帮助您全面评估您的预期购买,包括该产品与其他产品结合使用时的性能。

本文档中重印的任何软件源代码均根据软件许可证提供,并且只能根据该许可证的条款使用或复制。

Intel 和 Intel 标志是英特尔公司在美国和/或其他国家的商标。

版权所有 © 2012 Intel Corporation。保留所有权利。

*其他名称和品牌可能被声明为他人的财产。

优化通知

要了解更多关于安卓开发者的英特尔工具,请访问英特尔® 安卓开发者专区

© . All rights reserved.