使用Intel®编译器和GNU* gcc创建x86和ARM* APK





0/5 (0投票)
本文提供了有关构建此类“fat”apk 的分步说明,该 apk 包含用于 Dalvik* 虚拟机(Dalvik,2013)的 ISA 独立 dex 文件以及用于不同 ISA 目标的库。
Intel® Developer Zone 提供用于跨平台应用开发、平台和技术信息、代码示例以及同行专业知识的工具和操作指南,以帮助开发人员创新和取得成功。加入我们的 Android、物联网、Intel® RealSense™ 技术和 Windows 社区,下载工具,访问开发套件,与志同道合的开发人员分享想法,并参加黑客马拉松、竞赛、路演和本地活动。
目录
引言
存在运行在支持 ARM* 或 x86 指令集架构 (ISA) 的处理器上的 Android* 设备。不同的 ISA 不是二进制兼容的,因此如果应用程序包含本机代码,则应为每个目标 ISA 提供本机库。“fat”Android* 应用程序包(“fat”APK)是此类应用程序的一种分发机制。
本文提供了有关构建此类“fat”apk 的分步说明,该 apk 包含用于 Dalvik* 虚拟机(Dalvik,2013)的 ISA 独立 dex 文件以及用于不同 ISA 目标的库。它包括使用 Intel® Integrated Native Developer Experience (INDE) 为 x86 构建本机应用程序库。
我们将使用 NDK r10 发行版中的 hello-jni 示例进行演示(该示例随 Intel® INDE 安装程序提供)。
准备构建环境
以下工具是必需的,应按顺序遵循这些说明
- Install- Microsoft* .NET Framework
- Java* Development Kit 7u67 假定安装在 [jdk7-dir]
 
- 将此目录添加到“PATH”环境变量- 目录 "[jdk7-dir]\jre\bin" 用于使用 "java" VM。这对于 "ant" 工具是必需的
 对于 Windows 环境,请确保使用短文件夹名称,例如 "PROGRA~2" 代替 "program files (x86)"
 
- 目录 "
- 创建一个新的环境变量- "JAVA_HOME=[jdk7-dir]"
 
- "
- Install- Intel® Integrated Native Developer Experience 假定安装在 [inde-dir]
 
- Intel® Integrated Native Developer Experience 假定安装在 
- 将此目录添加到“PATH”环境变量- 目录 "[ant-dir]\bin" 用于使用 "ant" 工具([ant-dir]的默认位置是:[inde-dir]\IDEintegration)
 
- 目录 "
从命令行构建
本节提供有关如何从命令行构建环境为支持 ARM* 和 x86 架构的 Android 设备创建 APK 包的说明。
首先,在 Linux* 上打开命令窗口或终端窗口;转到 Android NDK 示例 "hello-jni" 目录 [ndk-dir]\samples\hello-jni;然后按照以下步骤操作。
注意:上面一节中提到的所有工具都应从此窗口访问。
- 
	配置应用程序从 "hello-jni" 目录运行以下命令以生成将在以后用于构建示例的build.xml文件。$ android update project --target android-19 --name HelloJni --path . --subprojects
 
 注意
 --target android-19:对应于 Android 4.4 (KITKAT) 版本。
- 
	清理应用程序工作区使用以下命令清理整个工作区,包括所有 ISA 架构的库。 
 $ ant clean
 $ ndk-build V=1 APP_ABI=all clean
 
 注意
 . V=1:打印正在执行的所有命令。
 . APP_ABI=all:强制清理所有目标的中介文件。如果省略此参数,则只清理armeabi目标。
- 
	为 ARM* 架构构建二进制文件使用以下命令为 ARM 架构构建应用程序二进制文件
 $ ndk-build APP_ABI=armeabi-v7a V=1 NDK_TOOLCHAIN=arm-linux-androideabi-4.8
 
 注意
 . APP_ABI=armeabi-v7a:为 ARM* 目标配置编译。
 . NDK_TOOLCHAIN=arm-linux-androideabi-4.8:覆盖默认的 GNU* gcc 4.6 并使用 gcc 4.8。应用程序二进制文件( libhello-jni.so)创建在.\libs\armeabi-v7a\libhello-jni.so
