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

Posted wgwyanfs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将 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 年版权全部。 全部权保留。

* 其它的名称和品牌可能是其它全部者的资产。

优化声明

技术分享











以上是关于将 Android* x86 NDK 用于 Eclipse* 并移植 NDK 演示样例应用的主要内容,如果未能解决你的问题,请参考以下文章

Windows7中搭建Android x86 64及armv8-a操作步骤

mac版androidstudio怎么配置ndk

Android 中的 NDK 到底是什么?(详细解析+案例实战)

Android Studio 3.0.1忽略Application.mk中的APP_ABI?

将 avahi 编译到 Android NDK 项目中的问题

用于本机可执行文件的 Android NDK 分析器不生成数据