使用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_icc
Description:For x86 target using Intel Compiler icc
- Name:
arm_gcc
Description: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。