- 
	使用 Intel 编译器为 x86 架构构建二进制文件使用以下命令使用 Intel 编译器为 x86 架构构建应用程序二进制文件
 $ ndk-build APP_ABI=x86 V=1 NDK_TOOLCHAIN=x86-icc NDK_APP.local.cleaned_binaries=true
 
 注意
 . APP_ABI=x86:为 x86 架构配置编译。
 . NDK_TOOLCHAIN=x86-icc:使用 Intel C/C++ 编译器替换 Android 的默认编译器 gcc 4.6。
 . NDK_APP.local.cleaned_binaries=true:抑制 libs/armeabi 目录中库的删除。请参阅底部的说明。应用程序二进制文件( libhello-jni.so)创建在.\libs\x86\libhello-jni.so
- 
	准备应用程序包 (APK)为每个 Android 目标构建完所有二进制文件后,请检查 libs\[targetabi]目录是否包含每个目标架构所需的库。为了简化包创建并避免包签名,请使用以下命令创建调试包 
 $ ant debug之后,新的 HelloJni-debug.apk包可以在.\bin目录中找到。它可以运行在支持 Android SDK 提供的 API 级别 19 或更高版本的 x86* 或 ARM* 模拟器上。HelloJni-debug.apk包包含 2 个目标的库:ARM EABI v7a 和 x86。
从 Eclipse* IDE 构建
- 打开 Eclipse 并加载示例 [inde-dir]/IDEintegration/NDK/samples/hello-jni- 选择菜单 File > New > Project > Android
- 选择 Android Project from Existing Code按钮
- 在 Root Directory字段中,点击Browse...并选择[ndk-dir]/samples目录。
- 然后点击 Deselect All并仅选择项目:hello-jni
- 勾选 Copy projects into workspace复选框
- 点击 Finish。
 
- 选择菜单 
- 向项目添加 Native Support- 右键单击项目名称并选择 Android Tools > Add Native Support...
- 点击 Finish。
 
- 右键单击项目名称并选择 
- 为每个目标平台创建单独的构建配置并设置构建命令
 右键单击项目并选择Properties -> C/C++ Build -> "Manage configurations..."
 点击New...以基于Default配置添加以下新配置- Name: x86_iccDescription:For x86 target using Intel Compiler icc
- Name: arm_gccDescription:For ARM target using GNU gcc
 Configuration设置为 "x86_icc"- 取消勾选 "Use default build command"
- 在 Build command字段中添加以下内容
 ndk-build APP_ABI=x86 NDK_TOOLCHAIN=x86-icc
- 点击 Apply
 Configuration设置为 "arm_gcc"- 取消勾选 "Use default build command"
- 在 Build command字段中添加以下内容
 ndk-build APP_ABI=armeabi-v7a NDK_TOOLCHAIN=arm-linux-androideabi-4.8
- 点击 Apply,然后点击OK
 
- Name: 
- 清理整个应用程序工作区- 如果 Application.mk存在于[eclipse-workspace-dir]\HelloJni\jni目录下,请确保它 **不** 包含以下行
 NDK_APP.local.cleaned_binaries=true
- 右键单击项目并选择 Build configurations > Clean all…
 
- 如果 
- 如果在 [eclipse-workspace-dir]\HelloJni\jni目录下不存在Application.mk,请创建它,并确保它 **包含** 以下行
 NDK_APP.local.cleaned_binaries=true
- 使用 gcc 为 ARM* 目标构建应用程序二进制文件,使用 Intel Compiler 为 x86 目标构建。- 右键单击项目并选择 Build Configurations > Build Selected...
- 选择 "arm_gcc" 和 "x86_icc"
- 点击 Ok。
- 验证输出二进制文件在- [eclipse-workspace-dir]\HelloJni\libs\armeabi-v7a\libhello-jni.so
- [eclipse-workspace-dir]\HelloJni\libs\x86\libhello-jni.so
 
 
- 右键单击项目并选择 
- 创建未签名的应用程序包
 右键单击项目并选择Android Tools > Export Unsigned Application Package...
关于避免清理 .\libs\[targetabi] 下的二进制文件的说明
使用 NDK_APP.local.cleaned_binaries=true 参数来抑制先前构建的库的删除,在未来的 NDK 版本中可能会失效。请查阅 [ndk-dir]/build/core/setup-app.mk makefile,了解如何禁用 clean-installed-binaries 目标的可删除操作。
其他相关文章和资源
- NDK Android* 应用程序移植方法
- 将 x86 目标的默认编译器从 Intel C++ Compiler 更改回 GCC
- Intel® C++ Compiler for Mac OS* - 与 GNU* gcc 和 g++ 编译器的兼容性
- 适用于 Intel® 架构的 Android* NDK
- 在 Intel® 架构上加速 Android* 模拟器
要了解有关 Intel Android 开发工具的更多信息,请访问 Intel® Developer Zone for Android。

