将 Android* x86 NDK 用于 Eclipse* 并移植 NDK 示例应用

目标

面向 Eclipse (ADT) 的 Android 插件现在支持基于 NDK 的应用开发。 其可自动生成项目和构件文件以及代码存根,并可集成到整个 Android 应用开发中(构建原生库、将库复制到项目内的相应 JNI 文件夹、将应用打包以及生成带有 NDK 代码的最终 APK)。 本文将讨论如何配置 Eclipse 以利用该功能,并示范移植 NDK 应用的示例。

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

必须先配置 Eclipse ADT 插件指向 NDK 安装路径的位置后,方可使用该新功能。 首先务必更新 Eclipse 中的 ADT 插件以获得最新更改,并从下面的网站下载最新的 NDK:

http://developer.android.com/tools/sdk/ndk/index.html

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


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

我们现在应当在 Eclipse ADT 中启用和激活与 NDK 相关的功能。 让我们打开其中一个 NDK JNI 示例并进行构建。

打开 Eclipse 中的 hello-jni 示例 NDK 应用,并将 NDK build 支持添加至项目

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

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


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

由于 x86 Android NDK 支持 Gingerbread* 及更高的 Android 平台,我们要确保更新应用描述文件中的最小和目标 SDK 配置。 在 Eclipse 中打开 HelloJni 示例下的 AndroidManifest.xml;单击 AndroidManifest 编辑器中的“使用 SDK”并检查最小 SDK 是否设置为 10 (API 10)。


图 3: Eclipse 中的描述文件编辑器

我们现在已准备好向 Eclipse 中的该项目添加 NDK build 支持。 在 Eclipse 中,右键单击 hello-jni 项目 (com.example.hellojni.HelloJni) -> Android 工具 -> Add Native 支持 -> 完成。


图 4: 将 NDK 支持添加至 Eclipse 中的项目

这样将使用和 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 build 不会自动为 x86 ABI 进行构建。 我们将需要创建构件文件“Application.mk”来明确指定我们的构建目标,或将命令行参数传入 NDK build 命令。

移植应用以使用 x86 ABI 和 NDK build 文件

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


图 7: 将新的 NDK build 文件“Application.mk”添加至示例项目

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


图 8: 编辑 Application.mk 文件以将“all”架构作为目标

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

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


图 9: Eclipse 项目资源管理器显示生成的原生库

Eclipse 将在模拟器中部署应用。 此时我们应当会看到应用成功运行,如该截屏中所示:


图 10: 示例应用成功地在 x86 Android 模拟器内运行

我们希望该文章可帮助您了解如何配置 Eclipse ADT 以在 NDK 代码开发中使用它,以及如何使用 NDK build 文件“Application.mk”来为所需的目标 ABI 进行构建。

相关文章与资源:

声明

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

本文件中包含关于英特尔产品的信息。 本文件不构成对任何知识产权的授权,包括明示的、暗示的,也无论是基于禁止反言的原则或其他。 英特尔不承担任何其他责任。英特尔在此作出免责声明:本文件不构成英特尔关于其产品的使用和/或销售的任何明示或暗示的保证,包括不就其产品的(i)对某一特定用途的适用性、(ii)适销性以及(iii)对任何专利、版权或其他知识产权的侵害的承担任何责任或作出任何担保。

英特尔有权随时更改产品的规格和描述,恕不另行通知。 设计者不应信赖任何英特产品所不具有的特性,设计者亦不应信赖任何标有保留权利摂或未定义摂说明或特性描述。 对此,英特尔保留将来对其进行定义的权利,同时,英特尔不应为因其日后更改该等说明或特性描述而产生的冲突和不相容承担任何责任。 此处提供的信息可随时更改,恕不另行通知。 请勿根据本文件提供的信息完成一项产品设计。

本文件所描述的产品可能包含使其与宣称的规格不符的设计缺陷或失误。 这些缺陷或失误已收录于勘误表中,可索取获得。

在发出订单之前,请联系当地的英特尔营业部或分销商以获取最新的产品规格。

如欲获得本文涉及的带编号文档的副本或其他英特尔文献,可致电 1-800-548-4725,或访问: http://www.intel.com/design/literature.htm

在性能检测过程中涉及的软件及其性能只有在英特尔微处理器的架构下方能得到优化。 诸如SYSmark和MobileMark等测试均系基于特定计算机系统、硬件、软件、操作系统及功能。 上述任何要素的变动都有可能导致测试结果的变化。 请参考其他信息及性能测试(包括结合其他产品使用时的运行性能)以对目标产品进行全面评估。

对本文件中包含的软件源代码的提供均依据相关软件许可而做出,任何对该等源代码的使用和复制均应按照相关软件许可的条款执行。

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

英特尔公司 © 2012 年版权所有。 所有权保留。

* 其他的名称和品牌可能是其他所有者的资产。

优化声明

有关编译器优化的更完整信息,请参阅优化通知
标签: